sapling/eden/scm/tests/test-worker.t
Xavier Deguillard c074611dee worker: remove the forkers
Summary:
Now that the workers are in Rust, we no longer need the forker version in
Python. For now, the Python LFS extension still uses the threaded worker so
keep this one for now, when that extension will be removed we can remove the
rest of the worker code.

In theory, not all repository would benefit from the Rust workers, but these
are not supported at FB due to not being remotefilelog based.

Reviewed By: DurhamG

Differential Revision: D21987295

fbshipit-source-id: d17b9730651671608cf13f7abe6a9bb32251e140
2020-06-23 18:47:44 -07:00

95 lines
2.2 KiB
Raku

#chg-compatible
Test UI worker interaction
$ cat > t.py <<EOF
> from __future__ import absolute_import, print_function
> import time
> from edenscm.mercurial import (
> error,
> registrar,
> ui as uimod,
> worker,
> )
> def abort(ui, args):
> if len(args) > 0 and args[0] == 0:
> # by first worker for test stability
> raise error.Abort('known exception')
> return runme(ui, [])
> def exc(ui, args):
> if len(args) > 0 and args[0] == 0:
> # by first worker for test stability
> raise Exception('unknown exception')
> return runme(ui, [])
> def runme(ui, args):
> for arg in args:
> ui.status('run\n')
> yield 1, 0, arg
> time.sleep(0.1) # easier to trigger killworkers code path
> functable = {
> 'abort': abort,
> 'exc': exc,
> 'runme': runme,
> }
> cmdtable = {}
> command = registrar.command(cmdtable)
> @command('test', [], 'hg test [COST] [FUNC]')
> def t(ui, repo, cost=1.0, func='runme'):
> cost = float(cost)
> func = functable[func]
> ui.status('start\n')
> runs = worker.worker(ui, cost, func, (ui,), range(8))
> for n, size, i in runs:
> pass
> ui.status('done\n')
> EOF
$ abspath=`pwd`/t.py
$ hg init
Run tests with worker enable by forcing a heigh cost
$ hg --config "extensions.t=$abspath" test 100000.0
start
run
run
run
run
run
run
run
run
done
Run tests without worker by forcing a low cost
$ hg --config "extensions.t=$abspath" test 0.0000001
start
run
run
run
run
run
run
run
run
done
#if no-windows
Known exception should be caught, but printed if --traceback is enabled
$ hg --config "extensions.t=$abspath" --config 'worker.numcpus=8' \
> test 100000.0 abort --traceback 2>&1 | egrep '^(SystemExit|(edenscm.mercurial.error.)?Abort)'
*Abort: known exception (glob)
*Abort: known exception (glob)
Traceback must be printed for unknown exceptions
$ hg --config "extensions.t=$abspath" --config 'worker.numcpus=8' \
> test 100000.0 exc 2>&1 | grep '^Exception'
Exception in thread Thread-1:
Exception: unknown exception
Exception: unknown exception
#endif