[CRIU] [PATCH 5/5] test: rpc: add test for restore request

Andrew Vagin avagin at parallels.com
Tue Oct 1 00:40:27 PDT 2013


On Tue, Oct 01, 2013 at 03:33:08PM +0400, Ruslan Kuprieiev wrote:
> On 30.09.2013 18:17, Andrew Vagin wrote:
> >On Mon, Sep 30, 2013 at 03:06:43PM +0400, Ruslan Kuprieiev wrote:
> >>Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
> >>---
> >>diff --git a/test/rpc/loop.sh b/test/rpc/loop.sh
> >>new file mode 100755
> >>index 0000000..0ab34ce
> >>--- /dev/null
> >>+++ b/test/rpc/loop.sh
> >>@@ -0,0 +1,4 @@
> >>+#!/bin/bash
> >>+while :; do
> >>+	sleep 1
> >>+done
> >>diff --git a/test/rpc/restore-loop.py b/test/rpc/restore-loop.py
> >>new file mode 100755
> >>index 0000000..bf91cb5
> >>--- /dev/null
> >>+++ b/test/rpc/restore-loop.py
> >>@@ -0,0 +1,37 @@
> >>+#!/usr/bin/python
> >>+
> >>+import socket, os, imp, sys
> >>+
> >>+p = os.getcwd()
> >>+sys.path.append(p)
> >>+import rpc_pb2 as rpc
> >>+
> >>+# Connect to service socket
> >>+s = socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET)
> >>+s.connect('criu_service.socket')
> >>+
> >>+# Create criu msg, set it's type to dump request
> >>+# and set dump options. Checkout more options in protobuf/rpc.proto
> >>+req			= rpc.criu_req()
> >>+req.type		= rpc.RESTORE
> >>+
> >>+req.opts.images_dir_fd	= os.open('imgs_loop', os.O_DIRECTORY)
> >>+
> >>+# Send request
> >>+s.send(req.SerializeToString())
> >>+
> >>+# Recv response
> >>+resp		= rpc.criu_resp()
> >>+MAX_MSG_SIZE	= 1024
> >>+resp.ParseFromString(s.recv(MAX_MSG_SIZE))
> >>+
> >>+if resp.type != rpc.RESTORE:
> >>+	print 'Unexpected msg type'
> >>+	sys.exit(-1)
> >>+else:
> >>+	if resp.success:
> >>+		print 'Restore success'
> >>+	else:
> >>+		print 'Restore fail'
> >>+		sys.exit(-1)
> >>+	print "PID of the restored program is %d\n" %(resp.restore.pid)
> >>diff --git a/test/rpc/run.sh b/test/rpc/run.sh
> >>index 4d8260c..1055cff 100755
> >>--- a/test/rpc/run.sh
> >>+++ b/test/rpc/run.sh
> >>@@ -24,6 +24,12 @@ function _exit {
> >>  	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
> >>@@ -45,4 +51,17 @@ ${CRIU} restore -v4 -o restore-c.log -D imgs_c --shell-job || _exit $?
> >>  title_print "Restore test-py"
> >>  ${CRIU} restore -v4 -o restore-py.log -D imgs_py --shell-job || _exit $?
> >>+title_print "Run loop.sh"
> >>+setsid ../loop.sh < /dev/null &> ololo &
> >Can we execute the test from another user?
> >
> >sudo -u '#32767' -g "#32767" setsid ../loop.sh
> For now we can't execute the whole test(run.sh) from non-root,

My command executes only ../loop.sh

> because it starts criu service.
> Did you mean, I should test ability for non-owner to restore task?

Yes.

> 
> >
> >>+P=${!}
> >>+echo "pid ${P}"
> >>+
> >>+title_print "Dump loop.sh"
> >>+mkdir imgs_loop
> >>+${CRIU} dump -v4 -o dump-loop.log -D imgs_loop -t ${P} || _exit $?
> >>+
> >>+title_print "Run restore-loop"
> >>+../restore-loop.py || _exit $?
> >>+kill -SIGTERM ${P}
> >>+
> >>  _exit 0
> 


More information about the CRIU mailing list