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

Ruslan Kuprieiev kupruser at gmail.com
Tue Oct 1 04:33:08 PDT 2013


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, because 
it starts criu service.
Did you mean, I should test ability for non-owner to restore task?

>
>> +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