[Piglit] [PATCH 19/19] run.py: Allow using piglit.conf to set default backend
Dylan Baker
baker.dylan.c at gmail.com
Thu Aug 28 15:35:47 PDT 2014
This patch adds support to the piglit.conf to add a default backend. If
the config is empty and it is not set then 'json' will be returned (the
standard piglit json backend everyone knows and hates).
Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
---
framework/programs/run.py | 22 ++++++++-
framework/tests/run_parser_tests.py | 98 ++++++++++++++++++++++++++++++-------
piglit.conf.example | 7 ++-
3 files changed, 107 insertions(+), 20 deletions(-)
diff --git a/framework/programs/run.py b/framework/programs/run.py
index 82fc797..9a6276f 100644
--- a/framework/programs/run.py
+++ b/framework/programs/run.py
@@ -37,6 +37,7 @@ __all__ = ['run',
_PLATFORMS = ["glx", "x11_egl", "wayland", "gbm", "mixed_glx_egl"]
+_BACKENDS = ['json', 'junit']
def _default_platform():
@@ -70,6 +71,25 @@ def _default_platform():
return 'mixed_glx_egl'
+def _default_backend():
+ """ Logic to se the default backend to use
+
+ There are two options, either the one set via the -b/--backend option, or
+ the one in the config file. The default if that fails is to use json
+
+ """
+ try:
+ backend = core.PIGLIT_CONFIG.get('core', 'backend')
+ if backend not in _BACKENDS:
+ print('Backend is not valid\n',
+ 'valid backends are: {}'.format(' '.join(_BACKENDS)),
+ file=sys.stderr)
+ sys.exit(1)
+ return backend
+ except (ConfigParser.NoOptionError, ConfigParser.NoSectionError):
+ return 'json'
+
+
def _run_parser(input_):
""" Parser for piglit run command """
# Parse the config file before any other options, this allows the config
@@ -109,7 +129,7 @@ def _run_parser(input_):
help="Exclude matching tests "
"(can be used more than once)")
parser.add_argument('-b', '--backend',
- default='json',
+ default=_default_backend(),
choices=framework.results.BACKENDS,
help='select a results backend to use')
conc_parser = parser.add_mutually_exclusive_group()
diff --git a/framework/tests/run_parser_tests.py b/framework/tests/run_parser_tests.py
index 07d4750..d355bb2 100644
--- a/framework/tests/run_parser_tests.py
+++ b/framework/tests/run_parser_tests.py
@@ -30,16 +30,14 @@ import framework.programs.run as run
import framework.core as core
-class TestPlatform(utils.TestWithEnvClean):
- """ Test piglitrun -p/--platform options """
- _CONF = '[core]\nplatform=gbm'
-
- def __unset_config(self):
+class _Helpers(utils.TestWithEnvClean):
+ """ Some helpers to be shared between tests """
+ def _unset_config(self):
""" Ensure that no config files are being accidently loaded """
self.add_teardown('HOME')
self.add_teardown('XDG_CONFIG_HOME')
- def __move_piglit_conf(self):
+ def _move_piglit_conf(self):
""" Move piglit.conf from local and from piglit root
They are moved and put back so they aren't accidentally loaded
@@ -54,19 +52,83 @@ class TestPlatform(utils.TestWithEnvClean):
shutil.move(root, root + '.restore')
self.defer(shutil.move, root + '.restore', root)
+ def setup(self):
+ # Set core.PIGLIT_CONFIG back to pristine between tests
+ core.PIGLIT_CONFIG = ConfigParser.SafeConfigParser()
+
+
+class TestBackend(_Helpers):
+ """ Test piglit run -b/--backend option """
+ _CONF = '[core]\nbackend=junit'
+
+ def test_default(self):
+ """ run parser: backend final fallback path """
+ self._unset_config()
+ self._move_piglit_conf()
+
+ args = run._run_parser(['quick.py', 'foo'])
+ nt.assert_equal(args.backend, 'json')
+
+ def test_option_default(self):
+ """ Run parser: backend replaces default """
+ args = run._run_parser(['-b', 'json', 'quick.py', 'foo'])
+ nt.assert_equal(args.backend, 'json')
+
+ def test_option_conf(self):
+ """ Run parser: backend option replaces conf """
+ with utils.tempdir() as tdir:
+ os.environ['XDG_CONFIG_HOME'] = tdir
+ with open(os.path.join(tdir, 'piglit.conf'), 'w') as f:
+ f.write(self._CONF)
+
+ args = run._run_parser(['-b', 'json', 'quick.py', 'foo'])
+ nt.assert_equal(args.backend, 'json')
+
+ def test_conf_default(self):
+ """ Run parser platform: conf is used as a default when applicable """
+ self._unset_config()
+ self._move_piglit_conf()
+
+ with utils.tempdir() as tdir:
+ os.environ['XDG_CONFIG_HOME'] = tdir
+ with open(os.path.join(tdir, 'piglit.conf'), 'w') as f:
+ f.write(self._CONF)
+
+ args = run._run_parser(['quick.py', 'foo'])
+ nt.assert_equal(args.backend, 'junit')
+
+ @nt.raises(SystemExit)
+ def test_bad_value_in_conf(self):
+ """ run parser: an error is raised when the platform in conf is bad """
+ self._unset_config()
+ self._move_piglit_conf()
+
+ # This has sideffects, it shouldn't effect anything in this module, but
+ # it may cause later problems. But without this we get ugly error spew
+ # from this test.
+ sys.stderr = open(os.devnull, 'w')
+
+ with utils.tempdir() as tdir:
+ with open(os.path.join(tdir, 'piglit.conf'), 'w') as f:
+ f.write('[core]\nbackend=foobar')
+
+ run._run_parser(['-f', os.path.join(tdir, 'piglit.conf'),
+ 'quick.py', 'foo'])
+
+
+class TestPlatform(_Helpers):
+ """ Test piglitrun -p/--platform options """
+ _CONF = '[core]\nplatform=gbm'
+
def __set_env(self):
""" Set PIGLIT_PLATFORM """
self.add_teardown('PIGLIT_PLATFORM')
os.environ['PIGLIT_PLATFORM'] = 'glx'
- def setup(self):
- # Set core.PIGLIT_CONFIG back to pristine between tests
- core.PIGLIT_CONFIG = ConfigParser.SafeConfigParser()
-
def test_default(self):
""" run parser: platform final fallback path """
- self.__unset_config()
- self.__move_piglit_conf()
+ self._unset_config()
+ self._move_piglit_conf()
args = run._run_parser(['quick.py', 'foo'])
nt.assert_equal(args.platform, 'mixed_glx_egl')
@@ -103,8 +165,8 @@ class TestPlatform(utils.TestWithEnvClean):
def test_conf_default(self):
""" Run parser platform: conf is used as a default when applicable """
- self.__unset_config()
- self.__move_piglit_conf()
+ self._unset_config()
+ self._move_piglit_conf()
with utils.tempdir() as tdir:
os.environ['XDG_CONFIG_HOME'] = tdir
@@ -116,8 +178,8 @@ class TestPlatform(utils.TestWithEnvClean):
def test_env_conf(self):
""" Run parser: env overwrides a conf value """
- self.__unset_config()
- self.__move_piglit_conf()
+ self._unset_config()
+ self._move_piglit_conf()
self.__set_env()
with utils.tempdir() as tdir:
@@ -131,8 +193,8 @@ class TestPlatform(utils.TestWithEnvClean):
@nt.raises(SystemExit)
def test_bad_value_in_conf(self):
""" run parser: an error is raised when the platform in conf is bad """
- self.__unset_config()
- self.__move_piglit_conf()
+ self._unset_config()
+ self._move_piglit_conf()
# This has sideffects, it shouldn't effect anything in this module, but
# it may cause later problems. But without this we get ugly error spew
diff --git a/piglit.conf.example b/piglit.conf.example
index 3844bd0..e7a2101 100644
--- a/piglit.conf.example
+++ b/piglit.conf.example
@@ -51,8 +51,13 @@ run_test=./%(test_name)s
[core]
; Set the default platform to use.
-; Options can be found by running piglit -h and reading the section
+; Options can be found by running piglit run -h and reading the section
; for -p/--platform
;
; The default on Linux will be mixed_glx_egl
;platform=gbm
+
+; Set the default backend to use
+; Options can be found running piglit run -h and reading the section for
+; -b/--backend
+;backend=json
--
2.1.0
More information about the Piglit
mailing list