autotest: added --timeout option

try to ensure we end up with a timeout display on the website
This commit is contained in:
Andrew Tridgell 2012-06-15 16:52:55 +10:00
parent 5525180814
commit f3a45bfb41
1 changed files with 18 additions and 3 deletions

View File

@ -3,7 +3,7 @@
# Andrew Tridgell, October 2011 # Andrew Tridgell, October 2011
import pexpect, os, sys, shutil, atexit import pexpect, os, sys, shutil, atexit
import optparse, fnmatch, time, glob, traceback import optparse, fnmatch, time, glob, traceback, signal
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), 'pysim')) sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), 'pysim'))
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', '..', '..', 'mavlink', 'pymavlink')) sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', '..', '..', 'mavlink', 'pymavlink'))
@ -96,6 +96,16 @@ def test_prerequesites():
util.mkdir_p(util.reltopdir('../buildlogs')) util.mkdir_p(util.reltopdir('../buildlogs'))
return True return True
def alarm_handler(signum, frame):
'''handle test timeout'''
global results, opts
try:
results.add('TIMEOUT', '<span class="failed-text">FAILED</span>', opts.timeout)
write_webresults(results)
os.killpg(0, signal.SIGKILL)
except Exception:
pass
sys.exit(1)
############## main program ############# ############## main program #############
parser = optparse.OptionParser("autotest") parser = optparse.OptionParser("autotest")
@ -103,6 +113,7 @@ parser.add_option("--skip", type='string', default='', help='list of steps to sk
parser.add_option("--list", action='store_true', default=False, help='list the available steps') parser.add_option("--list", action='store_true', default=False, help='list the available steps')
parser.add_option("--viewerip", default=None, help='IP address to send MAVLink and fg packets to') parser.add_option("--viewerip", default=None, help='IP address to send MAVLink and fg packets to')
parser.add_option("--experimental", default=False, action='store_true', help='enable experimental tests') parser.add_option("--experimental", default=False, action='store_true', help='enable experimental tests')
parser.add_option("--timeout", default=2400, type='int', help='maximum runtime in seconds')
opts, args = parser.parse_args() opts, args = parser.parse_args()
@ -128,6 +139,10 @@ steps = [
skipsteps = opts.skip.split(',') skipsteps = opts.skip.split(',')
# ensure we catch timeouts
signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(opts.timeout)
def skip_step(step): def skip_step(step):
'''see if a step should be skipped''' '''see if a step should be skipped'''
for skip in skipsteps: for skip in skipsteps:
@ -235,11 +250,11 @@ def write_webresults(results):
shutil.copy(f, util.reltopdir('../buildlogs/%s' % os.path.basename(f))) shutil.copy(f, util.reltopdir('../buildlogs/%s' % os.path.basename(f)))
results = TestResults()
def run_tests(steps): def run_tests(steps):
'''run a list of steps''' '''run a list of steps'''
global results
results = TestResults()
passed = True passed = True
failed = [] failed = []