Changeset: 4fb77664ac16 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4fb77664ac16
Modified Files:
testing/Mtest.py.in
Branch: default
Log Message:
Merge with Aug2011 branch.
diffs (truncated from 818 to 300 lines):
diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in
--- a/testing/Mtest.py.in
+++ b/testing/Mtest.py.in
@@ -51,7 +51,9 @@ import select
import Mfilter
import fnmatch
+procdebug = False
verbose = False
+quiet = False
# Python 2.3 doesn't know about os.devnull...
try:
@@ -981,13 +983,19 @@ def AddSubToHtmlIndex (env, TSTDIR, diff
return td
### AddSubToHtmlIndex (env, TSTDIR, diff) #
-def SkipTest(env, TST, EXT, REASON) :
+def SkipTest(env, TST, EXT, REASON, length) :
TSTDIR = env['TSTDIR']
TEXT = "Skipping test %s%s %s" % (TST, EXT, REASON)
- if not env['QUIET']:
+ if quiet:
+ STDOUT.write("-")
+ elif verbose:
Warn(TEXT)
else:
- STDOUT.write("-")
+ if REASON.startswith('as '):
+ REASON = REASON[3:]
+ if REASON.endswith('.'):
+ REASON = REASON[:-1]
+ STDOUT.write('%s%-*s skipped (%s)\n' % (prompt(), length, TST, REASON))
f = open("."+TST+".SKIPPED","w")
f.write("\n%s Warning: %s\n\n" % (THISFILE, TEXT))
f.close()
@@ -1060,6 +1068,12 @@ def PerformDir(env, testdir, testlist, B
Warn("No tests found in '"+TSTSRCDIR+"`; skipping directory!")
return td, elem
+ # find length of longest test name
+ length = 0
+ for tst in testlist:
+ if len(tst[0]) > length:
+ length = len(tst[0])
+
env['TSTDB'] = TSTDB
env['TSTDIR'] = TSTDIR
env['TSTSRCDIR'] = TSTSRCDIR
@@ -1101,9 +1115,11 @@ def PerformDir(env, testdir, testlist, B
body = []
oktests = []
+ if not verbose and not quiet:
+ print '\nRunning in %s' % TSTDIR
for TST,COND in testlist:
os.environ['TST'] = TST
- tt, FtOut, FtErr, bodyline = RunTest(env, TST, BusyPorts, COND,
oktests)
+ tt, FtOut, FtErr, bodyline = RunTest(env, TST, BusyPorts, COND,
oktests, length)
if tt:
t = "%7.3f" % tt
else:
@@ -1308,7 +1324,7 @@ def GetBitsAndOIDsAndModsAndStaticAndThr
TSTPREF = env['TSTPREF']
cmd = splitcommand(env['exe']['Mserver'][1])
cmd.append('--dbname=%s' % TSTPREF)
- if verbose:
+ if procdebug:
print 'GetBitsAndOIDsAndModsAndStaticAndThreads: starting process "%s"
(inpipe, outpipe, errpipe)\n' % '" "'.join(cmd)
proc = subprocess.Popen(cmd, stdin = subprocess.PIPE, stdout =
subprocess.PIPE, stderr = subprocess.PIPE, universal_newlines = True)
t = Timer(float(par['TIMEOUT']), killProc, args = [proc, proc.stderr, cmd])
@@ -1335,12 +1351,12 @@ def GetBitsAndOIDsAndModsAndStaticAndThr
##module("NoModule");
qOut, qErr = proc.communicate(input = input)
t.cancel()
- if verbose:
+ if procdebug:
print 'GetBitsAndOIDsAndModsAndStaticAndThreads: process exited
"%s" (%s)\n' % ('" "'.join(cmd), proc.returncode)
except KeyboardInterrupt:
t.cancel()
killProc(proc, proc.stderr, cmd)
- if verbose:
+ if procdebug:
print 'GetBitsAndOIDsAndModsAndStaticAndThreads: process killed
"%s"\n' % '" "'.join(cmd)
raise
env['TST_MODS'] = []
@@ -1429,7 +1445,7 @@ def CheckBATs(env, TST, TSTDB) :
cmd = splitcommand(env['exe']['Mserver'][1])
cmd.append('--dbname=%s' % TSTDB)
- if verbose:
+ if procdebug:
print 'CheckBATs: starting process "%s" (inpipe, outpipe, errpipe)\n'
% '" "'.join(cmd)
proc = subprocess.Popen(cmd, stdin = subprocess.PIPE, stdout =
subprocess.PIPE, stderr = subprocess.PIPE, universal_newlines = True)
t = Timer(float(par['TIMEOUT']), killProc, args = [proc, proc.stderr, cmd])
@@ -1451,12 +1467,12 @@ def CheckBATs(env, TST, TSTDB) :
quit();
''')
t.cancel()
- if verbose:
+ if procdebug:
print 'CheckBATs: process exited "%s" (%s)\n' % ('" "'.join(cmd),
proc.returncode)
except KeyboardInterrupt:
t.cancel()
killProc(proc, proc.stderr, cmd)
- if verbose:
+ if procdebug:
print 'CheckBATs: process killed "%s"\n' % '" "'.join(cmd)
raise
TST_BATS = []
@@ -1498,11 +1514,11 @@ def CheckTests(env, TST, oktests):
### CheckTests(env, TST, oktests) #
def StartAt(cmd) :
- if verbose:
+ if procdebug:
print 'StartAt: starting process "%s" (inpipe, outpipe, errpipe)\n' %
cmd
proc = subprocess.Popen(cmd, shell = True, stdin = subprocess.PIPE, stdout
= subprocess.PIPE, stderr = subprocess.PIPE, universal_newlines = True)
qOut, qErr = proc.communicate()
- if verbose:
+ if procdebug:
print 'StartAt: starting exited "%s"\n' % cmd
return qOut.split('\n', 1)[0].strip()
### StartAt(cmd) #
@@ -1553,7 +1569,7 @@ def StableOutErr(env,par,TST,SYST,RELEAS
return STABLEout, STABLEerr
### StableOutErr(env,par,TST,SYST,RELEASE,DIST,VERSION) #
-def RunTest(env, TST, BusyPorts, COND, oktests) :
+def RunTest(env, TST, BusyPorts, COND, oktests, length) :
Failed = F_SKIP
FailedOut = F_SKIP
FailedErr = F_SKIP
@@ -1566,8 +1582,6 @@ def RunTest(env, TST, BusyPorts, COND, o
os.chdir(TSTSRCDIR)
elem = None
- quiet = env['QUIET']
-
TX = 0
EXT = CALL = SERVER = ""
x = isexecutable(TST)
@@ -1611,12 +1625,12 @@ def RunTest(env, TST, BusyPorts, COND, o
else:
i = TST.rfind('.')
if i > 0:
- return RunTest(env, TST[:i], BusyPorts, COND, oktests)
+ return RunTest(env, TST[:i], BusyPorts, COND, oktests, length)
EXT = CALL = SERVER = ""
if COND and not CONDITIONALS.has_key(COND):
- elem = SkipTest(env, TST, EXT, "as conditional '%s' is unknown." %
COND)
+ elem = SkipTest(env, TST, EXT, "as conditional '%s' is unknown." %
COND, length)
elif COND and not CONDITIONALS[COND]:
- elem = SkipTest(env, TST, EXT, "as conditional '%s' does not
hold." % COND)
+ elem = SkipTest(env, TST, EXT, "as conditional '%s' does not
hold." % COND, length)
elif os.name == "nt":
ErrMsg("test missing:
'"+os.path.join(TSTSRCDIR,TST)+".(exe|com|bat|cmd|py|mal|malC|sql)`")
#TODO:
@@ -1636,36 +1650,36 @@ def RunTest(env, TST, BusyPorts, COND, o
os.chdir(TSTTRGDIR)
if COND and not CONDITIONALS.has_key(COND):
- elem = SkipTest(env, TST, EXT, "as conditional '%s' is unknown." %
COND)
+ elem = SkipTest(env, TST, EXT, "as conditional '%s' is unknown." %
COND, length)
elif COND and not CONDITIONALS[COND]:
- elem = SkipTest(env, TST, EXT, "as conditional '%s' does not hold." %
COND)
+ elem = SkipTest(env, TST, EXT, "as conditional '%s' does not hold." %
COND, length)
elif MissingTests:
- elem = SkipTest(env, TST, EXT, "as required test%s '%s' failed." %
(len(MissingTests) != 1 and 's' or '', "', '".join(MissingTests)))
+ elem = SkipTest(env, TST, EXT, "as required test%s '%s' failed." %
(len(MissingTests) != 1 and 's' or '', "', '".join(MissingTests)), length)
elif EXT == ".malC" and not env['exe']['MAL_Client'][0]:
- elem = SkipTest(env, TST, EXT, "as "+env['MALCLIENT'].split(None,
1)[0]+" is not available.")
+ elem = SkipTest(env, TST, EXT, "as "+env['MALCLIENT'].split(None,
1)[0]+" is not available.", length)
elif EXT == ".sql" and not env['exe']['SQL_Client'][0]:
- elem = SkipTest(env, TST, EXT, "as "+env['SQLCLIENT'].split(None,
1)[0]+" is not available.")
+ elem = SkipTest(env, TST, EXT, "as "+env['SQLCLIENT'].split(None,
1)[0]+" is not available.", length)
elif EXT == ".sql" and not env['exe']['SQL_Dump'][0]:
- elem = SkipTest(env, TST, EXT, "as "+env['SQLDUMP'].split(None,
1)[0]+" is not available.")
+ elem = SkipTest(env, TST, EXT, "as "+env['SQLDUMP'].split(None,
1)[0]+" is not available.", length)
elif SERVER in ["MAL", "SQL"] and not env['exe']['Mserver'][0]:
- elem = SkipTest(env, TST, EXT, "as "+env['MSERVER'].split(None,
1)[0]+" is not available.")
+ elem = SkipTest(env, TST, EXT, "as "+env['MSERVER'].split(None,
1)[0]+" is not available.", length)
elif EXT == ".malS" and not env['exe']['Mserver'][0]:
- elem = SkipTest(env, TST, EXT, "as "+env['MSERVER'].split(None,
1)[0]+" is not available.")
+ elem = SkipTest(env, TST, EXT, "as "+env['MSERVER'].split(None,
1)[0]+" is not available.", length)
elif CALL == "python" and not env['exe']['python'][0]:
- elem = SkipTest(env, TST, EXT, "as python is not available.")
+ elem = SkipTest(env, TST, EXT, "as python is not available.", length)
#TODO:
#elif [ "$EXT" = "java" -a ! "`type -path java`" ] ; then
- #elem = SkipTest(env, TST, EXT, "as java is not in $PATH.")
+ #elem = SkipTest(env, TST, EXT, "as java is not in $PATH.", length)
elif MissingMods:
- elem = SkipTest(env, TST, EXT, "as modules '"+str(MissingMods)+"` are
missing.")
+ elem = SkipTest(env, TST, EXT, "as modules '"+str(MissingMods)+"` are
missing.", length)
elif MissingBATs:
- elem = SkipTest(env, TST, EXT, "as BATs '"+str(MissingBATs)+"` are
missing in database '"+TSTDB+"`.")
+ elem = SkipTest(env, TST, EXT, "as BATs '"+str(MissingBATs)+"` are
missing in database '"+TSTDB+"`.", length)
elif CALL == "malCXp":
- elem = SkipTest(env, TST, EXT, "as multiple MAL clients in parallel
are currently not supported by "+THISFILE+".")
+ elem = SkipTest(env, TST, EXT, "as multiple MAL clients in parallel
are currently not supported by "+THISFILE+".", length)
elif CALL == "sqlXp":
- elem = SkipTest(env, TST, EXT, "as multiple SQL clients in parallel
are currently not supported by "+THISFILE+".")
+ elem = SkipTest(env, TST, EXT, "as multiple SQL clients in parallel
are currently not supported by "+THISFILE+".", length)
elif SERVER in ["MAL", "SQL"] and "MAPI" in BusyPorts:
- elem = SkipTest(env, TST, EXT, "as MAPIPORT=%s is not available." %
(env['MAPIPORT']))
+ elem = SkipTest(env, TST, EXT, "as MAPIPORT=%s is not available." %
(env['MAPIPORT']), length)
else:
test = re.compile("^"+TST+"((_[sp][0-9][0-9])?\..*)?$", re.MULTILINE)
for f in os.listdir(RELSRCDIR):
@@ -1679,7 +1693,7 @@ def RunTest(env, TST, BusyPorts, COND, o
# Check for available sockets and block them until we're ready to run
the actual test
MAPIsockets, reason = CheckSocket2(env, "MAPI") #, SrvrErr)
if MAPIsockets is None:
- elem = SkipTest(env, TST, EXT, "as "+reason)
+ elem = SkipTest(env, TST, EXT, "as "+reason, length)
return TX,Failed,Failed,elem
if os.path.isfile(TST+EXT+".src") and not os.path.isfile(TST+EXT):
@@ -1693,7 +1707,7 @@ def RunTest(env, TST, BusyPorts, COND, o
ErrMsg("SymlinkOrCopy('%s','%s') in '%s' failed with #%d:
'%s'."
% (TSTSRC,TST+EXT,os.getcwd(),IOerrNo, IOerrStr))
else:
- elem = SkipTest(env, TST, EXT+".src", "as source file
'"+TSTSRC+"` is missing.")
+ elem = SkipTest(env, TST, EXT+".src", "as source file
'"+TSTSRC+"` is missing.", length)
# Release reserved sockets before bailing out
MAPIsockets[0].close()
MAPIsockets[1].close()
@@ -1806,7 +1820,6 @@ def RunTest(env, TST, BusyPorts, COND, o
MkillUsers = (WHAT0+" "+WHAT1).replace('\\','')
MkillUsersAT = "echo "+WHAT+" 2>/dev/null | at now + 1 minute
2>&1 | awk '/^[Jj]ob/{print $2}'"
- #if THISFILE == "Mtest.py":
TestOutFile = TST+".test.out"
TestErrFile = TST+".test.err"
TestOut = open(TestOutFile,"w")
@@ -1817,7 +1830,7 @@ def RunTest(env, TST, BusyPorts, COND, o
TestErr.close()
t0 = time.time()
- tres = DoIt(env, SERVER, CALL, TST, EXT, PRELUDE, TestOutFile,
TestErrFile, STIMEOUT, CTIMEOUT, TIMEOUT, MkillUsersAT, ME, MAPIsockets)
+ tres = DoIt(env, SERVER, CALL, TST, EXT, PRELUDE, TestOutFile,
TestErrFile, STIMEOUT, CTIMEOUT, TIMEOUT, MkillUsersAT, ME, MAPIsockets, length)
t1 = time.time()
TX = t1 - t0
@@ -1884,28 +1897,28 @@ def RunTest(env, TST, BusyPorts, COND, o
if timeout == F_TIME:
if quiet:
STDOUT.write("\n%s : Timeout!\n" % TST)
- else:
+ elif verbose:
STDOUT.write("(Timeout!) ")
if recursion == F_RECU:
if quiet:
STDOUT.write("\n%s : Recursion!\n" % TST)
- else:
+ elif verbose:
STDOUT.write("(Recursion!) ")
if killed == F_KILL:
if quiet:
STDOUT.write("\n%s : Killed!\n" % TST)
- else:
+ elif verbose:
STDOUT.write("(Killed!) ")
if segfaulted == F_SEGV:
if quiet:
STDOUT.write("\n%s : Crashed!\n" % TST)
- else:
+ elif verbose:
STDOUT.write("(Crashed!) ")
- if not quiet:
+ if verbose:
STDOUT.write("\n")
try:
@@ -1918,149 +1931,184 @@ def RunTest(env, TST, BusyPorts, COND, o
env['exe']['Mtimeout'] = env['exe']['Mtimeout'][0], 'Mtimeout
-timeout %s ' % str(par['TIMEOUT'])
SetExecEnv(env['exe'],0)
- if THISFILE == "Mtest.py":
+ try:
+ Mfilter.mFilter(TST+STABLEout,par['IGNORE'])
+ Mfilter.mFilter(TST+STABLEerr,par['IGNORE'])
+ Mfilter.mFilter(TST+".test.out",par['IGNORE'])
+ Mfilter.mFilter(TST+".test.err",par['IGNORE'])
+ except:
+ Warn("mFilter failed\n")
+ pass
+
+ if REV:
+ hglink = ' (id <a href="%s%s/%s/%s%s">%s</a>)' % (URLPREFIX,
url(TSTDIR), TSTSUFF, TST, EXT, REV)
+ else:
+ hglink = ''
+ diff_html = open('%s.out.diff.html' % TST,"w")
+ diff_html.write('<!--MajorDiffs-->\n')
+ diff_html.close()
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list