##// END OF EJS Templates
py3: fix test-dirstate-race.t...
py3: fix test-dirstate-race.t Differential Revision: https://phab.mercurial-scm.org/D5106

File last commit:

r39962:c4a3d3c6 default
r40332:e787d97e default
Show More
test-logtoprocess.t
124 lines | 3.4 KiB | text/troff | Tads3Lexer
/ tests / test-logtoprocess.t
Matt Harbison
test-logtoprocess: don't run on Windows...
r32915 #require no-windows
Jun Wu
test-logtoprocess: use cat to wait for outputs...
r30991 ATTENTION: logtoprocess runs commands asynchronously. Be sure to append "| cat"
to hg commands, to wait for the output, if you want to test its output.
Otherwise the test will be flaky.
Martijn Pieters
logtoprocess: new experimental extension...
r28901 Test if logtoprocess correctly captures command-related log calls.
$ hg init
$ cat > $TESTTMP/foocommand.py << EOF
Augie Fackler
tests: update test-logtoprocess to pass our import checker
r33968 > from __future__ import absolute_import
Yuya Nishihara
registrar: move cmdutil.command to registrar module (API)...
r32337 > from mercurial import registrar
Martijn Pieters
logtoprocess: new experimental extension...
r28901 > cmdtable = {}
Yuya Nishihara
registrar: move cmdutil.command to registrar module (API)...
r32337 > command = registrar.command(cmdtable)
Boris Feld
configitems: register the test 'logtoprocess.foo' config
r34765 > configtable = {}
> configitem = registrar.configitem(configtable)
> configitem('logtoprocess', 'foo',
> default=None,
> )
Pulkit Goyal
py3: make sure commands name are bytes in tests
r33097 > @command(b'foo', [])
Martijn Pieters
logtoprocess: new experimental extension...
r28901 > def foo(ui, repo):
> ui.log('foo', 'a message: %(bar)s\n', bar='spam')
> EOF
Simon Farnsworth
ui: provide a mechanism to track and log blocked time...
r30976 $ cp $HGRCPATH $HGRCPATH.bak
Martijn Pieters
logtoprocess: new experimental extension...
r28901 $ cat >> $HGRCPATH << EOF
> [extensions]
> logtoprocess=
> foocommand=$TESTTMP/foocommand.py
> [logtoprocess]
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 > command=(echo 'logtoprocess command output:';
Martijn Pieters
logtoprocess: new experimental extension...
r28901 > echo "\$EVENT";
> echo "\$MSG1";
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 > echo "\$MSG2") > $TESTTMP/command.log
> commandfinish=(echo 'logtoprocess commandfinish output:';
Martijn Pieters
logtoprocess: new experimental extension...
r28901 > echo "\$EVENT";
> echo "\$MSG1";
> echo "\$MSG2";
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 > echo "\$MSG3") > $TESTTMP/commandfinish.log
> foo=(echo 'logtoprocess foo output:';
Martijn Pieters
logtoprocess: new experimental extension...
r28901 > echo "\$EVENT";
> echo "\$MSG1";
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 > echo "\$OPT_BAR") > $TESTTMP/foo.log
Martijn Pieters
logtoprocess: new experimental extension...
r28901 > EOF
Running a command triggers both a ui.log('command') and a
ui.log('commandfinish') call. The foo command also uses ui.log.
Jun Wu
test-logtoprocess: use cat to wait for outputs...
r30991 Use sort to avoid ordering issues between the various processes we spawn:
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 $ hg foo
$ sleep 0.2
$ cat $TESTTMP/command.log | sort
Martijn Pieters
logtoprocess: new experimental extension...
r28901
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 command
foo
foo
logtoprocess command output:
#if no-chg
$ cat $TESTTMP/commandfinish.log | sort
Martijn Pieters
logtoprocess: new experimental extension...
r28901 0
commandfinish
foo
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 foo exited 0 after * seconds (glob)
logtoprocess commandfinish output:
$ cat $TESTTMP/foo.log | sort
a message: spam
Martijn Pieters
logtoprocess: new experimental extension...
r28901 foo
logtoprocess foo output:
spam
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 #endif
Simon Farnsworth
ui: provide a mechanism to track and log blocked time...
r30976
Confirm that logging blocked time catches stdio properly:
$ cp $HGRCPATH.bak $HGRCPATH
$ cat >> $HGRCPATH << EOF
> [extensions]
> logtoprocess=
> pager=
> [logtoprocess]
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 > uiblocked=echo "\$EVENT stdio \$OPT_STDIO_BLOCKED ms command \$OPT_COMMAND_DURATION ms" > $TESTTMP/uiblocked.log
Simon Farnsworth
ui: provide a mechanism to track and log blocked time...
r30976 > [ui]
> logblockedtimes=True
> EOF
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 $ hg log
$ sleep 0.2
$ cat $TESTTMP/uiblocked.log
Simon Farnsworth
ui: log time spent blocked on stdio...
r30978 uiblocked stdio [0-9]+.[0-9]* ms command [0-9]+.[0-9]* ms (re)
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961
Try to confirm that pager wait on logtoprocess:
Add a script that wait on a file to appears for 5 seconds, if it sees it touch
another file or die after 5 seconds. If the scripts is awaited by hg, the
script will die after the timeout before we could touch the file and the
resulting file will not exists. If not, we will touch the file and see it.
$ cat > $TESTTMP/wait-output.sh << EOF
> #!/bin/sh
> for i in \`$TESTDIR/seq.py 50\`; do
> if [ -f "$TESTTMP/wait-for-touched" ];
> then
> touch "$TESTTMP/touched";
> break;
> else
> sleep 0.1;
> fi
> done
> EOF
$ chmod +x $TESTTMP/wait-output.sh
$ cat >> $HGRCPATH << EOF
> [extensions]
> logtoprocess=
> pager=
> [logtoprocess]
> commandfinish=$TESTTMP/wait-output.sh
> EOF
$ hg version -q --pager=always
Mercurial Distributed SCM (version *) (glob)
$ touch $TESTTMP/wait-for-touched
$ sleep 0.2
$ test -f $TESTTMP/touched && echo "SUCCESS Pager is not waiting on ltp" || echo "FAIL Pager is waiting on ltp"
Boris Feld
logtoprocess: connect all fds to /dev/null to avoid bad interaction with pager...
r39962 SUCCESS Pager is not waiting on ltp