tests/test-worker.t
author Manuel Jacob <me@manueljacob.de>
Mon, 11 Jul 2022 01:51:20 +0200
branchstable
changeset 49378 094a5fa3cf52
parent 48876 42d2b31cee0b
child 49877 950c39918bd2
permissions -rw-r--r--
procutil: make stream detection in make_line_buffered more correct and strict In make_line_buffered(), we don’t want to wrap the stream if we know that lines get flushed to the underlying raw stream already. Previously, the heuristic was too optimistic. It assumed that any stream which is not an instance of io.BufferedIOBase doesn’t need wrapping. However, there are buffered streams that aren’t instances of io.BufferedIOBase, like Mercurial’s own winstdout. The new logic is different in two ways: First, only for the check, if unwraps any combination of WriteAllWrapper and winstdout. Second, it skips wrapping the stream only if it is an instance of io.RawIOBase (or already wrapped). If it is an instance of io.BufferedIOBase, it gets wrapped. In any other case, the function raises an exception. This ensures that, if an unknown stream is passed or we add another wrapper in the future, we don’t wrap the stream if it’s already line buffered or not wrap the stream if it’s not line buffered. In fact, this was already helpful during development of this change. Without it, I possibly would have forgot that WriteAllWrapper needs to be ignored for the check, leading to unnecessary wrapping if stdout is unbuffered. The alternative would have been to always wrap unknown streams. However, I don’t think that anyone would benefit from being less strict. We can expect streams from the standard library to be subclassing either io.RawIOBase or io.BufferedIOBase, so running Mercurial in the standard way should not regress by this change. Py2exe might replace sys.stdout and sys.stderr, but that currently breaks Mercurial anyway and also these streams don’t claim to be interactive, so this function is not called for them.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31696
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
     1
Test UI worker interaction
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
     2
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
     3
  $ cat > t.py <<EOF
44116
b5aaa09be18c py3: suppress unraisable exceptions in test-worker.t
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43402
diff changeset
     4
  > import sys
32114
44a98a2ea431 test-worker: exercise more about "killworkers" situation
Jun Wu <quark@fb.com>
parents: 32113
diff changeset
     5
  > import time
31696
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
     6
  > from mercurial import (
32041
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
     7
  >     error,
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32114
diff changeset
     8
  >     registrar,
31696
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
     9
  >     ui as uimod,
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    10
  >     worker,
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    11
  > )
44116
b5aaa09be18c py3: suppress unraisable exceptions in test-worker.t
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43402
diff changeset
    12
  > sys.unraisablehook = lambda x: None
32041
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    13
  > def abort(ui, args):
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    14
  >     if args[0] == 0:
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    15
  >         # by first worker for test stability
36182
4f0439981a8a py3: add b'' prefixes in test-worker.t
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33097
diff changeset
    16
  >         raise error.Abort(b'known exception')
32041
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    17
  >     return runme(ui, [])
32043
b844d0d367e2 worker: print traceback for uncaught exception unconditionally
Yuya Nishihara <yuya@tcha.org>
parents: 32042
diff changeset
    18
  > def exc(ui, args):
b844d0d367e2 worker: print traceback for uncaught exception unconditionally
Yuya Nishihara <yuya@tcha.org>
parents: 32042
diff changeset
    19
  >     if args[0] == 0:
b844d0d367e2 worker: print traceback for uncaught exception unconditionally
Yuya Nishihara <yuya@tcha.org>
parents: 32042
diff changeset
    20
  >         # by first worker for test stability
b844d0d367e2 worker: print traceback for uncaught exception unconditionally
Yuya Nishihara <yuya@tcha.org>
parents: 32042
diff changeset
    21
  >         raise Exception('unknown exception')
b844d0d367e2 worker: print traceback for uncaught exception unconditionally
Yuya Nishihara <yuya@tcha.org>
parents: 32042
diff changeset
    22
  >     return runme(ui, [])
31696
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    23
  > def runme(ui, args):
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    24
  >     for arg in args:
36182
4f0439981a8a py3: add b'' prefixes in test-worker.t
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33097
diff changeset
    25
  >         ui.status(b'run\n')
31696
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    26
  >         yield 1, arg
32114
44a98a2ea431 test-worker: exercise more about "killworkers" situation
Jun Wu <quark@fb.com>
parents: 32113
diff changeset
    27
  >     time.sleep(0.1) # easier to trigger killworkers code path
32041
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    28
  > functable = {
36182
4f0439981a8a py3: add b'' prefixes in test-worker.t
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33097
diff changeset
    29
  >     b'abort': abort,
4f0439981a8a py3: add b'' prefixes in test-worker.t
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33097
diff changeset
    30
  >     b'exc': exc,
4f0439981a8a py3: add b'' prefixes in test-worker.t
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33097
diff changeset
    31
  >     b'runme': runme,
32041
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    32
  > }
31696
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    33
  > cmdtable = {}
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32114
diff changeset
    34
  > command = registrar.command(cmdtable)
36182
4f0439981a8a py3: add b'' prefixes in test-worker.t
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33097
diff changeset
    35
  > @command(b'test', [], b'hg test [COST] [FUNC]')
4f0439981a8a py3: add b'' prefixes in test-worker.t
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33097
diff changeset
    36
  > def t(ui, repo, cost=1.0, func=b'runme'):
31696
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    37
  >     cost = float(cost)
32041
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    38
  >     func = functable[func]
36182
4f0439981a8a py3: add b'' prefixes in test-worker.t
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33097
diff changeset
    39
  >     ui.status(b'start\n')
32041
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    40
  >     runs = worker.worker(ui, cost, func, (ui,), range(8))
31696
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    41
  >     for n, i in runs:
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    42
  >         pass
36182
4f0439981a8a py3: add b'' prefixes in test-worker.t
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33097
diff changeset
    43
  >     ui.status(b'done\n')
31696
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    44
  > EOF
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    45
  $ abspath=`pwd`/t.py
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    46
  $ hg init
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    47
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    48
Run tests with worker enable by forcing a heigh cost
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    49
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    50
  $ hg --config "extensions.t=$abspath" test 100000.0
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    51
  start
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    52
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    53
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    54
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    55
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    56
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    57
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    58
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    59
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    60
  done
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    61
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    62
Run tests without worker by forcing a low cost
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    63
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    64
  $ hg --config "extensions.t=$abspath" test 0.0000001
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    65
  start
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    66
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    67
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    68
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    69
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    70
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    71
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    72
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    73
  run
9d3d56aa1a9f worker: flush ui buffers before running the worker
David Soria Parra <davidsp@fb.com>
parents:
diff changeset
    74
  done
32041
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    75
32061
6e0368b6e0bb test-worker: disable tests of forked workers on Windows
Yuya Nishihara <yuya@tcha.org>
parents: 32043
diff changeset
    76
#if no-windows
6e0368b6e0bb test-worker: disable tests of forked workers on Windows
Yuya Nishihara <yuya@tcha.org>
parents: 32043
diff changeset
    77
32041
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    78
Known exception should be caught, but printed if --traceback is enabled
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    79
32114
44a98a2ea431 test-worker: exercise more about "killworkers" situation
Jun Wu <quark@fb.com>
parents: 32113
diff changeset
    80
  $ hg --config "extensions.t=$abspath" --config 'worker.numcpus=8' \
44a98a2ea431 test-worker: exercise more about "killworkers" situation
Jun Wu <quark@fb.com>
parents: 32113
diff changeset
    81
  > test 100000.0 abort 2>&1
32041
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    82
  start
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    83
  abort: known exception
32042
8f8ad0139b8b worker: propagate exit code to main process
Yuya Nishihara <yuya@tcha.org>
parents: 32041
diff changeset
    84
  [255]
32041
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31696
diff changeset
    85
32114
44a98a2ea431 test-worker: exercise more about "killworkers" situation
Jun Wu <quark@fb.com>
parents: 32113
diff changeset
    86
  $ hg --config "extensions.t=$abspath" --config 'worker.numcpus=8' \
45825
8f07f5a9c3de worker: raise exception instead of calling sys.exit() with child's code
Martin von Zweigbergk <martinvonz@google.com>
parents: 44248
diff changeset
    87
  > test 100000.0 abort --traceback 2>&1 | egrep '(WorkerError|Abort)'
41521
bad59bbd9bec py3: add alternate output on Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36182
diff changeset
    88
      raise error.Abort(b'known exception')
43402
40bf3d7ecc42 py3: add a __str__ method to Abort
Denis Laxalde <denis@laxalde.org>
parents: 41521
diff changeset
    89
  mercurial.error.Abort: known exception (py3 !)
45825
8f07f5a9c3de worker: raise exception instead of calling sys.exit() with child's code
Martin von Zweigbergk <martinvonz@google.com>
parents: 44248
diff changeset
    90
      raise error.WorkerError(status)
45903
64faa55716f4 tests: make test-worker.t pass on py2
Martin von Zweigbergk <martinvonz@google.com>
parents: 45825
diff changeset
    91
  mercurial.error.WorkerError: 255 (py3 !)
32043
b844d0d367e2 worker: print traceback for uncaught exception unconditionally
Yuya Nishihara <yuya@tcha.org>
parents: 32042
diff changeset
    92
b844d0d367e2 worker: print traceback for uncaught exception unconditionally
Yuya Nishihara <yuya@tcha.org>
parents: 32042
diff changeset
    93
Traceback must be printed for unknown exceptions
b844d0d367e2 worker: print traceback for uncaught exception unconditionally
Yuya Nishihara <yuya@tcha.org>
parents: 32042
diff changeset
    94
32114
44a98a2ea431 test-worker: exercise more about "killworkers" situation
Jun Wu <quark@fb.com>
parents: 32113
diff changeset
    95
  $ hg --config "extensions.t=$abspath" --config 'worker.numcpus=8' \
32113
9f0c055eebae test-worker: capture tracebacks more reliably
Jun Wu <quark@fb.com>
parents: 32112
diff changeset
    96
  > test 100000.0 exc 2>&1 | grep '^Exception'
9f0c055eebae test-worker: capture tracebacks more reliably
Jun Wu <quark@fb.com>
parents: 32112
diff changeset
    97
  Exception: unknown exception
32061
6e0368b6e0bb test-worker: disable tests of forked workers on Windows
Yuya Nishihara <yuya@tcha.org>
parents: 32043
diff changeset
    98
32112
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
    99
Workers should not do cleanups in all cases
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   100
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   101
  $ cat > $TESTTMP/detectcleanup.py <<EOF
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   102
  > import atexit
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   103
  > import os
44116
b5aaa09be18c py3: suppress unraisable exceptions in test-worker.t
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43402
diff changeset
   104
  > import sys
32112
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   105
  > import time
44116
b5aaa09be18c py3: suppress unraisable exceptions in test-worker.t
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43402
diff changeset
   106
  > sys.unraisablehook = lambda x: None
32112
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   107
  > oldfork = os.fork
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   108
  > count = 0
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   109
  > parentpid = os.getpid()
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   110
  > def delayedfork():
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   111
  >     global count
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   112
  >     count += 1
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   113
  >     pid = oldfork()
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   114
  >     # make it easier to test SIGTERM hitting other workers when they have
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   115
  >     # not set up error handling yet.
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   116
  >     if count > 1 and pid == 0:
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   117
  >         time.sleep(0.1)
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   118
  >     return pid
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   119
  > os.fork = delayedfork
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   120
  > def cleanup():
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   121
  >     if os.getpid() != parentpid:
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   122
  >         os.write(1, 'should never happen\n')
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   123
  > atexit.register(cleanup)
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   124
  > EOF
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   125
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   126
  $ hg --config "extensions.t=$abspath" --config worker.numcpus=8 --config \
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   127
  > "extensions.d=$TESTTMP/detectcleanup.py" test 100000 abort
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   128
  start
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   129
  abort: known exception
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   130
  [255]
31763785094b worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com>
parents: 32061
diff changeset
   131
44248
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   132
Do not crash on partially read result
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   133
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   134
  $ cat > $TESTTMP/detecttruncated.py <<EOF
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   135
  > import os
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   136
  > import sys
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   137
  > import time
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   138
  > sys.unraisablehook = lambda x: None
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   139
  > oldwrite = os.write
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   140
  > def splitwrite(fd, string):
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   141
  >     ret = oldwrite(fd, string[:9])
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   142
  >     if ret == 9:
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   143
  >         time.sleep(0.1)
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   144
  >         ret += oldwrite(fd, string[9:])
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   145
  >     return ret
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   146
  > os.write = splitwrite
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   147
  > EOF
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   148
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   149
  $ hg --config "extensions.t=$abspath" --config worker.numcpus=8 --config \
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   150
  > "extensions.d=$TESTTMP/detecttruncated.py" test 100000.0
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   151
  start
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   152
  run
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   153
  run
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   154
  run
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   155
  run
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   156
  run
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   157
  run
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   158
  run
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   159
  run
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   160
  done
12491abf93bd worker: manually buffer reads from pickle stream
Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
parents: 44116
diff changeset
   161
32061
6e0368b6e0bb test-worker: disable tests of forked workers on Windows
Yuya Nishihara <yuya@tcha.org>
parents: 32043
diff changeset
   162
#endif