summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorDylan Baker <baker.dylan.c@gmail.com>2014-06-20 02:01:19 -0700
committerDylan Baker <baker.dylan.c@gmail.com>2014-06-23 22:21:45 -0700
commit767e55b539246e069f254a5b0dcbb04819d6773e (patch)
treef99b62d28d601434564b33167400628315e55495 /framework
parentd78e65e0862472a3506e28eb6ee3945e190bca5a (diff)
core.py: rename Environment to Options
Environment doesn't really describe what the class is (although, honestly it's a pretty bad class design), but Options comes much closer to what it is. v7: - update piglit-print-commands.py - replace instance name 'env' with 'opts' - rename Test.ENV to Test.OPTS Signed-off-by: Dylan Baker <baker.dylan.c@gmail.com> Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Diffstat (limited to 'framework')
-rw-r--r--framework/core.py17
-rw-r--r--framework/exectest.py20
-rw-r--r--framework/profile.py32
-rw-r--r--framework/programs/run.py46
-rw-r--r--framework/tests/core_tests.py2
-rw-r--r--framework/tests/profile_tests.py8
6 files changed, 69 insertions, 56 deletions
diff --git a/framework/core.py b/framework/core.py
index 6f476d0c5..2005a4eca 100644
--- a/framework/core.py
+++ b/framework/core.py
@@ -40,7 +40,7 @@ import framework.status as status
from .threads import synchronized_self
__all__ = ['PIGLIT_CONFIG',
- 'Environment',
+ 'Options',
'TestrunResult',
'TestResult',
'JSONWriter',
@@ -326,7 +326,20 @@ class TestrunResult:
json.dump(raw_dict, file, indent=JSONWriter.INDENT)
-class Environment:
+class Options(object):
+ """ Contains options for a piglit run
+
+ Options are as follows:
+ concurrent -- True if concurrency is to be used
+ execute -- False for dry run
+ filter -- list of compiled regex which include exclusively tests that match
+ exclude_filter -- list of compiled regex which exclude tests that match
+ valgrind -- True if valgrind is to be used
+ dmesg -- True if dmesg checking is desired. This forces concurrency off
+ verbose -- verbosity level.
+ env -- environment variables set for each test before run
+
+ """
def __init__(self, concurrent=True, execute=True, include_filter=None,
exclude_filter=None, valgrind=False, dmesg=False,
verbose=False):
diff --git a/framework/exectest.py b/framework/exectest.py
index 990b87def..2df49f57f 100644
--- a/framework/exectest.py
+++ b/framework/exectest.py
@@ -29,7 +29,7 @@ import sys
import traceback
import itertools
-from .core import TestResult, Environment
+from .core import TestResult, Options
__all__ = ['Test',
@@ -50,8 +50,8 @@ else:
class Test(object):
- ENV = Environment()
- __slots__ = ['ENV', 'run_concurrent', 'env', 'result', 'cwd', '_command',
+ OPTS = Options()
+ __slots__ = ['run_concurrent', 'env', 'result', 'cwd', '_command',
'_test_hook_execute_run']
def __init__(self, command, run_concurrent=False):
@@ -79,10 +79,10 @@ class Test(object):
Fully qualified test name as a string. For example,
``spec/glsl-1.30/preprocessor/compiler/keywords/void.frag``.
'''
- log_current = log.pre_log(path if self.ENV.verbose else None)
+ log_current = log.pre_log(path if self.OPTS.verbose else None)
# Run the test
- if self.ENV.execute:
+ if self.OPTS.execute:
try:
time_start = time.time()
dmesg.update_dmesg()
@@ -110,7 +110,7 @@ class Test(object):
@property
def command(self):
assert self._command
- if self.ENV.valgrind:
+ if self.OPTS.valgrind:
return ['valgrind', '--quiet', '--error-exitcode=1',
'--tool=memcheck'] + self._command
return self._command
@@ -138,7 +138,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(
- self.ENV.env.iteritems(), self.env.iteritems()))
+ self.OPTS.env.iteritems(), self.env.iteritems()))
if self.check_for_skip_scenario():
self.result['result'] = 'skip'
@@ -168,7 +168,7 @@ class Test(object):
elif self.result['returncode'] != 0 and self.result['result'] == 'pass':
self.result['result'] = 'warn'
- if self.ENV.valgrind:
+ if self.OPTS.valgrind:
# If the underlying test failed, simply report
# 'skip' for this valgrind test.
if self.result['result'] != 'pass':
@@ -191,10 +191,10 @@ class Test(object):
def get_command_result(self):
# Set the environment for the tests. Use the default settings created
- # in the Environment constructor first, then use any user defined
+ # in the Options constructor first, then use any user defined
# variables, finally, use any variables set for the test in the test
# profile
- fullenv = self.ENV.env.copy()
+ fullenv = self.OPTS.env.copy()
for key, value in itertools.chain(self.env.iteritems(),
os.environ.iteritems()):
fullenv[key] = str(value)
diff --git a/framework/profile.py b/framework/profile.py
index affd4b676..4242a986c 100644
--- a/framework/profile.py
+++ b/framework/profile.py
@@ -113,7 +113,7 @@ class TestProfile(object):
# Clear out the old Group()
self.tests = {}
- def _prepare_test_list(self, env):
+ def _prepare_test_list(self, opts):
""" Prepare tests for running
Flattens the nested group hierarchy into a flat dictionary using '/'
@@ -121,7 +121,7 @@ class TestProfile(object):
runs it's own filters plus the filters in the self.filters name
Arguments:
- env - a core.Environment instance
+ opts - a core.Options instance
"""
self._flatten_group_hierarchy()
@@ -132,9 +132,9 @@ class TestProfile(object):
# The extra argument is needed to match check_all's API
def test_matches(path, test):
"""Filter for user-specified restrictions"""
- return ((not env.filter or matches_any_regexp(path, env.filter))
- and not path in env.exclude_tests and
- not matches_any_regexp(path, env.exclude_filter))
+ return ((not opts.filter or matches_any_regexp(path, opts.filter))
+ and not path in opts.exclude_tests and
+ not matches_any_regexp(path, opts.exclude_filter))
filters = self.filters + [test_matches]
def check_all(item):
@@ -167,37 +167,37 @@ class TestProfile(object):
"""
pass
- def run(self, env, json_writer):
+ def run(self, opts, json_writer):
""" Runs all tests using Thread pool
When called this method will flatten out self.tests into
- self.test_list, then will prepare a logger, pass env to the Test class,
- and begin executing tests through it's Thread pools.
+ self.test_list, then will prepare a logger, pass opts to the Test
+ class, and begin executing tests through it's Thread pools.
- Based on the value of env.concurrent it will either run all the tests
+ Based on the value of opts.concurrent it will either run all the tests
concurrently, all serially, or first the thread safe tests then the
serial tests.
Finally it will print a final summary of the tests
Arguments:
- env -- a core.Environment instance
+ opts -- a core.Options instance
json_writer -- a core.JSONWriter instance
"""
self._pre_run_hook()
- framework.exectest.Test.ENV = env
+ framework.exectest.Test.Opts = opts
chunksize = 1
- self._prepare_test_list(env)
- log = Log(len(self.test_list), env.verbose)
+ self._prepare_test_list(opts)
+ log = Log(len(self.test_list), opts.verbose)
def test(pair):
""" Function to call test.execute from .map
- Adds env and json_writer which are needed by Test.execute()
+ Adds opts and json_writer which are needed by Test.execute()
"""
name, test = pair
@@ -216,9 +216,9 @@ class TestProfile(object):
single = multiprocessing.dummy.Pool(1)
multi = multiprocessing.dummy.Pool()
- if env.concurrent == "all":
+ if opts.concurrent == "all":
run_threads(multi, self.test_list.iteritems())
- elif env.concurrent == "none":
+ elif opts.concurrent == "none":
run_threads(single, self.test_list.iteritems())
else:
# Filter and return only thread safe tests to the threaded pool
diff --git a/framework/programs/run.py b/framework/programs/run.py
index 758c84553..d3e9830a2 100644
--- a/framework/programs/run.py
+++ b/framework/programs/run.py
@@ -130,18 +130,18 @@ def run(input_):
os.path.join(
os.path.dirname(__file__), '..', '..', 'piglit.conf')))
- # Pass arguments into Environment
- env = core.Environment(concurrent=args.concurrency,
- exclude_filter=args.exclude_tests,
- include_filter=args.include_tests,
- execute=args.execute,
- valgrind=args.valgrind,
- dmesg=args.dmesg,
- verbose=args.verbose)
+ # Pass arguments into Options
+ opts = core.Options(concurrent=args.concurrency,
+ exclude_filter=args.exclude_tests,
+ include_filter=args.include_tests,
+ execute=args.execute,
+ valgrind=args.valgrind,
+ dmesg=args.dmesg,
+ verbose=args.verbose)
# Set the platform to pass to waffle
if args.platform:
- env.env['PIGLIT_PLATFORM'] = args.platform
+ opts.env['PIGLIT_PLATFORM'] = args.platform
# Change working directory to the root of the piglit directory
piglit_dir = path.dirname(path.realpath(sys.argv[0]))
@@ -166,7 +166,7 @@ def run(input_):
json_writer.write_dict_key('options')
json_writer.open_dict()
json_writer.write_dict_item('profile', args.test_profile)
- for key, value in env:
+ for key, value in opts:
json_writer.write_dict_item(key, value)
if args.platform:
json_writer.write_dict_item('platform', args.platform)
@@ -186,7 +186,7 @@ def run(input_):
# Set the dmesg type
if args.dmesg:
profile.dmesg = args.dmesg
- profile.run(env, json_writer)
+ profile.run(opts, json_writer)
time_end = time.time()
json_writer.close_dict()
@@ -211,16 +211,16 @@ def resume(input_):
args = parser.parse_args(input_)
results = core.load_results(args.results_path)
- env = core.Environment(concurrent=results.options['concurrent'],
- exclude_filter=results.options['exclude_filter'],
- include_filter=results.options['filter'],
- execute=results.options['execute'],
- valgrind=results.options['valgrind'],
- dmesg=results.options['dmesg'],
- verbose=results.options['verbose'])
+ opts = core.Options(concurrent=results.options['concurrent'],
+ exclude_filter=results.options['exclude_filter'],
+ include_filter=results.options['filter'],
+ execute=results.options['execute'],
+ valgrind=results.options['valgrind'],
+ dmesg=results.options['dmesg'],
+ verbose=results.options['verbose'])
if results.options.get('platform'):
- env.env['PIGLIT_PLATFORM'] = results.options['platform']
+ opts.env['PIGLIT_PLATFORM'] = results.options['platform']
results_path = path.join(args.results_path, "main")
json_writer = core.JSONWriter(open(results_path, 'w+'))
@@ -239,15 +239,15 @@ def resume(input_):
json_writer.open_dict()
for key, value in results.tests.iteritems():
json_writer.write_dict_item(key, value)
- env.exclude_tests.add(key)
+ opts.exclude_tests.add(key)
profile = framework.profile.merge_test_profiles(results.options['profile'])
profile.results_dir = args.results_path
- if env.dmesg:
- profile.dmesg = env.dmesg
+ if opts.dmesg:
+ profile.dmesg = opts.dmesg
# This is resumed, don't bother with time since it wont be accurate anyway
- profile.run(env, json_writer)
+ profile.run(opts, json_writer)
json_writer.close_dict()
json_writer.close_dict()
diff --git a/framework/tests/core_tests.py b/framework/tests/core_tests.py
index a6ac8031d..ac021ddd0 100644
--- a/framework/tests/core_tests.py
+++ b/framework/tests/core_tests.py
@@ -50,7 +50,7 @@ def test_generate_initialize():
"""
yieldable = check_initialize
- for target in [core.Environment, core.TestrunResult, core.TestResult,
+ for target in [core.Options, core.TestrunResult, core.TestResult,
core.PiglitJSONEncoder]:
yieldable.description = "Test that {} initializes".format(
target.__name__)
diff --git a/framework/tests/profile_tests.py b/framework/tests/profile_tests.py
index de4730f4a..c861cfced 100644
--- a/framework/tests/profile_tests.py
+++ b/framework/tests/profile_tests.py
@@ -211,7 +211,7 @@ def test_matches_filter_mar_1(data):
Nothing should be filtered.
"""
- env = core.Environment()
+ env = core.Options()
profile_ = profile.TestProfile()
profile_.test_list = data
@@ -223,7 +223,7 @@ def test_matches_filter_mar_1(data):
@nt.nottest
def test_matches_filter_mar_2(data):
""" Tests 'not env.filter or matches_any_regex() mar is False"""
- env = core.Environment(include_filter=['test5'])
+ env = core.Options(include_filter=['test5'])
profile_ = profile.TestProfile()
profile_.test_list = data
@@ -237,7 +237,7 @@ def test_matches_filter_mar_2(data):
@nt.nottest
def test_matches_env_exclude(data):
""" Tests 'not path in env.exclude_tests """
- env = core.Environment()
+ env = core.Options()
env.exclude_tests.add('group3/test5')
profile_ = profile.TestProfile()
@@ -253,7 +253,7 @@ def test_matches_env_exclude(data):
@nt.nottest
def test_matches_exclude_mar(data):
""" Tests 'not matches_any_regexp() """
- env = core.Environment(exclude_filter=['test5'])
+ env = core.Options(exclude_filter=['test5'])
profile_ = profile.TestProfile()
profile_.test_list = data