Skip to content

Commit

Permalink
criu: check that stdout, stdin pipes are restore correctly
Browse files Browse the repository at this point in the history
Signed-off-by: Andrei Vagin <[email protected]>
  • Loading branch information
avagin committed May 2, 2017
1 parent abd0515 commit a9e15e7
Showing 1 changed file with 41 additions and 21 deletions.
62 changes: 41 additions & 21 deletions tests/integration/checkpoint.bats
Original file line number Diff line number Diff line change
Expand Up @@ -67,21 +67,33 @@ function teardown() {
# setting terminal and root:readonly: to false
sed -i 's;"terminal": true;"terminal": false;' config.json
sed -i 's;"readonly": true;"readonly": false;' config.json
sed -i 's/"sh"/"sh","-c","while :; do date; sleep 1; done"/' config.json
sed -i 's/"sh"/"sh","-c","for i in `seq 10`; do read xxx || continue; echo ponG $xxx; done"/' config.json

(
# run busybox (not detached)
runc run test_busybox
[ "$status" -eq 0 ]
) &
# The following code creates pipes for stdin and stdout.
# CRIU can't handle fifo-s, so we need all these tricks.
fifo=`mktemp -u /tmp/runc-fifo-XXXXXX`
mkfifo $fifo

# check state
wait_for_container 15 1 test_busybox
# stdout
cat $fifo | cat $fifo &
pid=$!
exec 50</proc/$pid/fd/0
exec 51>/proc/$pid/fd/0

runc state test_busybox
[ "$status" -eq 0 ]
[[ "${output}" == *"running"* ]]
# stdin
cat $fifo | cat $fifo &
pid=$!
exec 60</proc/$pid/fd/0
exec 61>/proc/$pid/fd/0

echo -n > $fifo
unlink $fifo

# run busybox (not detached)
__runc run -d test_busybox <&60 >&51 2>&51
[ $? -eq 0 ]

testcontainer test_busybox running

#test checkpoint pre-dump
mkdir parent-dir
Expand All @@ -95,24 +107,32 @@ function teardown() {

# checkpoint the running container
mkdir image-dir
runc --criu "$CRIU" checkpoint --parent-path ./parent-dir --image-path ./image-dir test_busybox
mkdir work-dir
runc --criu "$CRIU" checkpoint --parent-path ./parent-dir --work-path ./work-dir --image-path ./image-dir test_busybox
cat ./work-dir/dump.log | grep -B 5 Error || true
[ "$status" -eq 0 ]

# after checkpoint busybox is no longer running
runc state test_busybox
[ "$status" -ne 0 ]

# restore from checkpoint
(
runc --criu "$CRIU" restore --image-path ./image-dir test_busybox
[ "$status" -eq 0 ]
) &

# check state
wait_for_container 15 1 test_busybox
__runc --criu "$CRIU" restore -d --work-path ./work-dir --image-path ./image-dir test_busybox <&60 >&51 2>&51
ret=$?
cat ./work-dir/restore.log | grep -B 5 Error || true
[ $ret -eq 0 ]

# busybox should be back up and running
runc state test_busybox
testcontainer test_busybox running

runc exec --cwd /bin test_busybox echo ok
[ "$status" -eq 0 ]
[[ "${output}" == *"running"* ]]
[[ ${output} == "ok" ]]

echo Ping >&61
exec 61>&-
exec 51>&-
run cat <&50
[ "$status" -eq 0 ]
[[ "${output}" == *"ponG Ping"* ]]
}

0 comments on commit a9e15e7

Please sign in to comment.