Changeset: af9694c58d35 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=af9694c58d35
Modified Files:
testing/Mtest.py.in
Branch: Jun2016
Log Message:
Make testing interruptible.
When testing gets interrupted, we now still produce the HTML pages.
diffs (164 lines):
diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in
--- a/testing/Mtest.py.in
+++ b/testing/Mtest.py.in
@@ -1133,6 +1133,7 @@ def find_test_dirs(thisdir) :
### find_test_dirs(thisdir) #
def PerformDir(env, testdir, testlist, BusyPorts) :
+ interrupted = False
td = 0
elem = None
FdOut = F_SKIP
@@ -1168,7 +1169,7 @@ def PerformDir(env, testdir, testlist, B
testlist.append((tst,cond))
if not testlist:
Warn("No tests found in '%s`; skipping directory!" % TSTSRCDIR)
- return td, elem, max(FdOut, FdErr)
+ return td, elem, max(FdOut, FdErr), interrupted
# find length of longest test name
length = 0
@@ -1213,7 +1214,7 @@ def PerformDir(env, testdir, testlist, B
Warn("database '%s` exists, but destroying it failed;
skipping tests in '%s`!" % (TSTDB, TSTSRCDIR))
#TODO:
# add "something" to HTML output
- return td, elem, max(FdOut, FdErr)
+ return td, elem, max(FdOut, FdErr), interrupted
if os.path.isabs(LogDBdir) and not os.path.exists(LogDBdir):
try:
os.makedirs(LogDBdir)
@@ -1221,7 +1222,7 @@ def PerformDir(env, testdir, testlist, B
Warn("creating database '%s` failed; skipping tests in
'%s`!" % (TSTDB, TSTSRCDIR))
#TODO:
# add "something" to HTML output
- return td, elem, max(FdOut, FdErr)
+ return td, elem, max(FdOut, FdErr), interrupted
if not os.path.exists(TSTTRGDIR):
#TODO: set mode to umask
os.makedirs(TSTTRGDIR)
@@ -1232,27 +1233,31 @@ def PerformDir(env, testdir, testlist, B
if not verbose and not quiet:
print('\nRunning in %s' % TSTDIR)
alllinks = []
- for TST,COND in testlist:
- os.environ['TST'] = TST
- tt, FtOut, FtErr, bodyline, reason, links = RunTest(env, TST,
BusyPorts, COND, oktests, length)
- alllinks.extend(links)
- if tt:
- t = "%7.3f" % tt
- else:
- t = '-.---'
- TIMES.append((TSTDIR, TST, t, tt, FtOut, FtErr, reason))
- td += tt
- FdOut = max(FdOut,FtOut)
- FdErr = max(FdErr,FtErr)
- if bodyline is not None:
- if FtOut <= F_OK and FtErr <= F_OK:
- body_good.append(bodyline)
+ try:
+ for TST,COND in testlist:
+ os.environ['TST'] = TST
+ tt, FtOut, FtErr, bodyline, reason, links = RunTest(env, TST,
BusyPorts, COND, oktests, length)
+ alllinks.extend(links)
+ if tt:
+ t = "%7.3f" % tt
else:
- body_bad.append(bodyline)
- if FtOut in (F_OK, F_WARN) and FtErr in (F_OK, F_WARN):
- oktests.append(TST)
- if global_timeout and start_time + global_timeout < time.time():
- break
+ t = '-.---'
+ TIMES.append((TSTDIR, TST, t, tt, FtOut, FtErr, reason))
+ td += tt
+ FdOut = max(FdOut,FtOut)
+ FdErr = max(FdErr,FtErr)
+ if bodyline is not None:
+ if FtOut <= F_OK and FtErr <= F_OK:
+ body_good.append(bodyline)
+ else:
+ body_bad.append(bodyline)
+ if FtOut in (F_OK, F_WARN) and FtErr in (F_OK, F_WARN):
+ oktests.append(TST)
+ if global_timeout and start_time + global_timeout <
time.time():
+ break
+ except KeyboardInterrupt:
+ print('\nInterrupted')
+ interrupted = True
TIMES.append((TSTDIR, '', "%7.3f" % td, td, FdOut, FdErr, None))
if testweb:
os.chdir(TSTTRGDIR)
@@ -1296,12 +1301,12 @@ def PerformDir(env, testdir, testlist, B
else: # THISFILE == "Mapprove.py"
if not os.path.exists(TSTTRGDIR):
Warn("Output directory '%s` missing; skipping directory!" %
TSTTRGDIR)
- return td, elem, max(FdOut, FdErr)
+ return td, elem, max(FdOut, FdErr), interrupted
for TST,COND in testlist:
td += ApproveOutput(env, TST)
- return td, elem, max(FdOut, FdErr)
+ return td, elem, max(FdOut, FdErr), interrupted
### PerformDir(env, testdir, testlist, BusyPorts) #
def ApproveOutput (env, TST) :
@@ -4160,32 +4165,38 @@ def main(argv) :
t_ = 0
body_good = []
body_bad = []
- if len(testdirs) == 1:
- if testlist:
- tsts = "tests "+str(testlist)
- else:
- tsts = "all tests"
- if verbose:
- print("\nRunning %s in directory %s.\n" % (tsts , testdirs[0]))
- t_, elem, diff = PerformDir(env, testdirs[0], testlist, BusyPorts)
- if elem is not None:
- if diff <= F_OK:
- body_good.append(elem)
+ try:
+ if len(testdirs) == 1:
+ if testlist:
+ tsts = "tests "+str(testlist)
else:
- body_bad.append(elem)
- else:
- if verbose:
- print("\nRunning all tests in directories %s.\n" %
str(testdirs))
- for d in testdirs:
- t, elem, diff = PerformDir(env, d, [], BusyPorts)
- t_ = t_ + t
+ tsts = "all tests"
+ if verbose:
+ print("\nRunning %s in directory %s.\n" % (tsts ,
testdirs[0]))
+ t_, elem, diff, interrupted = PerformDir(env, testdirs[0],
testlist, BusyPorts)
if elem is not None:
if diff <= F_OK:
body_good.append(elem)
else:
body_bad.append(elem)
- if global_timeout and start_time + global_timeout <
time.time():
- break
+ else:
+ if verbose:
+ print("\nRunning all tests in directories %s.\n" %
str(testdirs))
+ for d in testdirs:
+ t, elem, diff, interrupted = PerformDir(env, d, [],
BusyPorts)
+ t_ = t_ + t
+ if elem is not None:
+ if diff <= F_OK:
+ body_good.append(elem)
+ else:
+ body_bad.append(elem)
+ if interrupted:
+ break
+ if global_timeout and start_time + global_timeout <
time.time():
+ break
+ except KeyboardInterrupt:
+ # if we get interrupted between directories, we still want output
+ pass
body = body_bad + body_good
if THISFILE == "Mtest.py":
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list