#!/usr/bin/env bats -*- bats -*- # # podman volume-related tests # load helpers function setup() { basic_setup run_podman '?' volume rm -a } function teardown() { run_podman '?' rm -a --volumes run_podman '?' volume rm -a -f basic_teardown } # Simple volume tests: share files between host and container @test "podman run --volumes : basic" { skip_if_remote "volumes cannot be shared across hosts" # Create three temporary directories vol1=${PODMAN_TMPDIR}/v1_$(random_string) vol2=${PODMAN_TMPDIR}/v2_$(random_string) vol3=${PODMAN_TMPDIR}/v3_$(random_string) mkdir $vol1 $vol2 $vol3 # In each directory, write a random string to a file echo $(random_string) >$vol1/file1_in echo $(random_string) >$vol2/file2_in echo $(random_string) >$vol3/file3_in # Run 'cat' on each file, and compare against local files. Mix -v / --volume # flags, and specify them out of order just for grins. The shell wildcard # expansion must sort vol1/2/3 lexically regardless. v_opts="-v $vol1:/vol1:z --volume $vol3:/vol3:z -v $vol2:/vol2:z" run_podman run --rm $v_opts $IMAGE sh -c "cat /vol?/file?_in" for i in 1 2 3; do eval voldir=\$vol${i} is "${lines[$(($i - 1))]}" "$(< $voldir/file${i}_in)" \ "contents of /vol${i}/file${i}_in" done # Confirm that container sees vol1 as a mount point run_podman run --rm $v_opts $IMAGE mount is "$output" ".* on /vol1 type .*" "'mount' in container lists vol1" # Have the container do write operations, confirm them on host out1=$(random_string) run_podman run --rm $v_opts $IMAGE sh -c "echo $out1 >/vol1/file1_out; cp /vol2/file2_in /vol3/file3_out" is "$(<$vol1/file1_out)" "$out1" "contents of /vol1/file1_out" is "$(<$vol3/file3_out)" "$(<$vol2/file2_in)" "contents of /vol3/file3_out" # Writing to read-only volumes: not allowed run_podman 1 run --rm -v $vol1:/vol1ro:z,ro $IMAGE sh -c "touch /vol1ro/abc" is "$output" ".*Read-only file system" "touch on read-only volume" } # Running scripts (executables) from a volume @test "podman volume: exec/noexec" { myvolume=myvol$(random_string) run_podman volume create $myvolume is "$output" "$myvolume" "output from volume create" run_podman volume inspect --format '{{.Mountpoint}}' $myvolume mountpoint="$output" # Create a script, make it runnable rand=$(random_string) cat >$mountpoint/myscript <