mirror of
https://github.com/containers/podman.git
synced 2025-06-21 09:28:09 +08:00
system tests: new rm, build tests
- rm: confirm 'rm' and 'rm -f' on running container - build: shotgun test of workdir, cmd, env, labels The new build test cd's to a temporary directory, which broke test invocations using a relative path (./bin/podman). Added code to detect relative paths and convert them to absolute. Signed-off-by: Ed Santiago <santiago@redhat.com>
This commit is contained in:
@ -21,6 +21,18 @@ load helpers
|
|||||||
run_podman 125 inspect $rand
|
run_podman 125 inspect $rand
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "podman rm - running container, w/o and w/ force" {
|
||||||
|
run_podman run -d $IMAGE sleep 5
|
||||||
|
cid="$output"
|
||||||
|
|
||||||
|
# rm should fail
|
||||||
|
run_podman 2 rm $cid
|
||||||
|
is "$output" "Error: cannot remove container $cid as it is running - running or paused containers cannot be removed without force: container state improper" "error message"
|
||||||
|
|
||||||
|
# rm -f should succeed
|
||||||
|
run_podman rm -f $cid
|
||||||
|
}
|
||||||
|
|
||||||
# I'm sorry! This test takes 13 seconds. There's not much I can do about it,
|
# I'm sorry! This test takes 13 seconds. There's not much I can do about it,
|
||||||
# please know that I think it's justified: podman 1.5.0 had a strange bug
|
# please know that I think it's justified: podman 1.5.0 had a strange bug
|
||||||
# in with exit status was not preserved on some code paths with 'rm -f'
|
# in with exit status was not preserved on some code paths with 'rm -f'
|
||||||
|
@ -99,6 +99,84 @@ EOF
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@test "podman build - workdir, cmd, env, label" {
|
||||||
|
tmpdir=$PODMAN_TMPDIR/build-test
|
||||||
|
mkdir -p $tmpdir
|
||||||
|
|
||||||
|
# Random workdir, and multiple random strings to verify command & env
|
||||||
|
workdir=/$(random_string 10)
|
||||||
|
s_echo=$(random_string 15)
|
||||||
|
s_env1=$(random_string 20)
|
||||||
|
s_env2=$(random_string 25)
|
||||||
|
s_env3=$(random_string 30)
|
||||||
|
|
||||||
|
# Label name: make sure it begins with a letter! jq barfs if you
|
||||||
|
# try to ask it for '.foo.<N>xyz', i.e. any string beginning with digit
|
||||||
|
label_name=l$(random_string 8)
|
||||||
|
label_value=$(random_string 12)
|
||||||
|
|
||||||
|
# Command to run on container startup with no args
|
||||||
|
cat >$tmpdir/mycmd <<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
pwd
|
||||||
|
echo "\$1"
|
||||||
|
echo "\$MYENV1"
|
||||||
|
echo "\$MYENV2"
|
||||||
|
echo "\$MYENV3"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat >$tmpdir/Containerfile <<EOF
|
||||||
|
FROM $IMAGE
|
||||||
|
LABEL $label_name=$label_value
|
||||||
|
RUN mkdir $workdir
|
||||||
|
WORKDIR $workdir
|
||||||
|
ENV MYENV1=$s_env1
|
||||||
|
ENV MYENV2 $s_env2
|
||||||
|
ENV MYENV3 this-should-be-overridden
|
||||||
|
ADD mycmd /bin/mydefaultcmd
|
||||||
|
RUN chmod 755 /bin/mydefaultcmd
|
||||||
|
CMD ["/bin/mydefaultcmd","$s_echo"]
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# cd to the dir, so we test relative paths (important for podman-remote)
|
||||||
|
cd $PODMAN_TMPDIR
|
||||||
|
run_podman build -t build_test -f build-test/Containerfile build-test
|
||||||
|
|
||||||
|
# Run without args - should run the above script. Verify its output.
|
||||||
|
run_podman run --rm -e MYENV3="$s_env3" build_test
|
||||||
|
is "${lines[0]}" "$workdir" "container default command: pwd"
|
||||||
|
is "${lines[1]}" "$s_echo" "container default command: output from echo"
|
||||||
|
is "${lines[2]}" "$s_env1" "container default command: env1"
|
||||||
|
is "${lines[3]}" "$s_env2" "container default command: env2"
|
||||||
|
is "${lines[4]}" "$s_env3" "container default command: env3 (from cmdline)"
|
||||||
|
|
||||||
|
# test that workdir is set for command-line commands also
|
||||||
|
run_podman run --rm build_test pwd
|
||||||
|
is "$output" "$workdir" "pwd command in container"
|
||||||
|
|
||||||
|
# Confirm that 'podman inspect' shows the expected values
|
||||||
|
# FIXME: can we rely on .Env[0] being PATH, and the rest being in order??
|
||||||
|
run_podman image inspect build_test
|
||||||
|
tests="
|
||||||
|
Env[1] | MYENV1=$s_env1
|
||||||
|
Env[2] | MYENV2=$s_env2
|
||||||
|
Env[3] | MYENV3=this-should-be-overridden
|
||||||
|
Cmd[0] | /bin/mydefaultcmd
|
||||||
|
Cmd[1] | $s_echo
|
||||||
|
WorkingDir | $workdir
|
||||||
|
Labels.$label_name | $label_value
|
||||||
|
"
|
||||||
|
|
||||||
|
parse_table "$tests" | while read field expect; do
|
||||||
|
actual=$(jq -r ".[0].Config.$field" <<<"$output")
|
||||||
|
dprint "# actual=<$actual> expect=<$expect}>"
|
||||||
|
is "$actual" "$expect" "jq .Config.$field"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Clean up
|
||||||
|
run_podman rmi -f build_test
|
||||||
|
}
|
||||||
|
|
||||||
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
|
||||||
|
@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
# Podman command to run; may be podman-remote
|
# Podman command to run; may be podman-remote
|
||||||
PODMAN=${PODMAN:-podman}
|
PODMAN=${PODMAN:-podman}
|
||||||
|
# If it's a relative path, convert to absolute; otherwise tests can't cd out
|
||||||
|
if [[ "$PODMAN" =~ / ]]; then
|
||||||
|
if [[ ! "$PODMAN" =~ ^/ ]]; then
|
||||||
|
PODMAN=$(realpath $PODMAN)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Standard image to use for most tests
|
# Standard image to use for most tests
|
||||||
PODMAN_TEST_IMAGE_REGISTRY=${PODMAN_TEST_IMAGE_REGISTRY:-"quay.io"}
|
PODMAN_TEST_IMAGE_REGISTRY=${PODMAN_TEST_IMAGE_REGISTRY:-"quay.io"}
|
||||||
|
Reference in New Issue
Block a user