Commit b95407e2 authored by Andrey Vagin's avatar Andrey Vagin Committed by Pavel Emelyanov

test: check, that parasite can rollback itself (v2)

This test uses systemtap to replace random parasite command on
invalide command. The parasite code received this command and should
rollback itself. CRIU didn't recived ack, should understand that
something wrong and exits. The systemtap inverts exit code of criu.

"zdtm.sh -d" is used for executing tests and testing that the state of
processes don't corrupted.

criu should be compiled without optimizations (make DEBUG=1)

v2: randomize a command, which will be replaced
Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 0a1b70bb
......@@ -3,12 +3,18 @@ EXP = '^ns/(?!.*(tty|pty))'
.FORCE:
all: .FORCE
$(MAKE) zdtm
zdtm: .FORCE
$(MAKE) zdtm_ns
for t in $(shell echo "$(TST)" | tr ' ' '\n' | grep -Pv $(EXP)); do \
$(MAKE) $$t || break; \
done
fault-injection: .FORCE
$(MAKE) -C fault-injection
zdtm_ns: $(shell echo "$(TST)" | tr ' ' '\n' | grep -P $(EXP))
$(TST):
./zdtm.sh $(@) &> $(subst /,_,$@).log
all:
stap -g -d ../../criu parasite.stp $$RANDOM -c 'bash -x ../zdtm.sh -d -x socket-tcp'
global i, n, fini_cmd = -1, last_cmd
probe process("../../criu").begin
{
i = 0;
/* randint() returns numbers multiple of 5 */
n = randint(20 * 5) / 5
printf("The %d command will be replaced on -1\n", n);
}
probe process("../../criu").function("__parasite_execute_daemon")
{
printf("%s\n", $$parms);
last_cmd = $cmd;
if (++i > n) {
printf("Send invalid command to parasite\n");
$cmd = -1;
}
}
probe process("../../criu").function("__parasite_execute_daemon").return
{
printf("%d\n", $return);
}
probe process("../../criu").function("main").return
{
printf("CRIU exits with code %d\n", $return);
if ( i > n) {
if ($return)
$return = 0;
else {
printf("CRIU exited with zero code\n");
if (fini_cmd < 0 || fini_cmd == last_cmd) {
printf("%d looks like FINI command\n", n);
fini_cmd = last_cmd
} else {
printf("This is the second FINI command %d (%d)",
n, fini_cmd);
$return = 1;
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment