mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-23 01:59:04 +00:00
test: test external namespace support
Adapt netns_ext tests to also work with pid namespaces and move it from test/others/netns_ext/ to test/others/ns_ext/. Also enable ns_ext tests in Travis runs. Signed-off-by: Adrian Reber <areber@redhat.com>
This commit is contained in:
parent
ad7237ed4e
commit
27b13b2fe1
6 changed files with 85 additions and 42 deletions
|
|
@ -211,4 +211,7 @@ ip net add test
|
|||
# libcriu testing
|
||||
make -C test/others/libcriu run
|
||||
|
||||
# external namespace testing
|
||||
make -C test/others/ns_ext run
|
||||
|
||||
make -C test/others/shell-job
|
||||
|
|
|
|||
|
|
@ -1,2 +0,0 @@
|
|||
run:
|
||||
./run.sh
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
CRIU=../../../criu/criu
|
||||
setsid unshare -n bash -c 'unshare -n sh _run.sh pidfile2 & unshare -n sh _run.sh pidfile3 & ip link add xxx type veth && ip link add mymacvlan1 link xxx type macvlan mode bridge && . _run.sh pidfile' < /dev/zero &> output &
|
||||
sleep 1
|
||||
while :; do
|
||||
test -f pidfile && test -f pidfile2 && break;
|
||||
sleep 0.1
|
||||
done
|
||||
|
||||
pid=$(cat pidfile)
|
||||
pid2=$(cat pidfile2)
|
||||
|
||||
touch test_netns
|
||||
mount --bind /proc/$pid/ns/net test_netns
|
||||
touch test_netns2
|
||||
mount --bind /proc/$pid2/ns/net test_netns2
|
||||
mkdir -p images
|
||||
ino=$(ls -iL test_netns | awk '{ print $1 }')
|
||||
ino2=$(ls -iL test_netns2 | awk '{ print $1 }')
|
||||
exec 33< test_netns
|
||||
exec 34< test_netns2
|
||||
$CRIU dump -t $pid -o dump.log -D images --external net[$ino]:test_netns --external net[$ino2]:test_netns2
|
||||
cat images/dump.log | grep -B 5 Error || echo ok
|
||||
$CRIU restore -o restore.log -D images --inherit-fd fd[33]:test_netns --inherit-fd fd[34]:test_netns2 -d
|
||||
cat images/restore.log | grep -B 5 Error || echo ok
|
||||
new_ino=$(ls -iL /proc/$pid/ns/net | awk '{ print $1 }')
|
||||
new_ino2=$(ls -iL /proc/$pid2/ns/net | awk '{ print $1 }')
|
||||
[ "$ino" -ne "$new_ino" ] && {
|
||||
echo FAIL
|
||||
exit 1
|
||||
}
|
||||
[ "$ino2" -ne "$new_ino2" ] && {
|
||||
echo FAIL
|
||||
exit 1
|
||||
}
|
||||
echo PASS
|
||||
exit 0
|
||||
7
test/others/ns_ext/Makefile
Normal file
7
test/others/ns_ext/Makefile
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
run:
|
||||
./run.sh net
|
||||
./run.sh pid
|
||||
|
||||
clean:
|
||||
rm -rf images output pidfile pidfile2 pidfile3
|
||||
.PHONY: clean run
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
ip link set up dev lo
|
||||
echo $$ > $1
|
||||
while :; do
|
||||
sleep 1
|
||||
74
test/others/ns_ext/run.sh
Executable file
74
test/others/ns_ext/run.sh
Executable file
|
|
@ -0,0 +1,74 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -x
|
||||
|
||||
if [[ "$1" == "pid" ]]; then
|
||||
NS=pid
|
||||
else
|
||||
NS=net
|
||||
fi
|
||||
|
||||
MNT1=test_ns1
|
||||
MNT2=test_ns2
|
||||
|
||||
trap "cleanup" QUIT TERM INT HUP EXIT
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
kill -9 $pid $pid2
|
||||
sleep 0.5
|
||||
umount -lf $MNT1 $MNT2 || :
|
||||
rm -f $MNT1 $MNT2
|
||||
rm -f pidfile pidfile2 pidfile3
|
||||
}
|
||||
|
||||
CRIU=../../../criu/criu
|
||||
if [[ "$NS" == "net" ]]; then
|
||||
setsid unshare -n bash -c 'unshare -n sh _run.sh pidfile2 & unshare -n sh _run.sh pidfile3 & ip link add xxx type veth && ip link add mymacvlan1 link xxx type macvlan mode bridge && . _run.sh pidfile' < /dev/zero &> output &
|
||||
elif [[ "$NS" == "pid" ]]; then
|
||||
RND1=$RANDOM
|
||||
RND2=$RANDOM
|
||||
setsid unshare -p -f setsid bash -c "setsid sh _run.sh pidfile2 $RND2 & . _run.sh pidfile $RND1" < /dev/zero &> output &
|
||||
fi
|
||||
sleep 1
|
||||
while :; do
|
||||
test -f pidfile && test -f pidfile2 && break;
|
||||
sleep 0.1
|
||||
done
|
||||
|
||||
if [[ "$NS" == "net" ]]; then
|
||||
pid=$(cat pidfile)
|
||||
pid2=$(cat pidfile2)
|
||||
elif [[ "$NS" == "pid" ]]; then
|
||||
pid2=$(pgrep -f ". _run.sh pidfile $RND1" -n)
|
||||
pid=$(pgrep -f "sh _run.sh pidfile2 $RND2" -n)
|
||||
fi
|
||||
|
||||
touch $MNT1
|
||||
mount --bind /proc/$pid/ns/$NS $MNT1
|
||||
touch $MNT2
|
||||
mount --bind /proc/$pid2/ns/$NS $MNT2
|
||||
mkdir -p images
|
||||
ino=$(ls -iL $MNT1 | awk '{ print $1 }')
|
||||
ino2=$(ls -iL $MNT2 | awk '{ print $1 }')
|
||||
exec 33< $MNT1
|
||||
exec 34< $MNT2
|
||||
$CRIU dump -v4 -t $pid -o dump.log -D images --external $NS[$ino]:test_ns --external $NS[$ino2]:test_ns2
|
||||
cat images/dump.log | grep -B 5 Error || echo ok
|
||||
$CRIU restore -v4 -o restore.log -D images --inherit-fd fd[33]:test_ns --inherit-fd fd[34]:test_ns2 -d
|
||||
cat images/restore.log | grep -B 5 Error || echo ok
|
||||
if [[ "$NS" == "pid" ]]; then
|
||||
pid=$(pgrep -f "^sh _run.sh pidfile2 $RND2")
|
||||
fi
|
||||
new_ino=$(ls -iL /proc/$pid/ns/$NS | awk '{ print $1 }')
|
||||
new_ino2=$(ls -iL /proc/$pid2/ns/$NS | awk '{ print $1 }')
|
||||
[ "$ino" != "$new_ino" ] && {
|
||||
echo FAIL
|
||||
exit 1
|
||||
}
|
||||
[ "$ino2" != "$new_ino2" ] && {
|
||||
echo FAIL
|
||||
exit 1
|
||||
}
|
||||
echo PASS
|
||||
exit 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue