[Piglit] [PATCH 15/19] python: Allow additional backends
Dylan Baker
baker.dylan.c at gmail.com
Thu Aug 28 15:35:43 PDT 2014
This adds the boilerplate code required to make multiple backends
actually work, a backend option and a helper to facilitate getting the
requested backend.
Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
---
framework/programs/run.py | 23 ++++++++++++++---------
framework/results.py | 20 ++++++++++++++++++--
framework/tests/results_tests.py | 20 ++++++++++++++++++--
3 files changed, 50 insertions(+), 13 deletions(-)
diff --git a/framework/programs/run.py b/framework/programs/run.py
index 8493611..8b7045d 100644
--- a/framework/programs/run.py
+++ b/framework/programs/run.py
@@ -108,6 +108,10 @@ def _run_parser(input_):
metavar="<regex>",
help="Exclude matching tests "
"(can be used more than once)")
+ parser.add_argument('-b', '--backend',
+ default='json',
+ choices=framework.results.BACKENDS,
+ help='select a results backend to use')
conc_parser = parser.add_mutually_exclusive_group()
conc_parser.add_argument('-c', '--all-concurrent',
action="store_const",
@@ -219,9 +223,8 @@ def run(input_):
options['env'] = core.collect_system_info()
# Begin json.
- result_filepath = path.join(args.results_path, 'results.json')
- backend = framework.results.JSONWriter(
- result_filepath,
+ backend = framework.results.get_backend(args.backend)(
+ args.results_path,
options,
file_fsync=opts.sync)
@@ -239,7 +242,7 @@ def run(input_):
backend.finalize({'time_elapsed': results.time_elapsed})
print('Thank you for running Piglit!\n'
- 'Results have been written to ' + result_filepath)
+ 'Results have been written to ' + args.results_path)
def resume(input_):
@@ -270,10 +273,12 @@ def resume(input_):
opts.env['PIGLIT_PLATFORM'] = results.options['platform']
results.options['env'] = core.collect_system_info()
- results_path = path.join(args.results_path, 'results.json')
- backend = framework.results.JSONWriter(results_path,
- results.options,
- file_fsync=opts.sync)
+
+ # Resume only works with the JSON backend
+ backend = framework.results.get_backend('json')(
+ args.results_path,
+ results.options,
+ file_fsync=opts.sync)
for key, value in results.tests.iteritems():
backend.write_test(key, value)
@@ -290,4 +295,4 @@ def resume(input_):
backend.finalize()
print("Thank you for running Piglit!\n"
- "Results have ben wrriten to {0}".format(results_path))
+ "Results have ben wrriten to {0}".format(args.results_path))
diff --git a/framework/results.py b/framework/results.py
index c3aac9f..fcdd154 100644
--- a/framework/results.py
+++ b/framework/results.py
@@ -37,10 +37,14 @@ import framework.status as status
__all__ = [
'TestrunResult',
'TestResult',
- 'JSONWriter',
'load_results',
+ 'get_backend',
+ 'BACKENDS',
]
+# A list of available backends
+BACKENDS = ['json']
+
# The current version of the JSON results
CURRENT_JSON_VERSION = 1
@@ -178,7 +182,7 @@ class JSONWriter(Backend):
_LOCK = threading.RLock()
def __init__(self, f, metadata, file_fsync=False):
- self.file = open(f, 'w')
+ self.file = open(os.path.join(f, 'results.json'), 'w')
self.fsync = file_fsync
self.__indent_level = 0
self.__inhibit_next_indent = False
@@ -579,6 +583,18 @@ def update_results(results, filepath):
return results
+def get_backend(backend):
+ """ Returns a BackendInstance based on the string passed """
+ backends = {
+ 'json': JSONWriter,
+ }
+
+ # Be sure that we're exporting the same list of backends that we actually
+ # have available
+ assert backends.keys() == BACKENDS
+ return backends[backend]
+
+
def _update_zero_to_one(results):
""" Update version zero results to version 1 results
diff --git a/framework/tests/results_tests.py b/framework/tests/results_tests.py
index 12b6e80..9f364fa 100644
--- a/framework/tests/results_tests.py
+++ b/framework/tests/results_tests.py
@@ -68,8 +68,8 @@ def test_initialize_jsonwriter():
arguments
"""
- with utils.with_tempfile('') as tfile:
- func = results.JSONWriter(tfile, BACKEND_INITIAL_META)
+ with utils.tempdir() as tdir:
+ func = results.JSONWriter(tdir, BACKEND_INITIAL_META)
assert isinstance(func, results.JSONWriter)
@@ -165,3 +165,19 @@ def test_update_results_old():
res = results.update_results(base, f.name)
nt.assert_equal(res.results_version, results.CURRENT_JSON_VERSION)
+
+
+ at utils.nose_generator
+def test_get_backend():
+ """ Generate tests to get various backends """
+ # We use a hand generated list here to ensure that we are getting what we
+ # expect
+ backends = {
+ 'json': results.JSONWriter,
+ }
+
+ check = lambda n, i: nt.assert_is(results.get_backend(n), i)
+
+ for name, inst in backends.iteritems():
+ check.description = 'get_backend({0}) returns {0} backend'.format(name)
+ yield check, name, inst
--
2.1.0
More information about the Piglit
mailing list