[CRIU] [PATCH 8/8] test: libcriu
Andrew Vagin
avagin at parallels.com
Wed Dec 4 04:13:48 PST 2013
On Wed, Dec 04, 2013 at 05:53:39PM +0400, Ruslan Kuprieiev wrote:
> On 04.12.2013 14:24, Andrew Vagin wrote:
> >On Wed, Dec 04, 2013 at 02:57:31PM +0400, Ruslan Kuprieiev wrote:
> >>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 | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++
> >> 5 files changed, 160 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..830eec1
> >>--- /dev/null
> >>+++ b/test/libcriu/Makefile
> >>@@ -0,0 +1,10 @@
> >>+all: build/test
> >>+
> >>+build/test: build/test.o
> >>+ gcc $^ -lprotobuf -L ../../lib -lcriu -o $@
> >>+
> >>+build/test.o: test.c
> >>+ gcc -c $^ -I ../../lib -I ../../protobuf -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..e45abbc
> >>--- /dev/null
> >>+++ b/test/libcriu/test.c
> >>@@ -0,0 +1,82 @@
> >>+#include "criu.h"
> >>+#include <fcntl.h>
> >>+
> >>+static void criu_error(int ret)
> >>+{
> >>+ switch (ret) {
> >>+ case CRIU_ECONNECT:
> >>+ puts("CRIU_ECONNECT");
> >>+ break;
> >>+ case CRIU_EREQ:
> >>+ puts("CRIU_EREQ");
> >>+ break;
> >>+ case CRIU_ERESP:
> >>+ puts("CRIU_ERESP");
> >>+ break;
> >>+ case CRIU_ECHECK:
> >>+ puts("CRIU_ECONNECT");
> >>+ break;
> >>+
> >>+ default:
> >>+ puts("Unknown error");
> >>+ }
> >>+}
> >>+
> >>+int main(int argc, char *argv[])
> >>+{
> >>+ int ret;
> >>+ CriuOpts opts = CRIU_OPTS__INIT;
> >>+ CriuResp *resp = NULL;
> >protobuf guarantees compatibility only for packed objects
>
> Excuse me, could you please explain what do you mean?
If you add a new field in the CriuResp protobuf, you can't be sure, that
all old applications will continue work with a new CRIU binaries.
Old applications was compiled with old headers, but they will load
the new CRIU library.
>
> >>+
> >>+ criu_set_service_address("criu_service.socket");
> >>+
> >>+ puts("--- Check ---");
> >>+ ret = criu_check();
> >>+ if (ret < 0) {
> >>+ criu_error(ret);
> >>+ return -1;
> >>+ } else
> >>+ puts("Success");
> >>+
> >>+ puts("--- Dump loop ---");
> >>+ opts.has_pid = true;
> >>+ opts.pid = atoi(argv[1]);
> >>+ opts.has_log_level = true;
> >>+ opts.log_level = 4;
> >>+ opts.images_dir_fd = open("imgs_loop", O_DIRECTORY);
> >>+
> >>+ ret = criu_dump(&opts, &resp);
> >>+ if (ret < 0) {
> >>+ criu_error(ret);
> >>+ return -1;
> >>+ } else if (resp->success)
> >>+ puts("Success");
> >>+
> >>+ puts("--- Restore loop ---");
> >>+ ret = criu_restore(&opts, &resp);
> >>+ if (ret < 0) {
> >>+ criu_error(ret);
> >>+ return -1;
> >>+ } else if (resp->success)
> >>+ puts("Success");
> >>+
> >>+ puts("--- Dump myself ---");
> >>+ opts.has_pid = false; /* unset pid, so criu will dump requesting process */
> >>+ opts.has_leave_running = true;
> >>+ opts.leave_running = true;
> >>+ opts.has_shell_job = true;
> >>+ opts.shell_job = true;
> >>+ opts.images_dir_fd = open("imgs_test", O_DIRECTORY);
> >>+
> >>+ ret = criu_dump(&opts, &resp);
> >>+ if (ret < 0) {
> >>+ criu_error(ret);
> >>+ return -1;
> >>+ } else if (resp->success) {
> >>+ puts("Success");
> >>+ if (resp->dump->has_restored && resp->dump->restored)
> >>+ puts("Restored");
> >>+ }
> >>+
> >>+ return 0;
> >>+}
> >>--
> >>1.8.1.2
> >>
> >>_______________________________________________
> >>CRIU mailing list
> >>CRIU at openvz.org
> >>https://lists.openvz.org/mailman/listinfo/criu
>
More information about the CRIU
mailing list