Commit 7af751b5 authored by Andrei Vagin's avatar Andrei Vagin

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: 's avatarAndrei Vagin <avagin@virtuozzo.com>
parent fbd8dd88
......@@ -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 \
......
run:
../../zdtm_ct run.py
#!/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)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment