summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--selftest/target/samba.py29
-rw-r--r--selftest/tests/test_samba.py4
2 files changed, 31 insertions, 2 deletions
diff --git a/selftest/target/samba.py b/selftest/target/samba.py
index 3d63fe58db..1ea156c003 100644
--- a/selftest/target/samba.py
+++ b/selftest/target/samba.py
@@ -5,9 +5,7 @@
import os
import sys
-import warnings
-from selftest.target import Target
def bindir_path(binary_mapping, bindir, path):
"""Find the executable to use.
@@ -94,3 +92,30 @@ def write_krb5_conf(f, realm, dnsname, domain, kdc_ipv4, tlsdir=None,
pkinit_anchors = FILE:%(tlsdir)s/ca.pem
""" % {"tlsdir": tlsdir})
+
+
+def cleanup_child(pid, name, outf=None):
+ """Cleanup a child process.
+
+ :param pid: Parent pid process to be passed to waitpid()
+ :param name: Name to use when referring to process
+ :param outf: File-like object to write to (defaults to stderr)
+ :return: Child pid
+ """
+ if outf is None:
+ outf = sys.stderr
+ (childpid, status) = os.waitpid(pid, os.WNOHANG)
+ if childpid == 0:
+ pass
+ elif childpid < 0:
+ outf.write("%s child process %d isn't here any more.\n" % (name, pid))
+ return childpid
+ elif status & 127:
+ if status & 128:
+ core_status = 'with'
+ else:
+ core_status = 'without'
+ outf.write("%s child process %d, died with signal %d, %s coredump.\n" % (name, childpid, (status & 127), core_status))
+ else:
+ outf.write("%s child process %d exited with value %d.\n" % (name, childpid, status >> 8))
+ return childpid
diff --git a/selftest/tests/test_samba.py b/selftest/tests/test_samba.py
index 6fe1efefaf..f06d846deb 100644
--- a/selftest/tests/test_samba.py
+++ b/selftest/tests/test_samba.py
@@ -19,12 +19,16 @@
"""Tests for selftest.target.samba."""
+import os
+import sys
+
from cStringIO import StringIO
from selftest.tests import TestCase
from selftest.target.samba import (
bindir_path,
+ cleanup_child,
mk_realms_stanza,
write_krb5_conf,
)