tests/test-nointerrupt.t
author Simon Sapin <simon.sapin@octobus.net>
Mon, 11 Oct 2021 18:23:17 +0200
changeset 48188 77fc340acad7
parent 48186 6edc8800dbc3
child 48255 8c34edb1ad10
permissions -rw-r--r--
dirstate-v2: Document flags/mode/size/mtime fields of tree nodes This file format modification was previously left incomplete because of planned upcoming changes. Not all of these changes have been made yet, but documenting what exists today will help talking more widely about it. Differential Revision: https://phab.mercurial-scm.org/D11625
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47587
be496e3489b9 tests: blacklist a handful of test with `rhg` or `chg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47063
diff changeset
     1
#require no-windows no-rhg
be496e3489b9 tests: blacklist a handful of test with `rhg` or `chg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47063
diff changeset
     2
be496e3489b9 tests: blacklist a handful of test with `rhg` or `chg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47063
diff changeset
     3
XXX-RHG this test hangs if `hg` is really `rhg`. This was hidden by the use of
be496e3489b9 tests: blacklist a handful of test with `rhg` or `chg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47063
diff changeset
     4
`alias hg=rhg` by run-tests.py. With such alias removed, this test is revealed
be496e3489b9 tests: blacklist a handful of test with `rhg` or `chg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47063
diff changeset
     5
buggy. This need to be resolved sooner than later.
39479
3ba87d5b9ad3 tests: disable test-nointerrupt on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 38656
diff changeset
     6
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
     7
Dummy extension simulating unsafe long running command
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
     8
  $ SYNC_FILE="$TESTTMP/sync-file"
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
     9
  $ export SYNC_FILE
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    10
  $ DONE_FILE="$TESTTMP/done-file"
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    11
  $ export DONE_FILE
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    12
  $ 
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    13
  $ cat > wait_ext.py <<EOF
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    14
  > import os
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    15
  > import time
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    16
  > 
38656
531f5e933e49 tests: properly sort imports in test-nointerrupt.t
Augie Fackler <augie@google.com>
parents: 38526
diff changeset
    17
  > from mercurial.i18n import _
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    18
  > from mercurial import registrar
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    19
  > from mercurial import testing
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    20
  > 
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    21
  > cmdtable = {}
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    22
  > command = registrar.command(cmdtable)
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    23
  > 
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    24
  > @command(b'wait-signal', [], _(b'SYNC_FILE DONE_FILE'), norepo=True)
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    25
  > def sleep(ui, sync_file=b"$SYNC_FILE", done_file=b"$DONE_FILE", **opts):
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    26
  >     start = time.time()
41076
8ecb17b7f432 procutil: correct spelling of uninterruptable -> uninterruptible
Kyle Lippincott <spectral@google.com>
parents: 39479
diff changeset
    27
  >     with ui.uninterruptible():
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    28
  >         testing.write_file(sync_file, b'%d' % os.getpid())
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    29
  >         testing.wait_file(done_file)
47805
8892f604e242 test-nointerrupt: make "sure" the handler "might" trigger (issue6558)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47762
diff changeset
    30
  >         # make sure we get rescheduled and the signal get a chance to be handled
8892f604e242 test-nointerrupt: make "sure" the handler "might" trigger (issue6558)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47762
diff changeset
    31
  >         time.sleep(0.1)
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    32
  >         ui.warn(b"end of unsafe operation\n")
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    33
  >     ui.warn(b"%d second(s) passed\n" % int(time.time() - start))
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    34
  > EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    35
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    36
  $ cat > send-signal.sh << EOF
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    37
  > #!/bin/sh
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    38
  > SIG=\$1
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    39
  > if [ -z "\$SIG" ]; then
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    40
  >    echo "send-signal.sh requires one argument" >&2
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    41
  >    exit 1
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    42
  > fi
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    43
  > "$RUNTESTDIR/testlib/wait-on-file" 10 "$SYNC_FILE" || exit 2
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    44
  > kill -s \$SIG \`cat "$SYNC_FILE"\`
47805
8892f604e242 test-nointerrupt: make "sure" the handler "might" trigger (issue6558)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47762
diff changeset
    45
  > sleep 1
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    46
  > touch "$DONE_FILE"
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    47
  > EOF
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    48
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    49
#if no-windows
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    50
  $ chmod +x send-signal.sh
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    51
#endif
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    52
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    53
Kludge to emulate timeout(1) which is not generally available.
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    54
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    55
Set up repository
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    56
  $ hg init repo
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    57
  $ cd repo
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    58
  $ cat >> $HGRCPATH << EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    59
  > [extensions]
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    60
  > wait_ext = $TESTTMP/wait_ext.py
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    61
  > EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    62
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    63
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    64
Test ctrl-c
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    65
  $ rm -f $SYNC_FILE $DONE_FILE
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    66
  $ sh -c "../send-signal.sh INT" &
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    67
  $ hg wait-signal
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    68
  interrupted!
48186
6edc8800dbc3 dispatch: use detailed exit code 250 for keyboard interrupt
Martin von Zweigbergk <martinvonz@google.com>
parents: 47805
diff changeset
    69
  [250]
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    70
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    71
  $ cat >> $HGRCPATH << EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    72
  > [experimental]
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    73
  > nointerrupt = yes
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    74
  > EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    75
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    76
  $ rm -f $SYNC_FILE $DONE_FILE
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    77
  $ sh -c "../send-signal.sh INT" &
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    78
  $ hg wait-signal
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    79
  interrupted!
48186
6edc8800dbc3 dispatch: use detailed exit code 250 for keyboard interrupt
Martin von Zweigbergk <martinvonz@google.com>
parents: 47805
diff changeset
    80
  [250]
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    81
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    82
  $ cat >> $HGRCPATH << EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    83
  > [experimental]
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    84
  > nointerrupt-interactiveonly = False
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    85
  > EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    86
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    87
  $ rm -f $SYNC_FILE $DONE_FILE
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    88
  $ sh -c "../send-signal.sh INT" &
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    89
  $ hg wait-signal
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    90
  shutting down cleanly
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    91
  press ^C again to terminate immediately (dangerous)
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    92
  end of unsafe operation
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    93
  interrupted!
48186
6edc8800dbc3 dispatch: use detailed exit code 250 for keyboard interrupt
Martin von Zweigbergk <martinvonz@google.com>
parents: 47805
diff changeset
    94
  [250]