[CRIU] [PATCH 5/5] test: libcriu
Ruslan Kuprieiev
kupruser at gmail.com
Tue Dec 10 10:11:44 PST 2013
This test is similiar to test/rpc, and can also be used as an
example of using libcriu.
Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
---
Makefile | 1 +
test/libcriu/Makefile | 10 ++++++++
test/libcriu/loop.sh | 4 ++++
test/libcriu/run.sh | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++
test/libcriu/test.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 138 insertions(+)
create mode 100644 test/libcriu/Makefile
create mode 100755 test/libcriu/loop.sh
create mode 100755 test/libcriu/run.sh
create mode 100644 test/libcriu/test.c
diff --git a/Makefile b/Makefile
index cd312e7..347c4f0 100644
--- a/Makefile
+++ b/Makefile
@@ -202,6 +202,7 @@ clean: clean-built
$(Q) $(RM) -r ./test/lib64/
$(Q) $(RM) protobuf-desc-gen.h
$(Q) $(MAKE) -C test/zdtm cleandep clean cleanout
+ $(Q) $(MAKE) -C test/libcriu clean
distclean: clean
$(E) " DISTCLEAN"
diff --git a/test/libcriu/Makefile b/test/libcriu/Makefile
new file mode 100644
index 0000000..e6f5da2
--- /dev/null
+++ b/test/libcriu/Makefile
@@ -0,0 +1,10 @@
+all: build/test
+
+build/test: build/test.o
+ gcc $^ -L ../../lib -lcriu -o $@
+
+build/test.o: test.c
+ gcc -c $^ -I ../../lib -o $@
+
+clean:
+ rm -rf build
diff --git a/test/libcriu/loop.sh b/test/libcriu/loop.sh
new file mode 100755
index 0000000..0ab34ce
--- /dev/null
+++ b/test/libcriu/loop.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+while :; do
+ sleep 1
+done
diff --git a/test/libcriu/run.sh b/test/libcriu/run.sh
new file mode 100755
index 0000000..04a8c10
--- /dev/null
+++ b/test/libcriu/run.sh
@@ -0,0 +1,63 @@
+#!/bin/bash
+
+source ../env.sh || exit 1
+
+export PROTODIR=`readlink -f "${PWD}/../../protobuf"`
+
+echo $PROTODIR
+
+LOOP_PID=0
+
+function title_print {
+ echo -e "\n**************************************************"
+ echo -e "\t\t"$1
+ echo -e "**************************************************\n"
+
+}
+
+function _exit {
+ if [ $1 -ne 0 ]; then
+ echo "FAIL"
+ fi
+
+ if [ $LOOP_PID -ne 0 ]; then
+ kill -SIGTERM $LOOP_PID
+ fi
+
+ title_print "Shutdown service server"
+ kill -SIGTERM `cat pidfile`
+
+ exit $1
+}
+
+function check_and_term {
+ title_print "Check and term $1"
+ ps -C $1
+ pkill $1
+}
+
+title_print "Build programs"
+make clean
+mkdir build
+cd build
+mkdir imgs_loop
+mkdir imgs_test
+make -C ../ || { echo "FAIL"; exit 1; }
+
+title_print "Start service server"
+${CRIU} service -v4 -o service.log --address criu_service.socket -d --pidfile `pwd`/pidfile || { echo "FAIL"; exit 1; }
+
+title_print "Run loop.sh"
+setsid ../loop.sh < /dev/null &> loop.log &
+LOOP_PID=${!}
+echo "pid ${LOOP_PID}"
+
+title_print "Run test.c"
+LD_LIBRARY_PATH=../../../lib
+export LD_LIBRARY_PATH
+./test ${LOOP_PID} || _exit $?
+
+title_print "Restore test.c"
+${CRIU} restore -v4 -o restore-test.log -D imgs_test --shell-job || _exit $?
+
+_exit 0
diff --git a/test/libcriu/test.c b/test/libcriu/test.c
new file mode 100644
index 0000000..b41e5c5
--- /dev/null
+++ b/test/libcriu/test.c
@@ -0,0 +1,60 @@
+#include "criu.h"
+#include <fcntl.h>
+#include <stdio.h>
+
+int main(int argc, char *argv[])
+{
+ int ret, fd;
+
+ criu_set_service_address("criu_service.socket");
+
+ puts("--- Check ---");
+ ret = criu_check();
+ if (ret < 0)
+ return -1;
+ else
+ puts("Success");
+
+ puts("--- Dump loop ---");
+ criu_init_opts();
+ criu_set_pid(atoi(argv[1]));
+ criu_set_log_level(4);
+ fd = open("imgs_loop", O_DIRECTORY);
+ criu_set_images_dir_fd(fd);
+
+ ret = criu_dump();
+ if (ret < 0)
+ return -1;
+ else if (ret == 0)
+ puts("Success");
+
+ puts("--- Restore loop ---");
+ criu_init_opts();
+ criu_set_log_level(4);
+ criu_set_images_dir_fd(fd);
+
+ ret = criu_restore();
+ if (ret < 0)
+ return -1;
+ else if (ret > 0) {
+ puts("Success");
+ printf("pid %d\n", ret);
+ }
+
+ puts("--- Dump myself ---");
+ criu_init_opts();
+ criu_set_leave_running(true);
+ criu_set_shell_job(true);
+ criu_set_images_dir_fd(open("imgs_test", O_DIRECTORY));
+
+ ret = criu_dump();
+ if (ret < 0)
+ return -1;
+ else {
+ puts("Success");
+ if (ret == 1)
+ puts("Restored");
+ }
+
+ return 0;
+}
--
1.8.3.2
More information about the CRIU
mailing list