|
Packit Service |
a31ea6 |
#!/usr/bin/python
|
|
Packit Service |
a31ea6 |
import sys
|
|
Packit Service |
a31ea6 |
import time
|
|
Packit Service |
a31ea6 |
import os
|
|
Packit Service |
a31ea6 |
import string
|
|
Packit Service |
a31ea6 |
sys.path.insert(0, "python")
|
|
Packit Service |
a31ea6 |
import libxml2
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
#
|
|
Packit Service |
a31ea6 |
# the testsuite description
|
|
Packit Service |
a31ea6 |
#
|
|
Packit Service |
a31ea6 |
DIR="xinclude-test-suite"
|
|
Packit Service |
a31ea6 |
CONF="testdescr.xml"
|
|
Packit Service |
a31ea6 |
LOG="check-xinclude-test-suite.log"
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
log = open(LOG, "w")
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
os.chdir(DIR)
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
test_nr = 0
|
|
Packit Service |
a31ea6 |
test_succeed = 0
|
|
Packit Service |
a31ea6 |
test_failed = 0
|
|
Packit Service |
a31ea6 |
test_error = 0
|
|
Packit Service |
a31ea6 |
#
|
|
Packit Service |
a31ea6 |
# Error and warning handlers
|
|
Packit Service |
a31ea6 |
#
|
|
Packit Service |
a31ea6 |
error_nr = 0
|
|
Packit Service |
a31ea6 |
error_msg = ''
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
def errorHandler(ctx, str):
|
|
Packit Service |
a31ea6 |
global error_nr
|
|
Packit Service |
a31ea6 |
global error_msg
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
if string.find(str, "error:") >= 0:
|
|
Packit Service |
a31ea6 |
error_nr = error_nr + 1
|
|
Packit Service |
a31ea6 |
if len(error_msg) < 300:
|
|
Packit Service |
a31ea6 |
if len(error_msg) == 0 or error_msg[-1] == '\n':
|
|
Packit Service |
a31ea6 |
error_msg = error_msg + " >>" + str
|
|
Packit Service |
a31ea6 |
else:
|
|
Packit Service |
a31ea6 |
error_msg = error_msg + str
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
libxml2.registerErrorHandler(errorHandler, None)
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
def testXInclude(filename, id):
|
|
Packit Service |
a31ea6 |
global error_nr
|
|
Packit Service |
a31ea6 |
global error_msg
|
|
Packit Service |
a31ea6 |
global log
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
error_nr = 0
|
|
Packit Service |
a31ea6 |
error_msg = ''
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
print "testXInclude(%s, %s)" % (filename, id)
|
|
Packit Service |
a31ea6 |
return 1
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
def runTest(test, basedir):
|
|
Packit Service |
a31ea6 |
global test_nr
|
|
Packit Service |
a31ea6 |
global test_failed
|
|
Packit Service |
a31ea6 |
global test_error
|
|
Packit Service |
a31ea6 |
global test_succeed
|
|
Packit Service |
a31ea6 |
global error_msg
|
|
Packit Service |
a31ea6 |
global log
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
fatal_error = 0
|
|
Packit Service |
a31ea6 |
uri = test.prop('href')
|
|
Packit Service |
a31ea6 |
id = test.prop('id')
|
|
Packit Service |
a31ea6 |
type = test.prop('type')
|
|
Packit Service |
a31ea6 |
if uri == None:
|
|
Packit Service |
a31ea6 |
print "Test without ID:", uri
|
|
Packit Service |
a31ea6 |
return -1
|
|
Packit Service |
a31ea6 |
if id == None:
|
|
Packit Service |
a31ea6 |
print "Test without URI:", id
|
|
Packit Service |
a31ea6 |
return -1
|
|
Packit Service |
a31ea6 |
if type == None:
|
|
Packit Service |
a31ea6 |
print "Test without URI:", id
|
|
Packit Service |
a31ea6 |
return -1
|
|
Packit Service |
a31ea6 |
if basedir != None:
|
|
Packit Service |
a31ea6 |
URI = basedir + "/" + uri
|
|
Packit Service |
a31ea6 |
else:
|
|
Packit Service |
a31ea6 |
URI = uri
|
|
Packit Service |
a31ea6 |
if os.access(URI, os.R_OK) == 0:
|
|
Packit Service |
a31ea6 |
print "Test %s missing: base %s uri %s" % (URI, basedir, uri)
|
|
Packit Service |
a31ea6 |
return -1
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
expected = None
|
|
Packit Service |
a31ea6 |
outputfile = None
|
|
Packit Service |
a31ea6 |
diff = None
|
|
Packit Service |
a31ea6 |
if type != 'error':
|
|
Packit Service |
a31ea6 |
output = test.xpathEval('string(output)')
|
|
Packit Service |
a31ea6 |
if output == 'No output file.':
|
|
Packit Service |
a31ea6 |
output = None
|
|
Packit Service |
a31ea6 |
if output == '':
|
|
Packit Service |
a31ea6 |
output = None
|
|
Packit Service |
a31ea6 |
if output != None:
|
|
Packit Service |
a31ea6 |
if basedir != None:
|
|
Packit Service |
a31ea6 |
output = basedir + "/" + output
|
|
Packit Service |
a31ea6 |
if os.access(output, os.R_OK) == 0:
|
|
Packit Service |
a31ea6 |
print "Result for %s missing: %s" % (id, output)
|
|
Packit Service |
a31ea6 |
output = None
|
|
Packit Service |
a31ea6 |
else:
|
|
Packit Service |
a31ea6 |
try:
|
|
Packit Service |
a31ea6 |
f = open(output)
|
|
Packit Service |
a31ea6 |
expected = f.read()
|
|
Packit Service |
a31ea6 |
outputfile = output
|
|
Packit Service |
a31ea6 |
except:
|
|
Packit Service |
a31ea6 |
print "Result for %s unreadable: %s" % (id, output)
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
try:
|
|
Packit Service |
a31ea6 |
# print "testing %s" % (URI)
|
|
Packit Service |
a31ea6 |
doc = libxml2.parseFile(URI)
|
|
Packit Service |
a31ea6 |
except:
|
|
Packit Service |
a31ea6 |
doc = None
|
|
Packit Service |
a31ea6 |
if doc != None:
|
|
Packit Service |
a31ea6 |
res = doc.xincludeProcess()
|
|
Packit Service |
a31ea6 |
if res >= 0 and expected != None:
|
|
Packit Service |
a31ea6 |
result = doc.serialize()
|
|
Packit Service |
a31ea6 |
if result != expected:
|
|
Packit Service |
a31ea6 |
print "Result for %s differs" % (id)
|
|
Packit Service |
a31ea6 |
open("xinclude.res", "w").write(result)
|
|
Packit Service |
a31ea6 |
diff = os.popen("diff %s xinclude.res" % outputfile).read()
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
doc.freeDoc()
|
|
Packit Service |
a31ea6 |
else:
|
|
Packit Service |
a31ea6 |
print "Failed to parse %s" % (URI)
|
|
Packit Service |
a31ea6 |
res = -1
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
test_nr = test_nr + 1
|
|
Packit Service |
a31ea6 |
if type == 'success':
|
|
Packit Service |
a31ea6 |
if res > 0:
|
|
Packit Service |
a31ea6 |
test_succeed = test_succeed + 1
|
|
Packit Service |
a31ea6 |
elif res == 0:
|
|
Packit Service |
a31ea6 |
test_failed = test_failed + 1
|
|
Packit Service |
a31ea6 |
print "Test %s: no substitution done ???" % (id)
|
|
Packit Service |
a31ea6 |
elif res < 0:
|
|
Packit Service |
a31ea6 |
test_error = test_error + 1
|
|
Packit Service |
a31ea6 |
print "Test %s: failed valid XInclude processing" % (id)
|
|
Packit Service |
a31ea6 |
elif type == 'error':
|
|
Packit Service |
a31ea6 |
if res > 0:
|
|
Packit Service |
a31ea6 |
test_error = test_error + 1
|
|
Packit Service |
a31ea6 |
print "Test %s: failed to detect invalid XInclude processing" % (id)
|
|
Packit Service |
a31ea6 |
elif res == 0:
|
|
Packit Service |
a31ea6 |
test_failed = test_failed + 1
|
|
Packit Service |
a31ea6 |
print "Test %s: Invalid but no substitution done" % (id)
|
|
Packit Service |
a31ea6 |
elif res < 0:
|
|
Packit Service |
a31ea6 |
test_succeed = test_succeed + 1
|
|
Packit Service |
a31ea6 |
elif type == 'optional':
|
|
Packit Service |
a31ea6 |
if res > 0:
|
|
Packit Service |
a31ea6 |
test_succeed = test_succeed + 1
|
|
Packit Service |
a31ea6 |
else:
|
|
Packit Service |
a31ea6 |
print "Test %s: failed optional test" % (id)
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
# Log the ontext
|
|
Packit Service |
a31ea6 |
if res != 1:
|
|
Packit Service |
a31ea6 |
log.write("Test ID %s\n" % (id))
|
|
Packit Service |
a31ea6 |
log.write(" File: %s\n" % (URI))
|
|
Packit Service |
a31ea6 |
content = string.strip(test.content)
|
|
Packit Service |
a31ea6 |
while content[-1] == '\n':
|
|
Packit Service |
a31ea6 |
content = content[0:-1]
|
|
Packit Service |
a31ea6 |
log.write(" %s:%s\n\n" % (type, content))
|
|
Packit Service |
a31ea6 |
if error_msg != '':
|
|
Packit Service |
a31ea6 |
log.write(" ----\n%s ----\n" % (error_msg))
|
|
Packit Service |
a31ea6 |
error_msg = ''
|
|
Packit Service |
a31ea6 |
log.write("\n")
|
|
Packit Service |
a31ea6 |
if diff != None:
|
|
Packit Service |
a31ea6 |
log.write("diff from test %s:\n" %(id))
|
|
Packit Service |
a31ea6 |
log.write(" -----------\n%s\n -----------\n" % (diff));
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
return 0
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
def runTestCases(case):
|
|
Packit Service |
a31ea6 |
creator = case.prop('creator')
|
|
Packit Service |
a31ea6 |
if creator != None:
|
|
Packit Service |
a31ea6 |
print "=>", creator
|
|
Packit Service |
a31ea6 |
base = case.getBase(None)
|
|
Packit Service |
a31ea6 |
basedir = case.prop('basedir')
|
|
Packit Service |
a31ea6 |
if basedir != None:
|
|
Packit Service |
a31ea6 |
base = libxml2.buildURI(basedir, base)
|
|
Packit Service |
a31ea6 |
test = case.children
|
|
Packit Service |
a31ea6 |
while test != None:
|
|
Packit Service |
a31ea6 |
if test.name == 'testcase':
|
|
Packit Service |
a31ea6 |
runTest(test, base)
|
|
Packit Service |
a31ea6 |
if test.name == 'testcases':
|
|
Packit Service |
a31ea6 |
runTestCases(test)
|
|
Packit Service |
a31ea6 |
test = test.next
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
conf = libxml2.parseFile(CONF)
|
|
Packit Service |
a31ea6 |
if conf == None:
|
|
Packit Service |
a31ea6 |
print "Unable to load %s" % CONF
|
|
Packit Service |
a31ea6 |
sys.exit(1)
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
testsuite = conf.getRootElement()
|
|
Packit Service |
a31ea6 |
if testsuite.name != 'testsuite':
|
|
Packit Service |
a31ea6 |
print "Expecting TESTSUITE root element: aborting"
|
|
Packit Service |
a31ea6 |
sys.exit(1)
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
profile = testsuite.prop('PROFILE')
|
|
Packit Service |
a31ea6 |
if profile != None:
|
|
Packit Service |
a31ea6 |
print profile
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
start = time.time()
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
case = testsuite.children
|
|
Packit Service |
a31ea6 |
while case != None:
|
|
Packit Service |
a31ea6 |
if case.name == 'testcases':
|
|
Packit Service |
a31ea6 |
old_test_nr = test_nr
|
|
Packit Service |
a31ea6 |
old_test_succeed = test_succeed
|
|
Packit Service |
a31ea6 |
old_test_failed = test_failed
|
|
Packit Service |
a31ea6 |
old_test_error = test_error
|
|
Packit Service |
a31ea6 |
runTestCases(case)
|
|
Packit Service |
a31ea6 |
print " Ran %d tests: %d suceeded, %d failed and %d generated an error" % (
|
|
Packit Service |
a31ea6 |
test_nr - old_test_nr, test_succeed - old_test_succeed,
|
|
Packit Service |
a31ea6 |
test_failed - old_test_failed, test_error - old_test_error)
|
|
Packit Service |
a31ea6 |
case = case.next
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
conf.freeDoc()
|
|
Packit Service |
a31ea6 |
log.close()
|
|
Packit Service |
a31ea6 |
|
|
Packit Service |
a31ea6 |
print "Ran %d tests: %d suceeded, %d failed and %d generated an error in %.2f s." % (
|
|
Packit Service |
a31ea6 |
test_nr, test_succeed, test_failed, test_error, time.time() - start)
|