Windows test suite timeouts
Mads Kiilerich
mads at kiilerich.com
Fri Jan 4 20:04:45 CST 2013
Matt Harbison wrote, On 01/05/2013 01:35 AM:
> Mads Kiilerich wrote:
>> On 01/04/2013 04:06 AM, Matt Harbison wrote:
>>> Every so often, I've noticed that some tests on Windows will take a
>>> really long time, and then timeout:
>>>
>>> $ python run-tests.py -i test-largefiles.t
>>>
>>> ERROR: c:\Users\Matt\Projects\hg\tests\test-largefiles.t timed out
>>> t
>>> Failed test-largefiles.t: timed out
>>> # Ran 1 tests, 0 skipped, 1 failed.
>>>
>>> It seems like once this occurs, it will occur every time until a
>>> reboot. Some other tests (I randomly tried
>>> test-subrepo-deep-nested-change.t) run fine even after the timeout. I
>>> haven't noticed a pattern of events leading up to the problem.
>>>
>>> Is there something I can do to debug this?
>>
>> You could try to run run-tests with -d. That will show you were it is
>> hanging and give a hint what the problem could be. One reason could be a
>> hanging hg serve.
>>
>> /Mads
>
> This is curious... I got a ton out output and then it came grinding to
> a halt:
>
> + hg pull ../e
> pulling from ../e
> searching for changes
> adding changesets
> adding manifests
> adding file changes
> added 2 changesets with 4 changes to 4 files (+1 heads)
> (run 'hg heads' to see heads, 'hg merge' to merge)
> caching new largefiles
> 2 largefiles cached
> + echo SALT1357343164.18 1147 0
> SALT1357343164.18 1147 0
> + hg merge
> merging sub/large4
> largefile sub/large4 has a merge conflict
> keep (l)ocal or take (o)ther?
>
> (the test file has 'l' hardcoded in it at the end of that last line).
> I answered 'l' and ...
That is probably another bug. Tests are usually run with a closed stdin
which isn't interactive, and ui.promptchoice() will thus automatically
choose the default. The same should happen when running with -d.
Try something like this:
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -746,7 +746,8 @@ def run(cmd, wd, options, replacements):
Return a tuple (exitcode, output). output is None in debug mode."""
# TODO: Use subprocess.Popen if we're running on Python 2.4
if options.debug:
- proc = subprocess.Popen(cmd, shell=True, cwd=wd)
+ proc = subprocess.Popen(cmd, shell=True, cwd=wd,
stdin=subprocess.PIPE)
+ proc.stdin.close()
ret = proc.wait()
return (ret, None)
I guess the non-debug hangs you see could be caused by how run-tests
reads from the process without using .communicate(). You could try
something like this and see if it helps:
@@ -759,11 +760,8 @@ def run(cmd, wd, options, replacements):
killdaemons()
return ret
- output = ''
- proc.tochild.close()
-
try:
- output = proc.fromchild.read()
+ output, err = proc.communicate()
except KeyboardInterrupt:
vlog('# Handling keyboard interrupt')
cleanup()
/Mads
More information about the Mercurial-devel
mailing list