diff --git a/test/Makefile b/test/Makefile index df46688f4..65b17ba5f 100644 --- a/test/Makefile +++ b/test/Makefile @@ -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 diff --git a/test/fault-injection/Makefile b/test/fault-injection/Makefile new file mode 100644 index 000000000..4a2627e47 --- /dev/null +++ b/test/fault-injection/Makefile @@ -0,0 +1,2 @@ +all: + stap -g -d ../../criu parasite.stp $$RANDOM -c 'bash -x ../zdtm.sh -d -x socket-tcp' diff --git a/test/fault-injection/parasite.stp b/test/fault-injection/parasite.stp new file mode 100644 index 000000000..b71d36409 --- /dev/null +++ b/test/fault-injection/parasite.stp @@ -0,0 +1,44 @@ +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; + } + } + } +}