[PATCH] run-tests: test result shows when a failed test could not start a server

Simon Heimberg simohe at besonet.ch
Thu Jan 16 14:58:40 CST 2014


# HG changeset patch
# User Simon Heimberg <simohe at besonet.ch>
# Date 1385413246 -3600
# Node ID afdcb3c8d7aae39b02ea208c180e36a2a6602bf0
# Parent  e2068d5d4289fe61f2e5739d62d92fa3c0c2f285
run-tests: test result shows when a failed test could not start a server

Failing to start a server happens regularly, at least on windows buildbot.
Such a failure often has nothing to do with the test, but with the environment.
But half the test output can change because some data is missing. Therefore this
is worth an extended error message.

Detect the server failure in the diff output because it is most reliable
there. Checking the output only does not show if the server failure was
expected.

 Old failure message when server start failed:
Failed test-serve.t: output changed

 New message:
Failed test-serve.t: serve failed and output changed

diff -r e2068d5d4289 -r afdcb3c8d7aa tests/run-tests.py
--- a/tests/run-tests.py	Son Nov 17 20:15:28 2013 +0100
+++ b/tests/run-tests.py	Mon Nov 25 22:00:46 2013 +0100
@@ -300,8 +300,14 @@
 
 def showdiff(expected, output, ref, err):
     print
+    servefail = False
     for line in difflib.unified_diff(expected, output, ref, err):
         sys.stdout.write(line)
+        if not servefail and line.startswith(
+                             '+  abort: child process failed to start'):
+            servefail = True
+    return {'servefail': servefail}
+
 
 verbose = False
 def vlog(*msg):
@@ -1022,17 +1028,21 @@
     elif ret == 'timeout':
         result = fail("timed out", ret)
     elif out != refout:
+        info = {}
         if not options.nodiff:
             iolock.acquire()
             if options.view:
                 os.system("%s %s %s" % (options.view, ref, err))
             else:
-                showdiff(refout, out, ref, err)
+                info = showdiff(refout, out, ref, err)
             iolock.release()
+        msg = ""
+        if info.get('servefail'): msg += "serve failed and "
         if ret:
-            result = fail("output changed and " + describe(ret), ret)
+            msg += "output changed and " + describe(ret)
         else:
-            result = fail("output changed", ret)
+            msg += "output changed"
+        result = fail(msg, ret)
     elif ret:
         result = fail(describe(ret), ret)
     else:


More information about the Mercurial-devel mailing list