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

Reply via email to