Merge pull request #4824 from edsantiago/bats

more BATS tests
This commit is contained in:
OpenShift Merge Robot
2020-01-15 23:33:02 +01:00
committed by GitHub
6 changed files with 193 additions and 3 deletions

View File

@ -85,4 +85,55 @@ echo $rand | 0 | $rand
run_podman 1 run --rm $IMAGE sh -c /bin/false run_podman 1 run --rm $IMAGE sh -c /bin/false
} }
@test "podman run --name" {
randomname=$(random_string 30)
# Assume that 4 seconds gives us enough time for 3 quick tests (or at
# least for the 'ps'; the 'container exists' should pass even in the
# unlikely case that the container exits before we get to them)
run_podman run -d --name $randomname $IMAGE sleep 4
cid=$output
run_podman ps --format '{{.Names}}--{{.ID}}'
is "$output" "$randomname--${cid:0:12}"
run_podman container exists $randomname
run_podman container exists $cid
# Done with live-container tests; now let's test after container finishes
run_podman wait $cid
# Container still exists even after stopping:
run_podman container exists $randomname
run_podman container exists $cid
# ...but not after being removed:
run_podman rm $cid
run_podman 1 container exists $randomname
run_podman 1 container exists $cid
}
@test "podman run --pull" {
skip_if_remote "podman-remote does not emit 'Trying to pull' msgs"
run_podman run --pull=missing $IMAGE true
is "$output" "" "--pull=missing [present]: no output"
run_podman run --pull=never $IMAGE true
is "$output" "" "--pull=never [present]: no output"
# Now test with busybox, which we don't have present
run_podman 125 run --pull=never busybox true
is "$output" "Error: unable to find a name and tag match for busybox in repotags: no such image" "--pull=never [busybox/missing]: error"
run_podman run --pull=missing busybox true
is "$output" "Trying to pull .*" "--pull=missing [busybox/missing]: fetches"
run_podman run --pull=always busybox true
is "$output" "Trying to pull .*" "--pull=always [busybox/present]: fetches"
run_podman rm -a
run_podman rmi busybox
}
# vim: filetype=sh # vim: filetype=sh

View File

@ -40,7 +40,7 @@ EOF
# Make an empty test directory, with a subdirectory used for tar # Make an empty test directory, with a subdirectory used for tar
tmpdir=$PODMAN_TMPDIR/build-test tmpdir=$PODMAN_TMPDIR/build-test
run mkdir -p $tmpdir/subtest || die "Could not mkdir $tmpdir/subtest" mkdir -p $tmpdir/subtest || die "Could not mkdir $tmpdir/subtest"
echo "This is the ORIGINAL file" > $tmpdir/subtest/myfile1 echo "This is the ORIGINAL file" > $tmpdir/subtest/myfile1
run tar -C $tmpdir -cJf $tmpdir/myfile.tar.xz subtest run tar -C $tmpdir -cJf $tmpdir/myfile.tar.xz subtest
@ -80,6 +80,25 @@ EOF
run_podman rmi -f build_test $iid run_podman rmi -f build_test $iid
} }
@test "podman build - URLs" {
tmpdir=$PODMAN_TMPDIR/build-test
mkdir -p $tmpdir
cat >$tmpdir/Dockerfile <<EOF
FROM $IMAGE
ADD https://github.com/containers/libpod/blob/master/README.md /tmp/
EOF
run_podman build -t add_url $tmpdir
run_podman run --rm add_url stat /tmp/README.md
run_podman rmi -f add_url
# Now test COPY. That should fail.
sed -i -e 's/ADD/COPY/' $tmpdir/Dockerfile
run_podman 125 build -t copy_url $tmpdir
is "$output" ".*error building at STEP .*: source can't be a URL for COPY"
}
function teardown() { function teardown() {
# A timeout or other error in 'build' can leave behind stale images # A timeout or other error in 'build' can leave behind stale images
# that podman can't even see and which will cascade into subsequent # that podman can't even see and which will cascade into subsequent

View File

@ -49,4 +49,20 @@ load helpers
run_podman rm -f $cid run_podman rm -f $cid
} }
# Issue #4785 - piping to exec statement - fixed in #4818
@test "podman exec - cat from stdin" {
skip_if_remote
run_podman run -d $IMAGE sh -c 'while [ ! -e /stop ]; do sleep 0.1;done'
cid="$output"
echo_string=$(random_string 20)
run_podman exec -i $cid cat < <(echo $echo_string)
is "$output" "$echo_string" "output read back from 'exec cat'"
run_podman exec $cid touch /stop
run_podman wait $cid
run_podman rm $cid
}
# vim: filetype=sh # vim: filetype=sh

28
test/system/140-diff.bats Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env bats -*- bats -*-
#
# Tests for podman diff
#
load helpers
@test "podman diff" {
rand_file=$(random_string 10)
run_podman run $IMAGE sh -c "touch /$rand_file;rm /etc/services"
run_podman diff --format json -l
# Expected results for each type of diff
declare -A expect=(
[added]="/$rand_file"
[changed]="/etc"
[deleted]="/etc/services"
)
for field in ${!expect[@]}; do
result=$(jq -r -c ".${field}[]" <<<"$output")
is "$result" "${expect[$field]}" "$field"
done
run_podman rm -l
}
# vim: filetype=sh

View File

@ -0,0 +1,66 @@
#!/usr/bin/env bats -*- bats -*-
#
# 410-selinux - podman selinux tests
#
load helpers
function check_label() {
if [ ! -e /usr/sbin/selinuxenabled ] || ! /usr/sbin/selinuxenabled; then
skip "selinux disabled or not available"
fi
local args="$1"; shift # command-line args for run
# FIXME: it'd be nice to specify the command to run, e.g. 'ls -dZ /',
# but alpine ls (from busybox) doesn't support -Z
run_podman run --rm $args $IMAGE cat -v /proc/self/attr/current
# FIXME: on some CI systems, 'run --privileged' emits a spurious
# warning line about dup devices. Ignore it.
local context="$output"
if [ ${#lines[@]} -gt 1 ]; then
if expr "${lines[0]}" : "WARNING: .* type, major" >/dev/null; then
echo "# ${lines[0]} [ignored]" >&3
context="${lines[1]}"
else
die "FAILED: too much output, expected one single line"
fi
fi
is "$context" ".*_u:system_r:.*" "SELinux role should always be system_r"
# e.g. system_u:system_r:container_t:s0:c45,c745 -> "container_t"
type=$(cut -d: -f3 <<<"$context")
is "$type" "$1" "SELinux type"
if [ -n "$2" ]; then
# e.g. from the above example -> "s0:c45,c745"
range=$(cut -d: -f4,5 <<<"$context")
is "$range" "$2" "SELinux range"
fi
}
@test "podman selinux: confined container" {
check_label "" "container_t"
}
@test "podman selinux: container with label=disable" {
skip_if_rootless
check_label "--security-opt label=disable" "spc_t"
}
@test "podman selinux: privileged container" {
skip_if_rootless
check_label "--privileged --userns=host" "spc_t"
}
@test "podman selinux: container with overridden range" {
check_label "--security-opt label=level:s0:c1,c2" "container_t" "s0:c1,c2"
}
# vim: filetype=sh

View File

@ -192,15 +192,24 @@ function wait_for_output {
fi fi
done done
[ -n "$cid" ] || die "FATAL: wait_for_ready: no container name/ID in '$*'" [ -n "$cid" ] || die "FATAL: wait_for_output: no container name/ID in '$*'"
t1=$(expr $SECONDS + $how_long) t1=$(expr $SECONDS + $how_long)
while [ $SECONDS -lt $t1 ]; do while [ $SECONDS -lt $t1 ]; do
run_podman logs $cid run_podman logs $cid
if expr "$output" : ".*$expect" >/dev/null; then logs=$output
if expr "$logs" : ".*$expect" >/dev/null; then
return return
fi fi
# Barf if container is not running
run_podman inspect --format '{{.State.Running}}' $cid
if [ $output != "true" ]; then
run_podman inspect --format '{{.State.ExitCode}}' $cid
exitcode=$output
die "Container exited (status: $exitcode) before we saw '$expect': $logs"
fi
sleep $sleep_delay sleep $sleep_delay
done done
@ -258,6 +267,7 @@ function skip_if_not_systemd() {
# die # Abort with helpful message # die # Abort with helpful message
######### #########
function die() { function die() {
# FIXME: handle multi-line output
echo "#/vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv" >&2 echo "#/vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv" >&2
echo "#| FAIL: $*" >&2 echo "#| FAIL: $*" >&2
echo "#\\^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" >&2 echo "#\\^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" >&2