tests: the cd-level issue
Mads Kiilerich
mads at kiilerich.com
Mon Jun 11 20:37:00 CDT 2012
Adrian Buehlmann wrote, On 06/11/2012 01:12 PM:
> On 2012-06-11 12:45, Mads Kiilerich wrote:
>> On 11/06/12 11:43, Adrian Buehlmann wrote:
>>> On 2012-06-11 11:21, Pierre-Yves David wrote:
>>>> If you are creating a new alias for cd; why not just add an explicite
>>>> check and abortion when getting out of the scope ?
>> ...
>>
>>> diff --git a/tests/run-tests.py b/tests/run-tests.py
>>> --- a/tests/run-tests.py
>>> +++ b/tests/run-tests.py
>>> @@ -659,6 +659,9 @@
>>> prepos = pos
>>> pos = n
>>> addsalt(n, False)
>>> + cmd = l[4:].split()
>>> + if len(cmd) == 2 and cmd[0] == 'cd':
>>> + l = ' $ cd %s || exit 1\n' % cmd[1]
>>> script.append(l[4:])
>>> elif l.startswith('> '): # continuations
>>> after.setdefault(prepos, []).append(l)
>>> This only exits if the cd fails, but that's certainly an improvement. If
>>> a cd fails, the test should better not proceed creating artifacts, so
>>> that's a nice change.
>>>
>>> FWIW, this change doesn't help with cd .. going too high up though.
>> It is simple to extend it to validating that the cd doesn't "escape". I
>> did that to detect some problems ... or to prove that there were no
>> problems left.
> That check you inserted only triggers, if the cd command tries to cd
> into directory that doesn't exist.
>
> So, that check is IMHO no prove that the are no cd-level problems left.
Correct.
tests: verify that 'cd' never go outside $TESTTMP
diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -661,7 +661,9 @@
addsalt(n, False)
cmd = l[4:].split()
if len(cmd) == 2 and cmd[0] == 'cd':
- l = ' $ cd %s || exit 1\n' % cmd[1]
+ l = (' $ cd %s || exit 1; '
+ 'case %s in $PWD/*) echo escaped to $PWD;; esac\n'
+ % (cmd[1], wd))
script.append(l[4:])
elif l.startswith(' > '): # continuations
after.setdefault(prepos, []).append(l)
tests: verify that tests end up in $TESTTMP
diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -683,6 +683,8 @@
if skipping is not None:
after.setdefault(pos, []).append(' !!! missing #endif\n')
addsalt(n + 1, False)
+ script.append('if [ "$PWD" != "%s" ]; then echo $PWD; fi\n' % wd)
+ addsalt(n + 2, False)
# Write out the script and execute it
fd, name = tempfile.mkstemp(suffix='hg-tst')
>
>> That is however a runtime check just to check for a
>> static 'programming' error in the test. I don't think that's worth it.
> Well, I think such a check could be useful. If you don't think it is
> worth it, then I'm asking a bit why the tests got into a state that
> requred a cleanup like you did here:
>
> http://hg.intevation.org/mercurial/crew/rev/6ef3107c661e
Running a quick test with a local hack 'on demand' is IMO good enough
for something like this. You are welcome to clean it up and make it
cross platform ... and make a control mechanism or a commit description
that justify that it is worth running all the time.
/Mads
More information about the Mercurial-devel
mailing list