autotest: make running examples in autotest more reliable

This commit is contained in:
Peter Barker 2020-01-05 09:53:14 +11:00 committed by Peter Barker
parent a919e8fd45
commit e3cc580dbc
1 changed files with 23 additions and 8 deletions

View File

@ -1,6 +1,7 @@
from __future__ import print_function
import os
import signal
import subprocess
import time
@ -15,15 +16,29 @@ def run_example(filepath, valgrind=False, gdb=False):
cmd.append(filepath)
print("Running: (%s)" % str(cmd))
bob = subprocess.Popen(cmd, stdin=None, close_fds=True)
retcode = bob.poll()
time.sleep(10)
bob.kill()
bob.wait()
if bob.returncode is None:
raise ValueError("Unable to kill subprocess")
print("returncode: %u" % (bob.returncode))
if bob.returncode != -9:
raise ValueError("Process exitted before I got to kill it (exit code=%u)" % bob.returncode)
print("returncode2: %u" % (bob.returncode))
print("pre-kill retcode: %s" % str(retcode))
if retcode is not None:
raise ValueError("Process exited before I could kill it (%s)" % str(retcode))
bob.send_signal(signal.SIGTERM)
time.sleep(1)
retcode = bob.poll()
print("retcode: %s" % str(retcode))
if retcode is None:
# if we get this far then we're not going to get a gcda file
# out of this process for coverage analysis; it has to exit
# normally, and it hasn't responded to a TERM.
bob.kill()
retcode2 = bob.wait()
print("retcode2: %s" % str(retcode2))
elif retcode == -15:
print("process exited with -15, indicating it didn't catch the TERM signal and exit properly")
elif retcode != 0:
# note that process could exit with code 0 and we couldn't tell...
raise ValueError("Process exitted with non-zero exitcode %s" % str(retcode))
print("Ran: (%s)" % str(cmd))
def run_examples(debug=False, valgrind=False, gdb=False):
dirpath = util.reltopdir(os.path.join('build', 'linux', 'examples'))