mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-30 13:58:34 +00:00
test/other: add a test to check the --shell-job option
This test creates a pty pair, creates a test process and sets a slave pty as control terminal for it. Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
This commit is contained in:
@@ -107,6 +107,7 @@ bash ./test/jenkins/criu-inhfd.sh
|
||||
make -C test/others/mnt-ext-dev/ run
|
||||
#make -C test/others/exec/ run
|
||||
make -C test/others/make/ run CC="$CC"
|
||||
make -C test/others/shell-job/ run
|
||||
|
||||
./test/zdtm.py run -t zdtm/static/env00 --sibling
|
||||
|
||||
@@ -127,6 +128,8 @@ ip net add test
|
||||
|
||||
./test/zdtm.py run --empty-ns -T zdtm/static/socket-tcp*-local --iter 2
|
||||
|
||||
make -C test/others/shell-job
|
||||
|
||||
pip install flake8
|
||||
make lint
|
||||
|
||||
|
@@ -11,7 +11,7 @@ all:
|
||||
$(MAKE) zdtm-freezer
|
||||
.PHONY: all
|
||||
|
||||
TESTS = unix-callback mem-snap rpc libcriu mounts/ext security pipes crit socketpairs overlayfs mnt-ext-dev
|
||||
TESTS = unix-callback mem-snap rpc libcriu mounts/ext security pipes crit socketpairs overlayfs mnt-ext-dev shell-job
|
||||
|
||||
other:
|
||||
for t in $(TESTS); do \
|
||||
|
2
test/others/shell-job/Makefile
Normal file
2
test/others/shell-job/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
run:
|
||||
../../zdtm_ct run.py
|
65
test/others/shell-job/run.py
Executable file
65
test/others/shell-job/run.py
Executable file
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env python2
|
||||
import os, pty, sys, subprocess
|
||||
import termios, fcntl, time, signal
|
||||
|
||||
cr_bin = "../../../criu/criu"
|
||||
|
||||
os.chdir(os.getcwd())
|
||||
|
||||
def create_pty():
|
||||
(fd1, fd2) = pty.openpty()
|
||||
return (os.fdopen(fd1, "w+"), os.fdopen(fd2, "w+"))
|
||||
|
||||
if not os.access("work", os.X_OK):
|
||||
os.mkdir("work", 0755)
|
||||
|
||||
open("running", "w").close()
|
||||
m,s = create_pty()
|
||||
p = os.pipe()
|
||||
pr = os.fdopen(p[0], "r")
|
||||
pw = os.fdopen(p[1], "w")
|
||||
|
||||
pid = os.fork()
|
||||
if pid == 0:
|
||||
m.close()
|
||||
os.setsid()
|
||||
os.dup2(s.fileno(), 0)
|
||||
os.dup2(s.fileno(), 1)
|
||||
os.dup2(s.fileno(), 2)
|
||||
fcntl.ioctl(s.fileno(), termios.TIOCSCTTY, 1)
|
||||
pr.close()
|
||||
pw.close()
|
||||
while True:
|
||||
if not os.access("running", os.F_OK):
|
||||
sys.exit(0)
|
||||
time.sleep(1)
|
||||
sys.exit(1)
|
||||
|
||||
pw.close()
|
||||
pr.read(1)
|
||||
|
||||
cmd = [cr_bin, "dump", "-j", "-t", str(pid), "-D", "work", "-v"]
|
||||
print("Run: %s" % " ".join(cmd))
|
||||
ret = subprocess.Popen(cmd).wait()
|
||||
if ret != 0:
|
||||
sys.exit(1)
|
||||
os.wait()
|
||||
|
||||
os.unlink("running")
|
||||
m,s = create_pty()
|
||||
cpid = os.fork()
|
||||
if cpid == 0:
|
||||
os.setsid()
|
||||
fcntl.ioctl(m.fileno(), termios.TIOCSCTTY, 1)
|
||||
cmd = [cr_bin, "restore", "-j", "-D", "work", "-v"]
|
||||
print("Run: %s" % " ".join(cmd))
|
||||
ret = subprocess.Popen([cr_bin, "restore", "-j", "-D", "work", "-v"]).wait()
|
||||
if ret != 0:
|
||||
sys.exit(1)
|
||||
sys.exit(0)
|
||||
|
||||
pid, status = os.wait()
|
||||
if status != 0:
|
||||
print("A child process exited with %d" % status)
|
||||
sys.exit(1)
|
||||
|
Reference in New Issue
Block a user