[PATCH 2 of 2] tests: fix run-tests when there's a bad #if in a test

Augie Fackler raf at durin42.com
Mon Jun 5 09:14:59 EDT 2017


> On Jun 4, 2017, at 23:56, Matt Harbison <mharbison72 at gmail.com> wrote:
> 
> On Tue, 30 May 2017 21:12:31 -0400, Augie Fackler <raf at durin42.com> wrote:
> 
>> # HG changeset patch
>> # User Augie Fackler <augie at google.com>
>> # Date 1496191723 14400
>> #      Tue May 30 20:48:43 2017 -0400
>> # Node ID 48ea485539377729a711959c15ac4262550234fc
>> # Parent  361bf17d190dbd3410be4b7fd8ff4d27ddb48739
>> tests: fix run-tests when there's a bad #if in a test
>> 
>> That has (and still does) caused the test to be skipped, but without
>> this fix it was possible to exit this block of code without clearing
>> the output channel, which poisoned the channel list for later test
>> method runs. Fix this by always clearing the channel in a finally.
>> 
>> The test for this is somewhat unfortunate. Sadly, I couldn't get a way
>> to reproduce this with less than 2n+1 test cases, nor could I get it
>> to reproduce reliably without the sleep statements. It's also crucial
>> that the test with the broken #if be smaller (in terms of byte count)
>> than the sleeping tests, so that it runs first and would poison the
>> channel list prior to another test needing that entry from the list.
> 
> Any thoughts about this Windows failure?  Unlike the recent SSH fix where the output order only changed sometimes, this seems consistent.
> 
> diff --git a/tests/test-run-tests.t b/tests/test-run-tests.t
> --- a/tests/test-run-tests.t
> +++ b/tests/test-run-tests.t
> @@ -920,10 +920,10 @@
>   > EOF
>   > done
>   $ rt -j 2
> -  ....
> +  ....skipped: unknown feature: notarealhghavefeature\r (esc)
> +
> +
>   # Ran 5 tests, 0 skipped, 0 warned, 0 failed.
> -  skipped: unknown feature: notarealhghavefeature
> -
>   $ cd ..
>   $ rm -rf broken

Looks like it's probably some sort of locking issue in run-tests.py. Ugh.

> 
> 
>> diff --git a/tests/run-tests.py b/tests/run-tests.py
>> --- a/tests/run-tests.py
>> +++ b/tests/run-tests.py
>> @@ -1778,10 +1778,11 @@ class TestSuite(unittest.TestSuite):
>>             except: # re-raises
>>                 done.put(('!', test, 'run-test raised an error, see traceback'))
>>                 raise
>> -            try:
>> -                channels[channel] = ''
>> -            except IndexError:
>> -                pass
>> +            finally:
>> +                try:
>> +                    channels[channel] = ''
>> +                except IndexError:
>> +                    pass
>>        def stat():
>>             count = 0
>> diff --git a/tests/test-run-tests.t b/tests/test-run-tests.t
>> --- a/tests/test-run-tests.t
>> +++ b/tests/test-run-tests.t
>> @@ -903,6 +903,30 @@ support for bisecting failed tests autom
>>  $ cd ..
>> +Test a broken #if statement doesn't break run-tests threading.
>> +==============================================================
>> +  $ mkdir broken
>> +  $ cd broken
>> +  $ cat > test-broken.t <<EOF
>> +  > true
>> +  > #if notarealhghavefeature
>> +  >   $ false
>> +  > #endif
>> +  > EOF
>> +  $ for f in 1 2 3 4 ; do
>> +  > cat > test-works-$f.t <<EOF
>> +  > This is test case $f
>> +  >   $ sleep 1
>> +  > EOF
>> +  > done
>> +  $ rt -j 2
>> +  ....
>> +  # Ran 5 tests, 0 skipped, 0 warned, 0 failed.
>> +  skipped: unknown feature: notarealhghavefeature
>> +
>> +  $ cd ..
>> +  $ rm -rf broken
>> +
>> Test cases in .t files
>> ======================
>>   $ mkdir cases
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at mercurial-scm.org
>> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list