mirror of
https://github.com/containers/podman.git
synced 2025-06-22 18:08:11 +08:00
@ -85,4 +85,55 @@ echo $rand | 0 | $rand
|
||||
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
|
||||
|
@ -40,7 +40,7 @@ EOF
|
||||
|
||||
# Make an empty test directory, with a subdirectory used for tar
|
||||
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
|
||||
run tar -C $tmpdir -cJf $tmpdir/myfile.tar.xz subtest
|
||||
@ -80,6 +80,25 @@ EOF
|
||||
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() {
|
||||
# A timeout or other error in 'build' can leave behind stale images
|
||||
# that podman can't even see and which will cascade into subsequent
|
||||
|
@ -49,4 +49,20 @@ load helpers
|
||||
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
|
||||
|
28
test/system/140-diff.bats
Normal file
28
test/system/140-diff.bats
Normal 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
|
66
test/system/410-selinux.bats
Normal file
66
test/system/410-selinux.bats
Normal 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
|
@ -192,15 +192,24 @@ function wait_for_output {
|
||||
fi
|
||||
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)
|
||||
while [ $SECONDS -lt $t1 ]; do
|
||||
run_podman logs $cid
|
||||
if expr "$output" : ".*$expect" >/dev/null; then
|
||||
logs=$output
|
||||
if expr "$logs" : ".*$expect" >/dev/null; then
|
||||
return
|
||||
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
|
||||
done
|
||||
|
||||
@ -258,6 +267,7 @@ function skip_if_not_systemd() {
|
||||
# die # Abort with helpful message
|
||||
#########
|
||||
function die() {
|
||||
# FIXME: handle multi-line output
|
||||
echo "#/vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv" >&2
|
||||
echo "#| FAIL: $*" >&2
|
||||
echo "#\\^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" >&2
|
||||
|
Reference in New Issue
Block a user