summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2016-10-17 15:10:36 -0700
committerDylan Baker <dylan@pnwbakers.com>2016-11-10 10:51:02 -0800
commit0212a1f9d284b547013b955f1f25af994bb5aa70 (patch)
tree42c04570b847fa1ada73c6dbaa9ab0dd9899135e /framework
parent0d4eb8c6b7bb589bd36b8578979b836155e3bc45 (diff)
framework/profile: replace Testprofile.{dmesg,monitoring} with dict
This allows a significant amount of cleanup to happen. It allows removing attributes from the global OPTIONS, removing tests that no longer apply, and because of the split run method it allows more values to simply be passed. Signed-off-by: Dylan Baker <dylanx.c.baker@intel.com>
Diffstat (limited to 'framework')
-rw-r--r--framework/options.py4
-rw-r--r--framework/profile.py48
-rw-r--r--framework/programs/run.py21
-rw-r--r--framework/test/base.py31
4 files changed, 34 insertions, 70 deletions
diff --git a/framework/options.py b/framework/options.py
index db4bf7633..211159a45 100644
--- a/framework/options.py
+++ b/framework/options.py
@@ -48,8 +48,6 @@ class _Options(object): # pylint: disable=too-many-instance-attributes
Options are as follows:
execute -- False for dry run
valgrind -- True if valgrind is to be used
- dmesg -- True if dmesg checking is desired. This forces concurrency off
- monitored -- True if monitoring is desired. This forces concurrency off
env -- environment variables set for each test before run
deqp_mustpass -- True to enable the use of the deqp mustpass list feature.
"""
@@ -57,8 +55,6 @@ class _Options(object): # pylint: disable=too-many-instance-attributes
def __init__(self):
self.execute = True
self.valgrind = False
- self.dmesg = False
- self.monitored = False
self.sync = False
self.deqp_mustpass = False
self.process_isolation = True
diff --git a/framework/profile.py b/framework/profile.py
index 8449e7afc..1bde8fb6a 100644
--- a/framework/profile.py
+++ b/framework/profile.py
@@ -211,42 +211,10 @@ class TestProfile(object):
self.test_list = TestDict()
self.forced_test_list = []
self.filters = []
- # Sets a default of a Dummy
- self._dmesg = None
- self.dmesg = False
- self.results_dir = None
- self._monitoring = None
- self.monitoring = False
-
- @property
- def dmesg(self):
- """ Return dmesg """
- return self._dmesg
-
- @dmesg.setter
- def dmesg(self, not_dummy):
- """Use dmesg.
-
- Arguments:
- not_dummy -- Get a platform dependent Dmesg class if True, otherwise
- get a DummyDmesg.
- """
- self._dmesg = get_dmesg(not_dummy)
-
- @property
- def monitoring(self):
- """ Return monitoring """
- return self._monitoring
-
- @monitoring.setter
- def monitoring(self, monitored):
- """Set monitoring.
-
- Arguments:
- monitored -- if Truthy Monitoring will enable monitoring according the
- defined rules
- """
- self._monitoring = Monitoring(monitored)
+ self.options = {
+ 'dmesg': get_dmesg(False),
+ 'monitor': Monitoring(False),
+ }
@contextlib.contextmanager
def group_manager(self, test_class, group, prefix=None, **default_args):
@@ -431,9 +399,9 @@ def run(profiles, logger, backend, concurrency):
def test(name, test, profile, this_pool=None):
"""Function to call test.execute from map"""
with backend.write_test(name) as w:
- test.execute(name, log.get(), profile.dmesg, profile.monitoring)
+ test.execute(name, log.get(), profile.options)
w(test.result)
- if profile.monitoring.abort_needed:
+ if profile.options['monitor'].abort_needed:
this_pool.terminate()
def run_threads(pool, profile, test_list, filterby=None):
@@ -484,5 +452,5 @@ def run(profiles, logger, backend, concurrency):
log.get().summary()
for p, _ in profiles:
- if p.monitoring.abort_needed:
- raise exceptions.PiglitAbort(p.monitoring.error_message)
+ if p.options['monitor'].abort_needed:
+ raise exceptions.PiglitAbort(p.options['monitor'].error_message)
diff --git a/framework/programs/run.py b/framework/programs/run.py
index 2ef3b4ecd..9d9538f58 100644
--- a/framework/programs/run.py
+++ b/framework/programs/run.py
@@ -34,6 +34,8 @@ import time
import six
from framework import core, backends, exceptions, options
+from framework import dmesg
+from framework import monitoring
from framework import profile
from framework.results import TimeAttribute
from . import parsers
@@ -226,6 +228,8 @@ def _create_metadata(args, name):
opts['concurrent'] = args.concurrency
opts['include_filter'] = args.include_tests
opts['exclude_filter'] = args.exclude_tests
+ opts['dmesg'] = args.dmesg
+ opts['monitoring'] = args.monitored
if args.platform:
opts['platform'] = args.platform
@@ -282,8 +286,6 @@ def run(input_):
# Pass arguments into Options
options.OPTIONS.execute = args.execute
options.OPTIONS.valgrind = args.valgrind
- options.OPTIONS.dmesg = args.dmesg
- options.OPTIONS.monitored = args.monitored
options.OPTIONS.sync = args.sync
options.OPTIONS.deqp_mustpass = args.deqp_mustpass
options.OPTIONS.process_isolation = args.process_isolation
@@ -330,11 +332,11 @@ def run(input_):
# Set the dmesg type
if args.dmesg:
for p in profiles:
- p.dmesg = args.dmesg
+ p.options['dmesg'] = dmesg.get_dmesg(args.dmesg)
if args.monitored:
for p in profiles:
- p.monitoring = args.monitored
+ p.options['monitor'] = monitoring.Monitoring(args.monitored)
for p in profiles:
if args.exclude_tests:
@@ -376,8 +378,6 @@ def resume(input_):
results = backends.load(args.results_path)
options.OPTIONS.execute = results.options['execute']
options.OPTIONS.valgrind = results.options['valgrind']
- options.OPTIONS.dmesg = results.options['dmesg']
- options.OPTIONS.monitored = results.options['monitored']
options.OPTIONS.sync = results.options['sync']
options.OPTIONS.deqp_mustpass = results.options['deqp_mustpass']
options.OPTIONS.proces_isolation = results.options['process_isolation']
@@ -407,11 +407,12 @@ def resume(input_):
for p in profiles:
p.results_dir = args.results_path
- if options.OPTIONS.dmesg:
- p.dmesg = options.OPTIONS.dmesg
+ if results.options['dmesg']:
+ p.dmesg = dmesg.get_dmesg(results.options['dmesg'])
- if options.OPTIONS.monitored:
- p.monitoring = options.OPTIONS.monitored
+ if results.options['monitoring']:
+ p.options['monitor'] = monitoring.Monitoring(
+ results.options['monitoring'])
if exclude_tests:
p.filters.append(lambda n, _: n not in exclude_tests)
diff --git a/framework/test/base.py b/framework/test/base.py
index 5f0491dfe..6b7cab658 100644
--- a/framework/test/base.py
+++ b/framework/test/base.py
@@ -39,8 +39,9 @@ import warnings
import six
from six.moves import range
-from framework import exceptions, options
+from framework import exceptions
from framework import status
+from framework.options import OPTIONS
from framework.results import TestResult
# We're doing some special crazy here to make timeouts work on python 2. pylint
@@ -186,30 +187,28 @@ class Test(object):
assert isinstance(timeout, int)
self.timeout = timeout
- def execute(self, path, log, dmesg, monitoring):
+ def execute(self, path, log, options):
""" Run a test
Run a test, but with features. This times the test, uses dmesg checking
(if requested), and runs the logger.
Arguments:
- path -- the name of the test
- log -- a log.Log instance
- dmesg -- a dmesg.BaseDmesg derived class
- monitoring -- a monitoring.Monitoring instance
-
+ path -- the name of the test
+ log -- a log.Log instance
+ options -- a dictionary containing dmesg and monitoring objects
"""
log.start(path)
# Run the test
- if options.OPTIONS.execute:
+ if OPTIONS.execute:
try:
self.result.time.start = time.time()
- dmesg.update_dmesg()
- monitoring.update_monitoring()
+ options['dmesg'].update_dmesg()
+ options['monitor'].update_monitoring()
self.run()
self.result.time.end = time.time()
- self.result = dmesg.update_result(self.result)
- monitoring.check_monitoring()
+ self.result = options['dmesg'].update_result(self.result)
+ options['monitor'].check_monitoring()
# This is a rare case where a bare exception is okay, since we're
# using it to log exceptions
except:
@@ -254,7 +253,7 @@ class Test(object):
self.result.command = ' '.join(self.command)
self.result.environment = " ".join(
'{0}="{1}"'.format(k, v) for k, v in itertools.chain(
- six.iteritems(options.OPTIONS.env), six.iteritems(self.env)))
+ six.iteritems(OPTIONS.env), six.iteritems(self.env)))
try:
self.is_skip()
@@ -319,7 +318,7 @@ class Test(object):
else:
f = six.text_type
_base = itertools.chain(six.iteritems(os.environ),
- six.iteritems(options.OPTIONS.env),
+ six.iteritems(OPTIONS.env),
six.iteritems(self.env))
fullenv = {f(k): f(v) for k, v in _base}
@@ -419,7 +418,7 @@ class ValgrindMixin(object):
@Test.command.getter
def command(self):
command = super(ValgrindMixin, self).command
- if options.OPTIONS.valgrind:
+ if OPTIONS.valgrind:
return ['valgrind', '--quiet', '--error-exitcode=1',
'--tool=memcheck'] + command
else:
@@ -436,7 +435,7 @@ class ValgrindMixin(object):
"""
super(ValgrindMixin, self).interpret_result()
- if options.OPTIONS.valgrind:
+ if OPTIONS.valgrind:
# If the underlying test failed, simply report
# 'skip' for this valgrind test.
if self.result.result != 'pass' and (