From 1d646f5ee1987adda5de4026ae0ba41bd20c3c42 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sat, 4 Jan 2014 16:36:10 +0200 Subject: [PATCH] tests: Write debug logs into the database for failed test cases This makes it easier to build a web page for analyzing failures without having to fetch the log files themselves from the test server. Signed-hostap: Jouni Malinen --- tests/hwsim/README | 3 +++ tests/hwsim/run-tests.py | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/tests/hwsim/README b/tests/hwsim/README index e073c1e9f..3b2d7ce19 100644 --- a/tests/hwsim/README +++ b/tests/hwsim/README @@ -181,4 +181,7 @@ CREATE TABLE results (test,result,run,time,duration,build,commitid); CREATE INDEX results_idx ON results (test); CREATE INDEX results_idx2 ON results (run); CREATE TABLE tests (test,description); +CREATE TABLE logs (test,run,type,contents); +CREATE INDEX logs_idx ON logs (test); +CREATE INDEX logs_idx2 ON logs (run); EOF diff --git a/tests/hwsim/run-tests.py b/tests/hwsim/run-tests.py index faa380141..525199911 100755 --- a/tests/hwsim/run-tests.py +++ b/tests/hwsim/run-tests.py @@ -1,7 +1,7 @@ #!/usr/bin/python # # AP tests -# Copyright (c) 2013, Jouni Malinen +# Copyright (c) 2013-2014, Jouni Malinen # # This software may be distributed under the terms of the BSD license. # See README for more details. @@ -52,7 +52,24 @@ def reset_devs(dev, apdev): ok = False return ok -def report(conn, prefill, build, commit, run, test, result, duration): +def add_log_file(conn, test, run, type, path): + if not os.path.exists(path): + return + contents = None + with open(path, 'r') as f: + contents = f.read() + if contents is None: + return + sql = "INSERT INTO logs(test,run,type,contents) VALUES(?, ?, ?, ?)" + params = (test, run, type, contents) + try: + conn.execute(sql, params) + conn.commit() + except Exception, e: + print "sqlite: " + str(e) + print "sql: %r" % (params, ) + +def report(conn, prefill, build, commit, run, test, result, duration, logdir): if conn: if not build: build = '' @@ -69,6 +86,12 @@ def report(conn, prefill, build, commit, run, test, result, duration): print "sqlite: " + str(e) print "sql: %r" % (params, ) + if result == "FAIL": + for log in [ "log", "log0", "log1", "log2", "log3", "log5", + "hostapd", "dmesg", "hwsim0", "hwsim0.pcapng" ]: + add_log_file(conn, test, run, log, + logdir + "/" + test + "." + log) + class DataCollector(object): def __init__(self, logdir, testname, tracing, dmesg): self._logdir = logdir @@ -197,6 +220,7 @@ def main(): conn = sqlite3.connect(args.database) conn.execute('CREATE TABLE IF NOT EXISTS results (test,result,run,time,duration,build,commitid)') conn.execute('CREATE TABLE IF NOT EXISTS tests (test,description)') + conn.execute('CREATE TABLE IF NOT EXISTS logs (test,run,type,contents)') else: conn = None @@ -266,7 +290,8 @@ def main(): if conn and args.prefill: for t in tests_to_run: name = t.__name__.replace('test_', '', 1) - report(conn, False, args.build, args.commit, run, name, 'NOTRUN', 0) + report(conn, False, args.build, args.commit, run, name, 'NOTRUN', 0, + args.logdir) if args.shuffle_tests: from random import shuffle @@ -368,7 +393,8 @@ def main(): else: failed.append(name) - report(conn, args.prefill, args.build, args.commit, run, name, result, diff.total_seconds()) + report(conn, args.prefill, args.build, args.commit, run, name, result, + diff.total_seconds(), args.logdir) result = "{} {} {} {}".format(result, name, diff.total_seconds(), end) logger.info(result) if args.loglevel == logging.WARNING: