On 7 October 2011 16:57, Matěj Cepl <span dir="ltr"><<a href="mailto:mcepl@redhat.com">mcepl@redhat.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
This patch allowed me to make a package of piglit<br>
(<a href="http://mcepl.fedorapeople.org/rpms/piglit*" target="_blank">http://mcepl.fedorapeople.org/rpms/piglit*</a>), which is severely non-compliant<br>
with Fedora packaging rules, but at least I have now all tests and data RO on<br>
/usr/lib*/piglit directory, executables (i.e., piglit-*.py scripts) symlinked<br>
to /usr/bin and the results could go to some third place.<br>
<br>
So I am now able to run<br>
<br>
piglit-run tests/quick-driver.tests /tmp/piglit<br>
<br>
and then with this command<br>
<br>
piglit-summary-html --overwrite /tmp/piglit/results /tmp/piglit/main<br>
<br>
generate a report in /tmp/piglit/results/index.html & al.<br>
<br>
Please, comment and explain me why I am crazy.<br>
<br>
Matěj<br>
<br>
---------------------------------------------------------<br>
- also replace execfile with subprocess.call and setting results_dir.<br>
- still needs more debugging, but hopefully could start to work<br>
- fix also piglit-summary-html<br>
<br>
Signed-off-by: Matěj Cepl <<a href="mailto:mcepl@redhat.com">mcepl@redhat.com</a>><br>
---<br>
framework/core.py | 16 ++++--<br>
framework/gleantest.py | 10 ++--<br>
piglit-merge-results.py | 3 +-<br>
piglit-run.py | 11 ++++-<br>
piglit-summary-html.py | 5 +-<br>
tests/all.tests | 100 +++++++++++++++++++--------------------<br>
tests/external-glslparser.tests | 1 -<br>
tests/quick-driver.tests | 7 +--<br>
tests/quick.tests | 6 +--<br>
tests/r300.tests | 2 +-<br>
tests/r500.tests | 3 +-<br>
tests/r600.tests | 3 +-<br>
tests/sanity.tests | 5 +-<br>
13 files changed, 88 insertions(+), 84 deletions(-)<br>
<br>
diff --git a/framework/core.py b/framework/core.py<br>
index 5c583c7..2a00415 100644<br>
--- a/framework/core.py<br>
+++ b/framework/core.py<br>
@@ -25,7 +25,7 @@<br>
<br>
import errno<br>
import json<br>
-import os<br>
+import os, os.path<br>
import platform<br>
import stat<br>
import subprocess<br>
@@ -200,6 +200,7 @@ def checkDir(dirname, failifexists):<br>
os.makedirs(dirname)<br>
except OSError, e:<br>
if e.errno != errno.EEXIST:<br>
+ print >>sys.stderr, "Exception: %s" % e<br>
raise<br>
<br>
if 'PIGLIT_BUILD_DIR' in os.environ:<br>
@@ -572,16 +573,17 @@ class TestProfile:<br>
##### Loaders<br>
#############################################################################<br>
<br>
-def loadTestProfile(filename):<br>
+def loadTestProfile(filename, resdir):<br>
+ ns = {<br>
+ '__file__': filename,<br>
+ 'res_dir': resdir<br>
+ }<br>
try:<br>
- ns = {<br>
- '__file__': filename<br>
- }<br>
execfile(filename, ns)<br>
- return ns['profile']<br>
except:<br>
traceback.print_exc()<br>
raise Exception('Could not read tests profile')<br>
+ return ns['profile']<br>
<br>
def loadTestResults(path):<br>
if os.path.isdir(path):<br>
@@ -599,3 +601,5 @@ def loadTestResults(path):<br>
<br>
assert(<a href="http://testrun.name" target="_blank">testrun.name</a> is not None)<br>
return testrun<br>
+<br>
+#vi:noet sw=4 ts=8<br>
diff --git a/framework/gleantest.py b/framework/gleantest.py<br>
index 254cfcc..32409bd 100644<br>
--- a/framework/gleantest.py<br>
+++ b/framework/gleantest.py<br>
@@ -33,20 +33,20 @@ from exectest import ExecTest<br>
def gleanExecutable():<br>
return testBinDir + 'glean'<br>
<br>
-def gleanResultDir():<br>
- return os.path.join('.', 'results', 'glean')<br>
+def gleanResultDir(r_dir):<br>
+ return os.path.join(r_dir, 'results', 'glean')<br>
<br>
class GleanTest(ExecTest):<br>
globalParams = []<br>
<br>
- def __init__(self, name):<br>
+ def __init__(self, name, resdir = '.'):<br></blockquote><div><br>I'd prefer not to have a default value for "resdir". It's never used, and its presence creates the risk that someone will add a GleanTest() invocation later and forget to pass the second argument, and then the results from that GleanTest will go to the wrong place.<br>
<br>(Granted, we're not terribly likely to be adding any glean tests in the future, but why take unnecessary risks?)<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
ExecTest.__init__(self, \<br>
- [gleanExecutable(), "-r", os.path.join(gleanResultDir(), name),<br>
+ [gleanExecutable(), "-r", os.path.join(gleanResultDir(resdir), name),<br>
"-o",<br>
"-v", "-v", "-v",<br>
"-t", "+"+name])<br>
<br>
- checkDir(os.path.join(gleanResultDir(), name), False)<br>
+ checkDir(os.path.join(gleanResultDir(resdir), name), False)<br>
<br>
<a href="http://self.name" target="_blank">self.name</a> = name<br>
<br>
diff --git a/piglit-merge-results.py b/piglit-merge-results.py<br>
index eff8d5c..26d5881 100755<br>
--- a/piglit-merge-results.py<br>
+++ b/piglit-merge-results.py<br>
@@ -23,8 +23,9 @@<br>
<br>
<br>
from getopt import getopt, GetoptError<br>
-import sys<br>
+import sys, os.path<br>
<br>
+sys.path.append(os.path.dirname(os.path.realpath(sys.argv[0])))<br>
import framework.core as core<br>
<br>
<br>
diff --git a/piglit-run.py b/piglit-run.py<br>
index c5f5a4a..4218b75 100755<br>
--- a/piglit-run.py<br>
+++ b/piglit-run.py<br>
@@ -29,6 +29,7 @@ import sys, os<br>
import time<br>
import traceback<br>
<br>
+sys.path.append(path.dirname(path.realpath(sys.argv[0])))<br>
import framework.core as core<br>
from framework.threads import synchronized_self<br>
<br>
@@ -106,6 +107,11 @@ def main():<br>
profileFilename = args[0]<br>
resultsDir = args[1]<br>
<br>
+ # Change to the piglit's path<br>
+ start_dir = os.getcwd()<br>
+ piglit_dir = path.dirname(path.realpath(sys.argv[0]))<br>
+ os.chdir(piglit_dir)<br>
+<br>
core.checkDir(resultsDir, False)<br>
<br>
results = core.TestrunResult()<br>
@@ -126,7 +132,7 @@ def main():<br>
for (key, value) in env.collectData().items():<br>
json_writer.write_dict_item(key, value)<br>
<br>
- profile = core.loadTestProfile(profileFilename)<br>
+ profile = core.loadTestProfile(profileFilename, resultsDir)<br>
time_start = time.time()<br>
<br>
profile.run(env, json_writer)<br>
@@ -143,5 +149,8 @@ def main():<br>
print 'Thank you for running Piglit!'<br>
print 'Results have been written to ' + result_filepath<br>
<br>
+ # Return back to the original path<br>
+ os.chdir(start_dir)<br>
+<br>
if __name__ == "__main__":<br>
main()<br>
diff --git a/piglit-summary-html.py b/piglit-summary-html.py<br>
index a255a15..56e4449 100755<br>
--- a/piglit-summary-html.py<br>
+++ b/piglit-summary-html.py<br>
@@ -23,9 +23,10 @@<br>
<br>
from getopt import getopt, GetoptError<br>
import cgi<br>
-import os<br>
+import os, os.path<br>
import sys<br>
<br>
+sys.path.append(os.path.dirname(os.path.realpath(sys.argv[0])))<br>
import framework.core as core<br>
import framework.summary<br>
<br>
@@ -53,7 +54,7 @@ def writefile(filename, text):<br>
f.write(text.encode('utf-8'))<br>
f.close()<br>
<br>
-templatedir = os.path.join(os.path.dirname(__file__), 'templates')<br>
+templatedir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'templates')<br>
Result = readfile(os.path.join(templatedir, 'result.html'))<br>
ResultDetail = readfile(os.path.join(templatedir, 'result_detail.html'))<br>
ResultList = readfile(os.path.join(templatedir, 'result_list.html'))<br>
diff --git a/tests/all.tests b/tests/all.tests<br>
index 40bc92c..3fcc4d0 100644<br>
--- a/tests/all.tests<br>
+++ b/tests/all.tests<br>
@@ -2,14 +2,12 @@<br>
# -*- coding: utf-8 -*-<br>
# All tests that come with piglit, using default settings<br>
<br>
-import os<br>
+import os, re, sys<br>
import os.path as path<br>
-import re<br>
-import subprocess<br>
<br>
-from framework.core import *<br>
+from framework.core import Group, TestProfile<br>
from framework.exectest import *<br>
-from framework.gleantest import *<br>
+from framework.gleantest import GleanTest<br>
from framework.glsl_parser_test import GLSLParserTest, add_glsl_parser_test, import_glsl_parser_tests<br></blockquote><div><br>I have no objection to cleaning up these imports like this, but I would really prefer them to be in their own separate patch. This comment also applies to all the other ".tests" files that you've changed.<br>
<br>Also, it's not clear to me why we need to import "sys" into these ".tests" files.<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
# Blacklisted tests are removed from the test profile.<br>
@@ -59,65 +57,65 @@ def add_fbo_depthstencil_tests(group, format):<br>
group[prefix + 'depthstencil-' + format + '-blit'] = PlainExecTest(['fbo-depthstencil', '-auto', 'blit', format])<br>
<br>
glean = Group()<br>
-glean['basic'] = GleanTest('basic')<br>
-glean['api2'] = GleanTest('api2')<br>
-glean['makeCurrent'] = GleanTest('makeCurrent')<br>
-glean['blendFunc'] = GleanTest('blendFunc')<br>
-glean['bufferObject'] = GleanTest('bufferObject')<br>
-glean['clipFlat'] = GleanTest('clipFlat')<br>
-glean['depthStencil'] = GleanTest('depthStencil')<br>
-glean['fbo'] = GleanTest('fbo')<br>
-glean['fpexceptions'] = GleanTest('fpexceptions')<br>
-glean['getString'] = GleanTest('getString')<br>
-glean['logicOp'] = GleanTest('logicOp')<br>
-glean['maskedClear'] = GleanTest('maskedClear')<br>
-glean['occluquery'] = GleanTest('occluQry')<br>
-glean['orthoPosRandTris'] = GleanTest('orthoPosRandTris')<br>
-glean['orthoPosRandRects'] = GleanTest('orthoPosRandRects')<br>
-glean['orthoPosTinyQuads'] = GleanTest('orthoPosTinyQuads')<br>
-glean['orthoPosHLines'] = GleanTest('orthoPosHLines')<br>
-glean['orthoPosVLines'] = GleanTest('orthoPosVLines')<br>
-glean['orthoPosPoints'] = GleanTest('orthoPosPoints')<br>
-glean['paths'] = GleanTest('paths')<br>
-glean['pbo'] = GleanTest('pbo')<br>
-glean['polygonOffset'] = GleanTest('polygonOffset')<br>
-glean['pixelFormats'] = GleanTest('pixelFormats')<br>
-glean['pointAtten'] = GleanTest('pointAtten')<br>
-glean['pointSprite'] = GleanTest('pointSprite')<br>
-glean['exactRGBA'] = GleanTest('exactRGBA')<br>
-glean['readPixSanity'] = GleanTest('readPixSanity')<br>
-glean['rgbTriStrip'] = GleanTest('rgbTriStrip')<br>
-glean['scissor'] = GleanTest('scissor')<br>
-glean['shaderAPI'] = GleanTest('shaderAPI')<br>
-glean['stencil2'] = GleanTest('stencil2')<br>
-glean['teapot'] = GleanTest('teapot')<br>
-glean['texCombine'] = GleanTest('texCombine')<br>
-glean['texCube'] = GleanTest('texCube')<br>
-glean['texEnv'] = GleanTest('texEnv')<br>
-glean['texgen'] = GleanTest('texgen')<br>
-glean['texRect'] = GleanTest('texRect')<br>
-glean['texCombine4'] = GleanTest('texCombine4')<br>
-glean['texSwizzle'] = GleanTest('texSwizzle')<br>
-glean['texture_srgb'] = GleanTest('texture_srgb')<br>
-glean['texUnits'] = GleanTest('texUnits')<br>
-glean['vertArrayBGRA'] = GleanTest('vertArrayBGRA')<br>
-glean['vertattrib'] = GleanTest('vertattrib')<br>
+glean['basic'] = GleanTest('basic', res_dir)<br>
+glean['api2'] = GleanTest('api2', res_dir)<br>
+glean['makeCurrent'] = GleanTest('makeCurrent', res_dir)<br>
+glean['blendFunc'] = GleanTest('blendFunc', res_dir)<br>
+glean['bufferObject'] = GleanTest('bufferObject', res_dir)<br>
+glean['clipFlat'] = GleanTest('clipFlat', res_dir)<br>
+glean['depthStencil'] = GleanTest('depthStencil', res_dir)<br>
+glean['fbo'] = GleanTest('fbo', res_dir)<br>
+glean['fpexceptions'] = GleanTest('fpexceptions', res_dir)<br>
+glean['getString'] = GleanTest('getString', res_dir)<br>
+glean['logicOp'] = GleanTest('logicOp', res_dir)<br>
+glean['maskedClear'] = GleanTest('maskedClear', res_dir)<br>
+glean['occluquery'] = GleanTest('occluQry', res_dir)<br>
+glean['orthoPosRandTris'] = GleanTest('orthoPosRandTris', res_dir)<br>
+glean['orthoPosRandRects'] = GleanTest('orthoPosRandRects', res_dir)<br>
+glean['orthoPosTinyQuads'] = GleanTest('orthoPosTinyQuads', res_dir)<br>
+glean['orthoPosHLines'] = GleanTest('orthoPosHLines', res_dir)<br>
+glean['orthoPosVLines'] = GleanTest('orthoPosVLines', res_dir)<br>
+glean['orthoPosPoints'] = GleanTest('orthoPosPoints', res_dir)<br>
+glean['paths'] = GleanTest('paths', res_dir)<br>
+glean['pbo'] = GleanTest('pbo', res_dir)<br>
+glean['polygonOffset'] = GleanTest('polygonOffset', res_dir)<br>
+glean['pixelFormats'] = GleanTest('pixelFormats', res_dir)<br>
+glean['pointAtten'] = GleanTest('pointAtten', res_dir)<br>
+glean['pointSprite'] = GleanTest('pointSprite', res_dir)<br>
+glean['exactRGBA'] = GleanTest('exactRGBA', res_dir)<br>
+glean['readPixSanity'] = GleanTest('readPixSanity', res_dir)<br>
+glean['rgbTriStrip'] = GleanTest('rgbTriStrip', res_dir)<br>
+glean['scissor'] = GleanTest('scissor', res_dir)<br>
+glean['shaderAPI'] = GleanTest('shaderAPI', res_dir)<br>
+glean['stencil2'] = GleanTest('stencil2', res_dir)<br>
+glean['teapot'] = GleanTest('teapot', res_dir)<br>
+glean['texCombine'] = GleanTest('texCombine', res_dir)<br>
+glean['texCube'] = GleanTest('texCube', res_dir)<br>
+glean['texEnv'] = GleanTest('texEnv', res_dir)<br>
+glean['texgen'] = GleanTest('texgen', res_dir)<br>
+glean['texRect'] = GleanTest('texRect', res_dir)<br>
+glean['texCombine4'] = GleanTest('texCombine4', res_dir)<br>
+glean['texSwizzle'] = GleanTest('texSwizzle', res_dir)<br>
+glean['texture_srgb'] = GleanTest('texture_srgb', res_dir)<br>
+glean['texUnits'] = GleanTest('texUnits', res_dir)<br>
+glean['vertArrayBGRA'] = GleanTest('vertArrayBGRA', res_dir)<br>
+glean['vertattrib'] = GleanTest('vertattrib', res_dir)<br>
<br>
def add_glsl1(name):<br>
testname = 'glsl1-' + name<br>
- glean[testname] = GleanTest('glsl1')<br>
+ glean[testname] = GleanTest('glsl1', res_dir)<br>
glean[testname].env['PIGLIT_TEST'] = name<br>
execfile(os.path.dirname(__file__) + '/glean-glsl1.tests')<br>
<br>
def add_fp1(name):<br>
testname = 'fp1-' + name<br>
- glean[testname] = GleanTest('fragProg1')<br>
+ glean[testname] = GleanTest('fragProg1', res_dir)<br>
glean[testname].env['PIGLIT_TEST'] = name<br>
execfile(os.path.dirname(__file__) + '/glean-fragProg1.tests')<br>
<br>
def add_vp1(name):<br>
testname = 'vp1-' + name<br>
- glean[testname] = GleanTest('vertProg1')<br>
+ glean[testname] = GleanTest('vertProg1', res_dir)<br>
glean[testname].env['PIGLIT_TEST'] = name<br>
execfile(os.path.dirname(__file__) + '/glean-vertProg1.tests')<br>
<br>
diff --git a/tests/external-glslparser.tests b/tests/external-glslparser.tests<br>
index f8ea1ac..81f5ae4 100644<br>
--- a/tests/external-glslparser.tests<br>
+++ b/tests/external-glslparser.tests<br>
@@ -4,7 +4,6 @@<br>
<br>
import os<br>
import re<br>
-import subprocess<br>
<br>
from framework.core import *<br>
from framework.exectest import *<br>
diff --git a/tests/quick-driver.tests b/tests/quick-driver.tests<br>
index 8d05ee3..0e5f8c1 100644<br>
--- a/tests/quick-driver.tests<br>
+++ b/tests/quick-driver.tests<br>
@@ -1,12 +1,7 @@<br>
#!/usr/bin/env python<br>
# -*- coding: utf-8 -*-<br>
<br>
-import re<br>
-import subprocess<br>
-<br>
-from framework.core import *<br>
-from framework.exectest import *<br>
-from framework.gleantest import *<br>
+import re, sys, os<br>
<br>
execfile(os.path.dirname(__file__) + '/quick.tests')<br>
<br>
diff --git a/tests/quick.tests b/tests/quick.tests<br>
index b2c3212..702a69f 100644<br>
--- a/tests/quick.tests<br>
+++ b/tests/quick.tests<br>
@@ -4,14 +4,10 @@<br>
# Testing drivers for Radeon hardware<br>
#<br>
<br>
-import os<br>
-import re<br>
+import os.path<br>
<br>
execfile(os.path.dirname(__file__) + '/all.tests')<br>
<br>
-from framework.core import *<br>
-from framework.gleantest import *<br>
-<br>
GleanTest.globalParams += [ "--quick" ]<br>
<br>
del profile.tests['valgrind']<br>
diff --git a/tests/r300.tests b/tests/r300.tests<br>
index ac8096a..fb93d6a 100644<br>
--- a/tests/r300.tests<br>
+++ b/tests/r300.tests<br>
@@ -3,7 +3,7 @@<br>
# Testing the r300 DRI driver<br>
#<br>
<br>
-import os<br>
+import os, sys<br>
import re<br>
<br>
execfile(os.path.dirname(__file__) + '/quick-driver.tests')<br>
diff --git a/tests/r500.tests b/tests/r500.tests<br>
index 32c8d5b..7276ac2 100644<br>
--- a/tests/r500.tests<br>
+++ b/tests/r500.tests<br>
@@ -3,8 +3,7 @@<br>
# Testing the r500 DRI driver<br>
#<br>
<br>
-import os<br>
-import re<br>
+import os.path<br>
<br>
execfile(os.path.dirname(__file__) + '/quick-driver.tests')<br>
<br>
diff --git a/tests/r600.tests b/tests/r600.tests<br>
index 1b7bc7f..0bf21fa 100644<br>
--- a/tests/r600.tests<br>
+++ b/tests/r600.tests<br>
@@ -1,7 +1,8 @@<br>
#!/usr/bin/env python<br>
<br>
-import os<br>
+import os.path<br>
import re<br>
+import os, re, sys<br>
<br>
execfile(os.path.dirname(__file__) + '/quick-driver.tests')<br>
<br>
diff --git a/tests/sanity.tests b/tests/sanity.tests<br>
index 13c65b7..c134685 100644<br>
--- a/tests/sanity.tests<br>
+++ b/tests/sanity.tests<br>
@@ -5,10 +5,11 @@<br>
<br>
from framework.core import *<br>
from framework.gleantest import *<br>
+import sys<br>
<br>
glean = Group()<br>
-glean['basic'] = GleanTest('basic')<br>
-glean['readPixSanity'] = GleanTest('readPixSanity')<br>
+glean['basic'] = GleanTest('basic', res_dir)<br>
+glean['readPixSanity'] = GleanTest('readPixSanity', res_dir)<br>
<br>
profile = TestProfile()<br>
profile.tests['glean'] = glean<br>
<font color="#888888">--<br>
1.7.1<br>
<br>
_______________________________________________<br>
Piglit mailing list<br>
<a href="mailto:Piglit@lists.freedesktop.org">Piglit@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/piglit" target="_blank">http://lists.freedesktop.org/mailman/listinfo/piglit</a><br>
</font></blockquote></div><br>Other than my comments above, the patch looks reasonable to me.<br>