aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJouni Malinen <j@w1.fi>2014-01-04 14:36:10 (GMT)
committerJouni Malinen <j@w1.fi>2014-01-07 08:45:10 (GMT)
commit1d646f5ee1987adda5de4026ae0ba41bd20c3c42 (patch)
tree4e249296bb06635f6ec8d939891b43f64833db09
parent26b846672c8add2922c8e52bd799c0ebaadc9e45 (diff)
downloadhostap-1d646f5ee1987adda5de4026ae0ba41bd20c3c42.zip
hostap-1d646f5ee1987adda5de4026ae0ba41bd20c3c42.tar.gz
hostap-1d646f5ee1987adda5de4026ae0ba41bd20c3c42.tar.bz2
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 <j@w1.fi>
-rw-r--r--tests/hwsim/README3
-rwxr-xr-xtests/hwsim/run-tests.py34
2 files changed, 33 insertions, 4 deletions
diff --git a/tests/hwsim/README b/tests/hwsim/README
index e073c1e..3b2d7ce 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 faa3801..5251999 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 <j@w1.fi>
+# Copyright (c) 2013-2014, Jouni Malinen <j@w1.fi>
#
# 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: