test-logtoprocess.t
122 lines
| 3.4 KiB
| text/troff
|
Tads3Lexer
/ tests / test-logtoprocess.t
Matt Harbison
|
r32915 | #require no-windows | ||
Jun Wu
|
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
|
r28901 | Test if logtoprocess correctly captures command-related log calls. | ||
$ hg init | ||||
$ cat > $TESTTMP/foocommand.py << EOF | ||||
Yuya Nishihara
|
r32337 | > from mercurial import registrar | ||
Martijn Pieters
|
r28901 | > cmdtable = {} | ||
Yuya Nishihara
|
r32337 | > command = registrar.command(cmdtable) | ||
Boris Feld
|
r34765 | > configtable = {} | ||
> configitem = registrar.configitem(configtable) | ||||
Yuya Nishihara
|
r40655 | > configitem(b'logtoprocess', b'foo', | ||
Boris Feld
|
r34765 | > default=None, | ||
> ) | ||||
Boris Feld
|
r40438 | > @command(b'foobar', []) | ||
Martijn Pieters
|
r28901 | > def foo(ui, repo): | ||
Yuya Nishihara
|
r40655 | > ui.log(b'foo', b'a message: %s\n', b'spam') | ||
Martijn Pieters
|
r28901 | > EOF | ||
Simon Farnsworth
|
r30976 | $ cp $HGRCPATH $HGRCPATH.bak | ||
Martijn Pieters
|
r28901 | $ cat >> $HGRCPATH << EOF | ||
> [extensions] | ||||
> logtoprocess= | ||||
> foocommand=$TESTTMP/foocommand.py | ||||
> [logtoprocess] | ||||
Boris Feld
|
r39961 | > command=(echo 'logtoprocess command output:'; | ||
Martijn Pieters
|
r28901 | > echo "\$EVENT"; | ||
Yuya Nishihara
|
r40656 | > echo "\$MSG1") > $TESTTMP/command.log | ||
Boris Feld
|
r39961 | > commandfinish=(echo 'logtoprocess commandfinish output:'; | ||
Martijn Pieters
|
r28901 | > echo "\$EVENT"; | ||
> echo "\$MSG1"; | ||||
Boris Feld
|
r40438 | > echo "canonical: \$OPT_CANONICAL_COMMAND") > $TESTTMP/commandfinish.log | ||
Boris Feld
|
r39961 | > foo=(echo 'logtoprocess foo output:'; | ||
Martijn Pieters
|
r28901 | > echo "\$EVENT"; | ||
Yuya Nishihara
|
r40656 | > echo "\$MSG1") > $TESTTMP/foo.log | ||
Martijn Pieters
|
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
|
r30991 | Use sort to avoid ordering issues between the various processes we spawn: | ||
Boris Feld
|
r40438 | $ hg fooba | ||
Augie Fackler
|
r40413 | $ sleep 1 | ||
Boris Feld
|
r39961 | $ cat $TESTTMP/command.log | sort | ||
Martijn Pieters
|
r28901 | |||
Boris Feld
|
r39961 | command | ||
Boris Feld
|
r40438 | fooba | ||
Boris Feld
|
r39961 | logtoprocess command output: | ||
#if no-chg | ||||
$ cat $TESTTMP/commandfinish.log | sort | ||||
Boris Feld
|
r40438 | canonical: foobar | ||
Martijn Pieters
|
r28901 | commandfinish | ||
Boris Feld
|
r40438 | fooba exited 0 after * seconds (glob) | ||
Boris Feld
|
r39961 | logtoprocess commandfinish output: | ||
$ cat $TESTTMP/foo.log | sort | ||||
a message: spam | ||||
Martijn Pieters
|
r28901 | foo | ||
logtoprocess foo output: | ||||
Boris Feld
|
r39961 | #endif | ||
Simon Farnsworth
|
r30976 | |||
Confirm that logging blocked time catches stdio properly: | ||||
$ cp $HGRCPATH.bak $HGRCPATH | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [extensions] | ||||
> logtoprocess= | ||||
> pager= | ||||
> [logtoprocess] | ||||
Boris Feld
|
r39961 | > uiblocked=echo "\$EVENT stdio \$OPT_STDIO_BLOCKED ms command \$OPT_COMMAND_DURATION ms" > $TESTTMP/uiblocked.log | ||
Simon Farnsworth
|
r30976 | > [ui] | ||
> logblockedtimes=True | ||||
> EOF | ||||
Boris Feld
|
r39961 | $ hg log | ||
Augie Fackler
|
r40413 | $ sleep 1 | ||
Boris Feld
|
r39961 | $ cat $TESTTMP/uiblocked.log | ||
Simon Farnsworth
|
r30978 | uiblocked stdio [0-9]+.[0-9]* ms command [0-9]+.[0-9]* ms (re) | ||
Boris Feld
|
r39961 | |||
Try to confirm that pager wait on logtoprocess: | ||||
Arseniy Alekseyev
|
r50387 | Add a script that waits on a file to appear. If the script is awaited by hg, | ||
the script will die after the timeout before we could touch the file and the | ||||
resulting file will not exist. If not, we will touch the file and see it. | ||||
Boris Feld
|
r39961 | |||
Boris Feld
|
r40908 | $ cat >> fakepager.py <<EOF | ||
> import sys | ||||
> printed = False | ||||
> for line in sys.stdin: | ||||
> sys.stdout.write(line) | ||||
> printed = True | ||||
> if not printed: | ||||
> sys.stdout.write('paged empty output!\n') | ||||
> EOF | ||||
Boris Feld
|
r39961 | $ cat > $TESTTMP/wait-output.sh << EOF | ||
> #!/bin/sh | ||||
Arseniy Alekseyev
|
r50387 | > set -eu | ||
> "$RUNTESTDIR/testlib/wait-on-file" 10 "$TESTTMP/wait-for-touched" | ||||
> touch "$TESTTMP/touched" | ||||
Boris Feld
|
r39961 | > EOF | ||
$ chmod +x $TESTTMP/wait-output.sh | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [extensions] | ||||
> logtoprocess= | ||||
> pager= | ||||
Boris Feld
|
r40908 | > [pager] | ||
> pager = "$PYTHON" $TESTTMP/fakepager.py | ||||
Boris Feld
|
r39961 | > [logtoprocess] | ||
> commandfinish=$TESTTMP/wait-output.sh | ||||
> EOF | ||||
$ hg version -q --pager=always | ||||
Mercurial Distributed SCM (version *) (glob) | ||||
$ touch $TESTTMP/wait-for-touched | ||||
Arseniy Alekseyev
|
r50387 | $ "$RUNTESTDIR/testlib/wait-on-file" 5 "$TESTTMP/touched" | ||
Boris Feld
|
r39961 | $ test -f $TESTTMP/touched && echo "SUCCESS Pager is not waiting on ltp" || echo "FAIL Pager is waiting on ltp" | ||
Boris Feld
|
r39962 | SUCCESS Pager is not waiting on ltp | ||