[CRIU] [PATCH 3/3] Process Migration using Sockets (Rodrigo Bruno)
rbruno at www.gsd.inesc-id.pt
rbruno at www.gsd.inesc-id.pt
Wed Jan 11 18:01:53 PST 2017
test/proxy-cache/Makefile | 29 ++++++++++++++
test/proxy-cache/loop.sh | 8 ++++
test/proxy-cache/run.sh | 100
++++++++++++++++++++++++++++++++++++++++++++++
test/zdtm.py | 30 +++++++++++++-
4 files changed, 166 insertions(+), 1 deletion(-)
Add testcases for image-proxy/image-cache.
Signed-off-by: Rodrigo Bruno <rbruno at gsd.inesc-id.pt>
Signed-off-by: Katerina Koukiou <k.koukiou at gmail.com>
diff --git a/test/proxy-cache/Makefile b/test/proxy-cache/Makefile
new file mode 100644
index 0000000..674c493
--- /dev/null
+++ b/test/proxy-cache/Makefile
@@ -0,0 +1,29 @@
+DIR := $(shell pwd)/data
+CRIU := $(DIR)/criu
+
+LOOP := $(DIR)/loop.sh
+PIDFILE := $(DIR)/loop.pid
+
+DUMPDIR := $(DIR)/dump
+PREDIR := $(DIR)/predump
+LOG := $(DIR)/log
+
+PROXY_CACHE_TCP_PORT := 9997
+LOCAL_CACHE_PATH := $(DIR)/image-cache.sock
+LOCAL_PROXY_PATH := $(DIR)/image-proxy.sock
+
+export DIR LOOP PIDFILE DUMPDIR PREDIR CRIU LOG PROXY_CACHE_TCP_PORT
LOCAL_CACHE_PATH LOCAL_PROXY_PATH
+
+run: testdir
+ ./run.sh
+
+testdir: ../../criu
+ mkdir -p $(DIR)
+ mkdir -p $(DUMPDIR)
+ mkdir -p $(PREDIR)
+ mkdir -p $(LOG)
+ cp ../../criu/criu $(CRIU)
+ cp loop.sh $(LOOP)
+
+clean:
+ rm -rf $(DIR)
diff --git a/test/proxy-cache/loop.sh b/test/proxy-cache/loop.sh
new file mode 100755
index 0000000..a5fcb08
--- /dev/null
+++ b/test/proxy-cache/loop.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+echo $$ > $1.int
+mv $1.int $1
+
+while :; do
+ sleep 1
+done
diff --git a/test/proxy-cache/run.sh b/test/proxy-cache/run.sh
new file mode 100755
index 0000000..e403d5f
--- /dev/null
+++ b/test/proxy-cache/run.sh
@@ -0,0 +1,100 @@
+#!/bin/bash
+
+set -x
+
+PID=
+
+function run {
+ echo "== Run ${LOOP}"
+ echo ${PIDFILE}
+ rm -f ${PIDFILE}
+ setsid ${LOOP} ${PIDFILE} < /dev/null &> /dev/null &
+ for i in `seq 100`; do
+ test -f ${PIDFILE} && break
+ sleep 1
+ done
+ PID=`cat ${PIDFILE}`
+ echo ${PID}
+}
+
+function prepare {
+ ${CRIU} image-cache -d -vvvv -o ${LOG}/image-cache.log \
+ --port ${PROXY_CACHE_TCP_PORT} --images-dir $1
+ sleep 1
+
+ ${CRIU} image-proxy -d -vvvv -o ${LOG}/image-proxy.log \
+ --address localhost \
+ --port ${PROXY_CACHE_TCP_PORT} --images-dir $1
+ sleep 1
+}
+
+function predump {
+ echo "== Predump ${PID}"
+ ${CRIU} pre-dump -vvvv --tree ${PID} --images-dir ${PREDIR} \
+ -o ${LOG}/predump.log \
+ --remote
+ return $?
+}
+
+function dump {
+ echo "== Dump ${PID}"
+ ${CRIU} dump -vvvv --tree ${PID} --images-dir ${DUMPDIR} \
+ -o ${LOG}/dump.log --prev-images-dir ${PREDIR} --track-mem \
+ --remote
+ return $?
+}
+
+function restore {
+ echo "== Restore ${DUMPDIR}"
+ ${CRIU} restore -vvvv --images-dir ${DUMPDIR} --restore-detached \
+ -o ${LOG}/restore.log \
+ --remote
+ return $?
+}
+
+function result {
+ local BGRED='\033[41m'
+ local BGGREEN='\033[42m'
+ local NORMAL=$(tput sgr0)
+
+ if [ $1 -ne 0 ]; then
+ echo -e "${BGRED}FAIL${NORMAL}"
+ exit 1
+ else
+ echo -e "${BGGREEN}PASS${NORMAL}"
+ fi
+}
+
+function test_dump_restore {
+ echo "==== Check if dump-restore works with proxy-cache"
+
+ run
+ test -d ${DUMPDIR} && rm -rf ${DUMPDIR}
+ mkdir -p ${DUMPDIR}
+ prepare ${DUMPDIR}
+ dump; result $(($?))
+ restore ; result $(($?))
+
+ kill -SIGKILL ${PID}
+}
+
+function test_predump_dump_restore {
+ echo "==== Check if predump-dump-restore works with proxy-cache"
+ run
+ test -d ${PREDIR} && rm -rf ${PREDIR}
+ mkdir -p ${PREDIR}
+ prepare ${PREDIR}
+ predump; result $(($?))
+ test -d ${DUMPDIR} && rm -rf ${DUMPDIR}
+ mkdir -p ${DUMPDIR}
+ ln -s ${PREDIR}"/img-proxy.sock" ${DUMPDIR}"/img-proxy.sock"
+ ln -s ${PREDIR}"/img-cache.sock" ${DUMPDIR}"/img-cache.sock"
+ dump; result $(($?))
+ restore ; result $(($?))
+
+ kill -SIGKILL ${PID}
+}
+
+test_dump_restore
+sleep 1
+test_predump_dump_restore
diff --git a/test/zdtm.py b/test/zdtm.py
index 7cd9dc4..8d389a3 100755
--- a/test/zdtm.py
+++ b/test/zdtm.py
@@ -777,6 +777,7 @@ class criu:
self.__mdedup = (opts['noauto_dedup'] and True or False)
self.__user = (opts['user'] and True or False)
self.__leave_stopped = (opts['stop'] and True or False)
+ self.__remote = (opts['remote'] and True or False)
self.__criu = (opts['rpc'] and criu_rpc or criu_cli)
def logs(self):
@@ -884,6 +885,29 @@ class criu:
a_opts += self.__test.getdopts()
+ if self.__remote:
+ from subprocess import check_output
+
+ logdir = os.getcwd() + "/" + self.__dump_path + "/" + str(self.__iter)
+ print "Adding image cache"
+
+ cache_opts = [criu_bin, "image-cache", "--port", "12345", "-v4", "-o",
+ logdir + "/image-cache.log", "-D", logdir]
+
+ cpid = subprocess.Popen(cache_opts).pid
+ time.sleep(1)
+
+ print "Adding image proxy"
+
+ proxy_opts = [criu_bin, "image-proxy", "--port", "12345", "--address",
+ "localhost", "-v4", "-o", logdir + "/image-proxy.log",
+ "-D", logdir]
+
+ ppid = subprocess.Popen(proxy_opts).pid
+ time.sleep(1)
+
+ a_opts += ["--remote"]
+
if self.__dedup:
a_opts += ["--auto-dedup"]
@@ -923,6 +947,9 @@ class criu:
r_opts += ['--empty-ns', 'net']
r_opts += ['--action-script', os.getcwd() + '/empty-netns-prep.sh']
+ if self.__remote:
+ r_opts += ["--remote"]
+
self.__prev_dump_iter = None
criu_dir = os.path.dirname(os.getcwd())
if os.getenv("GCOV"):
@@ -1362,7 +1389,7 @@ class launcher:
nd = ('nocr', 'norst', 'pre', 'iters', 'page_server', 'sibling',
'stop', 'empty_ns',
'fault', 'keep_img', 'report', 'snaps', 'sat', 'script', 'rpc',
- 'join_ns', 'dedup', 'sbs', 'freezecg', 'user', 'dry_run',
'noauto_dedup')
+ 'join_ns', 'dedup', 'sbs', 'freezecg', 'user', 'dry_run',
'noauto_dedup', 'remote')
arg = repr((name, desc, flavor, {d: self.__opts[d] for d in nd}))
if self.__use_log:
@@ -1834,6 +1861,7 @@ rp.add_argument("--user", help = "Run CRIU as
regular user", action = 'store_tru
rp.add_argument("--rpc", help = "Run CRIU via RPC rather than CLI",
action = 'store_true')
rp.add_argument("--page-server", help = "Use page server dump", action =
'store_true')
+rp.add_argument("--remote", help = "Use remote option for diskless C/R",
action = 'store_true')
rp.add_argument("-p", "--parallel", help = "Run test in parallel")
rp.add_argument("--dry-run", help="Don't run tests, just pretend to",
action='store_true')
rp.add_argument("--script", help="Add script to get notified by criu")
More information about the CRIU
mailing list