# HG changeset patch # User timeless # Date 1448411945 0 # Node ID a4e3dec3010e6c3b1556e90c0834837e4b12a955 # Parent dfdac09b57dd629198731fb94a71352d287f091b run-tests: add --slowtimeout and use it for slow tests diff -r dfdac09b57dd -r a4e3dec3010e tests/run-tests.py --- a/tests/run-tests.py Sat Oct 31 22:17:05 2015 +0900 +++ b/tests/run-tests.py Wed Nov 25 00:39:05 2015 +0000 @@ -154,6 +154,7 @@ defaults = { 'jobs': ('HGTEST_JOBS', 1), 'timeout': ('HGTEST_TIMEOUT', 180), + 'slowtimeout': ('HGTEST_SLOWTIMEOUT', 500), 'port': ('HGTEST_PORT', 20059), 'shell': ('HGTEST_SHELL', 'sh'), } @@ -236,6 +237,9 @@ parser.add_option("-t", "--timeout", type="int", help="kill errant tests after TIMEOUT seconds" " (default: $%s or %d)" % defaults['timeout']) + parser.add_option("--slowtimeout", type="int", + help="kill errant slow tests after SLOWTIMEOUT seconds" + " (default: $%s or %d)" % defaults['slowtimeout']) parser.add_option("--time", action="store_true", help="time how long each test takes") parser.add_option("--json", action="store_true", @@ -327,7 +331,11 @@ if options.timeout != defaults['timeout']: sys.stderr.write( 'warning: --timeout option ignored with --debug\n') + if options.slowtimeout != defaults['slowtimeout']: + sys.stderr.write( + 'warning: --slowtimeout option ignored with --debug\n') options.timeout = 0 + options.slowtimeout = 0 if options.py3k_warnings: if PYTHON3: parser.error( @@ -430,7 +438,8 @@ debug=False, timeout=defaults['timeout'], startport=defaults['port'], extraconfigopts=None, - py3kwarnings=False, shell=None): + py3kwarnings=False, shell=None, + slowtimeout=defaults['slowtimeout']): """Create a test from parameters. path is the full path to the file defining the test. @@ -444,7 +453,9 @@ output. timeout controls the maximum run time of the test. It is ignored when - debug is True. + debug is True. See slowtimeout for tests with #require slow. + + slowtimeout overrides timeout if the test has #require slow. startport controls the starting port number to use for this test. Each test will reserve 3 port numbers for execution. It is the caller's @@ -469,6 +480,7 @@ self._keeptmpdir = keeptmpdir self._debug = debug self._timeout = timeout + self._slowtimeout = slowtimeout self._startport = startport self._extraconfigopts = extraconfigopts or [] self._py3kwarnings = py3kwarnings @@ -922,7 +934,12 @@ print(stdout) sys.exit(1) - return ret == 0 + if ret != 0: + return False + + if 'slow' in reqs: + self._timeout = self._slowtimeout + return True def _parsetest(self, lines): # We generate a shell script which outputs unique markers to line diff -r dfdac09b57dd -r a4e3dec3010e tests/test-run-tests.t --- a/tests/test-run-tests.t Sat Oct 31 22:17:05 2015 +0900 +++ b/tests/test-run-tests.t Wed Nov 25 00:39:05 2015 +0000 @@ -401,6 +401,36 @@ . # Ran 1 tests, 0 skipped, 0 warned, 0 failed. +timeouts +======== + $ cat > test-timeout.t < $ sleep 2 + > $ echo pass + > pass + > EOF + > echo '#require slow' > test-slow-timeout.t + > cat test-timeout.t >> test-slow-timeout.t + $ run-tests.py --with-hg=`which hg` --timeout=1 --slowtimeout=3 \ + > test-timeout.t test-slow-timeout.t + s + ERROR: test-timeout.t output changed + ! + Skipped test-slow-timeout.t: skipped + Failed test-timeout.t: timed out + # Ran 1 tests, 1 skipped, 0 warned, 1 failed. + python hash seed: * (glob) + [1] + $ run-tests.py --with-hg=`which hg` --timeout=1 --slowtimeout=3 \ + > test-timeout.t test-slow-timeout.t --allow-slow-tests + . + ERROR: test-timeout.t output changed + ! + Failed test-timeout.t: timed out + # Ran 2 tests, 0 skipped, 0 warned, 1 failed. + python hash seed: * (glob) + [1] + $ rm test-timeout.t test-slow-timeout.t + test for --time ==================