blob: e41dae32ab833c192847719ca0b527ffe024d390 [file] [log] [blame]
"""
Base class for builtin-in tests.
"""
import sys
import os
from lnt.testing.util.misc import timestamp
import lnt.util.ServerUtil as ServerUtil
import lnt.util.ImportData as ImportData
class OptsContainer(object):
pass
class BuiltinTest(object):
def __init__(self):
self.opts = OptsContainer()
pass
def _fatal(self, msg):
"""This simulate the output provided by OptionParser.error"""
prog_name = os.path.basename(sys.argv[0])
sys.stderr.write("%s error: %s\n" % (prog_name, msg))
sys.exit(2)
def describe(self):
""""describe() -> str
Return a short description of the test.
"""
def run_test(self, opts):
"""run_test(name, args) -> lnt.testing.Report
Execute the test (accessed via name, for use in the usage message) with
the given command line args.
"""
raise RuntimeError("Abstract Method.")
def log(self, message, ts=None):
if not ts:
ts = timestamp()
print('%s: %s' % (ts, message), file=sys.stderr)
@staticmethod
def print_report(report, output):
"""Print the report object to the output path."""
if output == '-':
output_stream = sys.stdout
else:
output_stream = open(output, 'w')
print(report.render(), file=output_stream)
if output_stream is not sys.stdout:
output_stream.close()
def submit(self, report_path, config, ts_name=None):
"""Submit the results file to the server. If no server
was specified, use a local mock server.
report_path is the location of the json report file. config
holds options for submission url, and verbosity.
Returns the report from the server.
"""
assert os.path.exists(report_path), "Failed report should have" \
" never gotten here!"
assert ts_name is not None
server_report = None
if config.submit_url is not None:
self.log("submitting result to %r" % (config.submit_url,))
server_report = ServerUtil.submitFile(
config.submit_url, report_path, config.verbose,
select_machine=config.select_machine, merge_run=config.merge)
else:
server_report = ImportData.no_submit()
if server_report:
ImportData.print_report_result(server_report, sys.stdout,
sys.stderr, config.verbose)
return server_report
@staticmethod
def show_results_url(server_results):
"""Print the result URL"""
result_url = server_results.get('result_url', None)
if result_url is not None:
print("Results available at:", server_results['result_url'])