Add a system test to modify and import an exported container.

This test has completed one of TODO items in test/system/TODO.md.
The item is "Implied pull, build, export, modify, import, tag, run, kill"

Signed-off-by: Tsubasa Watanabe <w.tsubasa@fujitsu.com>
This commit is contained in:
Tsubasa Watanabe 2021-09-03 23:18:57 +09:00
parent 858d3e47c2
commit 4ccb4f81f7

View file

@ -43,3 +43,66 @@ load helpers
is "$output" "$random_content" "tagged import via stdin"
run_podman rmi -f $fqin
}
@test "podman export, alter tarball, re-import" {
# Create a test file following test
mkdir $PODMAN_TMPDIR/tmp
touch $PODMAN_TMPDIR/testfile1
echo "modified tar file" >> $PODMAN_TMPDIR/tmp/testfile2
# Create Dockerfile for test
dockerfile=$PODMAN_TMPDIR/Dockerfile
cat >$dockerfile <<EOF
FROM $IMAGE
ADD testfile1 /tmp
WORKDIR /tmp
EOF
b_img=before_change_img
b_cnt=before_change_cnt
a_img=after_change_img
a_cnt=after_change_cnt
# Build from Dockerfile FROM non-existing local image
run_podman build -t $b_img $PODMAN_TMPDIR
run_podman create --name $b_cnt $b_img
# Export built container as tarball
run_podman export -o $PODMAN_TMPDIR/$b_cnt.tar $b_cnt
run_podman rm -f $b_cnt
# Modify tarball contents
tar --delete -f $PODMAN_TMPDIR/$b_cnt.tar tmp/testfile1
tar -C $PODMAN_TMPDIR -rf $PODMAN_TMPDIR/$b_cnt.tar tmp/testfile2
# Import tarball and Tag imported image
run_podman import -q $PODMAN_TMPDIR/$b_cnt.tar \
--change "CMD sh -c \
\"trap 'exit 33' 2;
while true; do sleep 0.05;done\"" $a_img
# Run imported image to confirm tarball modification, block on non-special signal
run_podman run --name $a_cnt -d $a_img
# Confirm testfile1 is deleted from tarball
run_podman 1 exec $a_cnt cat /tmp/testfile1
is "$output" ".*can't open '/tmp/testfile1': No such file or directory"
# Confirm testfile2 is added to tarball
run_podman exec $a_cnt cat /tmp/testfile2
is "$output" "modified tar file" "modify tarball content"
# Kill can send non-TERM/KILL signal to container to exit
run_podman kill --signal 2 $a_cnt
run_podman wait $a_cnt
# Confirm exit within timeout
run_podman ps -a --filter name=$a_cnt --format '{{.Status}}'
is "$output" "Exited (33)" "Exit by non-TERM/KILL"
run_podman rm -f $a_cnt
run_podman rmi $b_img $a_img
}