[Piglit] [PATCH 1/6] framework/environment.py: Adds new module
Dylan Baker
baker.dylan.c at gmail.com
Wed Jan 22 10:38:33 PST 2014
This module contains the testBinDir variable and the Environment class,
and is meant to hold environment settings for piglit
Signed-off-by: Dylan Baker <baker.dylan.c at gmail.com>
---
framework/core.py | 81 +---------------------------------
framework/environment.py | 100 ++++++++++++++++++++++++++++++++++++++++++
framework/exectest.py | 3 +-
framework/gleantest.py | 3 +-
framework/glsl_parser_test.py | 3 +-
framework/shader_test.py | 3 +-
piglit-print-commands.py | 5 ++-
piglit-resume.py | 16 ++++---
piglit-run.py | 13 +++---
tests/es3conform.py | 3 +-
tests/igt.py | 3 +-
tests/oglconfirm.py | 3 +-
12 files changed, 135 insertions(+), 101 deletions(-)
create mode 100644 framework/environment.py
diff --git a/framework/core.py b/framework/core.py
index 33946a7..64eda58 100644
--- a/framework/core.py
+++ b/framework/core.py
@@ -46,16 +46,14 @@ except ImportError:
import status
-__all__ = ['Environment',
- 'checkDir',
+__all__ = ['checkDir',
'loadTestProfile',
'TestrunResult',
'GroupResult',
'TestResult',
'TestProfile',
'Group',
- 'Test',
- 'testBinDir']
+ 'Test']
class PiglitJSONEncoder(json.JSONEncoder):
@@ -212,26 +210,6 @@ def checkDir(dirname, failifexists):
if e.errno != errno.EEXIST:
raise
-if 'PIGLIT_BUILD_DIR' in os.environ:
- testBinDir = os.path.join(os.environ['PIGLIT_BUILD_DIR'], 'bin')
-else:
- testBinDir = os.path.normpath(os.path.join(os.path.dirname(__file__),
- '../bin'))
-
-if 'PIGLIT_SOURCE_DIR' not in os.environ:
- p = os.path
- os.environ['PIGLIT_SOURCE_DIR'] = p.abspath(p.join(p.dirname(__file__),
- '..'))
-
-# In debug builds, Mesa will by default log GL API errors to stderr.
-# This is useful for application developers or driver developers
-# trying to debug applications that should execute correctly. But for
-# piglit we expect to generate errors regularly as part of testing,
-# and for exhaustive error-generation tests (particularly some in
-# khronos's conformance suite), it can end up ooming your system
-# trying to parse the strings.
-if 'MESA_DEBUG' not in os.environ:
- os.environ['MESA_DEBUG'] = 'silent'
class TestResult(dict):
@@ -396,61 +374,6 @@ class TestrunResult:
json.dump(raw_dict, file, indent=JSONWriter.INDENT)
-class Environment:
- def __init__(self, concurrent=True, execute=True, include_filter=[],
- exclude_filter=[], valgrind=False, dmesg=False):
- self.concurrent = concurrent
- self.execute = execute
- self.filter = []
- self.exclude_filter = []
- self.exclude_tests = set()
- self.valgrind = valgrind
- self.dmesg = dmesg
-
- """
- The filter lists that are read in should be a list of string objects,
- however, the filters need to be a list or regex object.
-
- This code uses re.compile to rebuild the lists and set self.filter
- """
- for each in include_filter:
- self.filter.append(re.compile(each))
- for each in exclude_filter:
- self.exclude_filter.append(re.compile(each))
-
- def __iter__(self):
- for key, values in self.__dict__.iteritems():
- # If the values are regex compiled then yield their pattern
- # attribute, which is the original plaintext they were compiled
- # from, otherwise yield them normally.
- if key in ['filter', 'exclude_filter']:
- yield (key, [x.pattern for x in values])
- else:
- yield (key, values)
-
- def run(self, command):
- try:
- p = subprocess.Popen(command,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- universal_newlines=True)
- (stdout, stderr) = p.communicate()
- except:
- return "Failed to run " + command
- return stderr+stdout
-
- def collectData(self):
- result = {}
- system = platform.system()
- if (system == 'Windows' or system.find("CYGWIN_NT") == 0):
- result['wglinfo'] = self.run('wglinfo')
- else:
- result['glxinfo'] = self.run('glxinfo')
- if system == 'Linux':
- result['lspci'] = self.run('lspci')
- return result
-
-
class Test(object):
def __init__(self, runConcurrent=False):
'''
diff --git a/framework/environment.py b/framework/environment.py
new file mode 100644
index 0000000..e46a6cb
--- /dev/null
+++ b/framework/environment.py
@@ -0,0 +1,100 @@
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# This permission notice shall be included in all copies or substantial
+# portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+import os
+import os.path as path
+import re
+import subprocess
+import platform
+
+__all__ = ['Environment',
+ 'testBinDir']
+
+if 'PIGLIT_BUILD_DIR' in os.environ:
+ testBinDir = path.join(environ['PIGLIT_BUILD_DIR'], 'bin')
+else:
+ testBinDir = path.normpath(path.join(path.dirname(__file__), '../bin'))
+
+if 'PIGLIT_SOURCE_DIR' not in os.environ:
+ os.environ['PIGLIT_SOURCE_DIR'] = path.abspath(
+ path.join(path.dirname(__file__), '..'))
+
+# In debug builds, Mesa will by default log GL API errors to stderr.
+# This is useful for application developers or driver developers
+# trying to debug applications that should execute correctly. But for
+# piglit we expect to generate errors regularly as part of testing,
+# and for exhaustive error-generation tests (particularly some in
+# khronos's conformance suite), it can end up ooming your system
+# trying to parse the strings.
+if 'MESA_DEBUG' not in os.environ:
+ os.environ['MESA_DEBUG'] = 'silent'
+
+
+class Environment:
+ def __init__(self, concurrent=True, execute=True, include_filter=[],
+ exclude_filter=[], valgrind=False, dmesg=False):
+ self.concurrent = concurrent
+ self.execute = execute
+ self.filter = []
+ self.exclude_filter = []
+ self.exclude_tests = set()
+ self.valgrind = valgrind
+ self.dmesg = dmesg
+
+ """
+ The filter lists that are read in should be a list of string objects,
+ however, the filters need to be a list or regex object.
+
+ This code uses re.compile to rebuild the lists and set self.filter
+ """
+ for each in include_filter:
+ self.filter.append(re.compile(each))
+ for each in exclude_filter:
+ self.exclude_filter.append(re.compile(each))
+
+ def __iter__(self):
+ for key, values in self.__dict__.iteritems():
+ # If the values are regex compiled then yield their pattern
+ # attribute, which is the original plaintext they were compiled
+ # from, otherwise yield them normally.
+ if key in ['filter', 'exclude_filter']:
+ yield (key, [x.pattern for x in values])
+ else:
+ yield (key, values)
+
+ def run(self, command):
+ try:
+ p = subprocess.Popen(command,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ universal_newlines=True)
+ (stdout, stderr) = p.communicate()
+ except:
+ return "Failed to run " + command
+ return stderr+stdout
+
+ def collectData(self):
+ result = {}
+ system = platform.system()
+ if (system == 'Windows' or system.find("CYGWIN_NT") == 0):
+ result['wglinfo'] = self.run('wglinfo')
+ else:
+ result['glxinfo'] = self.run('glxinfo')
+ if system == 'Linux':
+ result['lspci'] = self.run('lspci')
+ return result
diff --git a/framework/exectest.py b/framework/exectest.py
index 15dd966..493a57b 100644
--- a/framework/exectest.py
+++ b/framework/exectest.py
@@ -28,7 +28,8 @@ import shlex
import types
import re
-from core import Test, testBinDir, TestResult
+from core import Test, TestResult
+from framework.environment import testBinDir
# Platform global variables
diff --git a/framework/gleantest.py b/framework/gleantest.py
index d115c03..899bd6e 100644
--- a/framework/gleantest.py
+++ b/framework/gleantest.py
@@ -24,7 +24,8 @@
import os
import subprocess
-from core import checkDir, testBinDir, Test, TestResult
+from core import checkDir, Test, TestResult
+from framework.environment import testBinDir
from exectest import ExecTest
glean_executable = os.path.join(testBinDir, "glean")
diff --git a/framework/glsl_parser_test.py b/framework/glsl_parser_test.py
index 91f59cb..e51f2f8 100755
--- a/framework/glsl_parser_test.py
+++ b/framework/glsl_parser_test.py
@@ -39,7 +39,8 @@ import subprocess
import sys
from ConfigParser import SafeConfigParser
-from core import Test, testBinDir, TestResult
+from core import Test, TestResult
+from framework.environment import testBinDir
from cStringIO import StringIO
from exectest import PlainExecTest
diff --git a/framework/shader_test.py b/framework/shader_test.py
index aebb5d7..67ce13f 100755
--- a/framework/shader_test.py
+++ b/framework/shader_test.py
@@ -34,8 +34,9 @@ import re
import sys
import textwrap
-from core import testBinDir, Group, Test, TestResult, Environment
+from core import Group, Test, TestResult
from exectest import PlainExecTest
+from framework.environment import testBinDir, Environment
"""This module enables running shader tests.
diff --git a/piglit-print-commands.py b/piglit-print-commands.py
index c42ea6d..9dab54b 100755
--- a/piglit-print-commands.py
+++ b/piglit-print-commands.py
@@ -31,6 +31,7 @@ import traceback
sys.path.append(path.dirname(path.realpath(sys.argv[0])))
import framework.core as core
+import framework.environment as environment
from framework.exectest import ExecTest
from framework.gleantest import GleanTest
@@ -54,8 +55,8 @@ def main():
args = parser.parse_args()
# Set the environment, pass in the included and excluded tests
- env = core.Environment(exclude_filter=args.exclude_tests,
- include_filter=args.include_tests)
+ env = environment.Environment(exclude_filter=args.exclude_tests,
+ include_filter=args.include_tests)
# Change to the piglit's path
piglit_dir = path.dirname(path.realpath(sys.argv[0]))
diff --git a/piglit-resume.py b/piglit-resume.py
index c6b9b1e..d0bf4f7 100755
--- a/piglit-resume.py
+++ b/piglit-resume.py
@@ -27,6 +27,7 @@ import os.path as path
import argparse
import framework.core as core
+import framework.environment as environment
def main():
@@ -38,13 +39,14 @@ def main():
args = parser.parse_args()
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'])
-
+ env = environment.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'])
+
# Change working directory to the piglit directory
os.chdir(path.dirname(path.realpath(sys.argv[0])))
diff --git a/piglit-run.py b/piglit-run.py
index cf19073..aeb6a1f 100755
--- a/piglit-run.py
+++ b/piglit-run.py
@@ -31,6 +31,7 @@ import traceback
sys.path.append(path.dirname(path.realpath(sys.argv[0])))
import framework.core as core
+import framework.environment as environment
from framework.threads import synchronized_self
@@ -94,12 +95,12 @@ def main():
os.environ['PIGLIT_PLATFORM'] = args.platform
# 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)
+ env = environment.Environment(concurrent=args.concurrency,
+ exclude_filter=args.exclude_tests,
+ include_filter=args.include_tests,
+ execute=args.execute,
+ valgrind=args.valgrind,
+ dmesg=args.dmesg)
# Change working directory to the root of the piglit directory
piglit_dir = path.dirname(path.realpath(sys.argv[0]))
diff --git a/tests/es3conform.py b/tests/es3conform.py
index 1995a9c..307a3aa 100644
--- a/tests/es3conform.py
+++ b/tests/es3conform.py
@@ -26,7 +26,8 @@ import sys
from os import path
from glob import glob
-from framework.core import TestProfile, testBinDir
+from framework.core import TestProfile
+from framework.environment import testBinDir
from framework.exectest import ExecTest
__all__ = ['profile']
diff --git a/tests/igt.py b/tests/igt.py
index 5f52e49..c76b242 100644
--- a/tests/igt.py
+++ b/tests/igt.py
@@ -28,7 +28,8 @@ import sys
import subprocess
from os import path
-from framework.core import testBinDir, TestProfile, TestResult
+from framework.core import TestProfile, TestResult
+from framework.environment import testBinDir
from framework.exectest import ExecTest
__all__ = ['profile']
diff --git a/tests/oglconfirm.py b/tests/oglconfirm.py
index b9b79b8..82c6963 100644
--- a/tests/oglconfirm.py
+++ b/tests/oglconfirm.py
@@ -26,7 +26,8 @@ import re
import sys
import subprocess
-from framework.core import TestProfile, testBinDir
+from framework.core import TestProfile
+from framework.environment import testBinDir
from framework.exectest import ExecTest
from os import path
--
1.8.5.3
More information about the Piglit
mailing list