tests/test-nointerrupt.t
author Matt Harbison <mharbison@atto.com>
Thu, 05 Sep 2024 16:59:36 -0400
changeset 51848 3f0db3b6bf14
parent 49446 8c75ae3f0eea
permissions -rw-r--r--
setup: drop the hack to disable linker warning 4197 on Windows I don't see this when building on Windows with py3.8 or py3.12, so either the code was fixed, or (more likely) the compiler stopped warning about it some time after VS 2008. If we do have to put this back, it would probably be better to put a `#pragma` in a header file somewhere, and avoid `setuptools` technical debt.
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)
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    30
  >         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
    31
  >     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
    32
  > EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    33
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    34
  $ 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
    35
  > #!/bin/sh
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    36
  > SIG=\$1
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    37
  > 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
    38
  >    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
    39
  >    exit 1
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    40
  > fi
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    41
  > "$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
    42
  > kill -s \$SIG \`cat "$SYNC_FILE"\`
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    43
  > EOF
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    44
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    45
#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
    46
  $ 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
    47
#endif
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    48
49446
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    49
  $ cat > wait-signal.sh << 'EOF'
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    50
  > #!/bin/sh
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    51
  > (hg wait-signal 2>&1; echo [$?]) | {
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    52
  >     read line
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    53
  >     touch "$DONE_FILE"
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    54
  >     echo "$line"
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    55
  >     cat
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    56
  > }
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    57
  > EOF
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    58
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    59
#if no-windows
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    60
  $ chmod +x wait-signal.sh
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    61
#endif
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    62
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    63
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
    64
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    65
Set up repository
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    66
  $ hg init repo
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    67
  $ cd repo
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    68
  $ cat >> $HGRCPATH << EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    69
  > [extensions]
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    70
  > 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
    71
  > EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    72
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    73
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
    74
  $ 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
    75
  $ sh -c "../send-signal.sh INT" &
49446
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    76
  $ ../wait-signal.sh
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    77
  interrupted!
48255
8c34edb1ad10 backout: backed out changeset 6edc8800dbc3
Raphaël Gomès <rgomes@octobus.net>
parents: 48186
diff changeset
    78
  [255]
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    79
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    80
  $ cat >> $HGRCPATH << EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    81
  > [experimental]
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    82
  > nointerrupt = yes
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    83
  > EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    84
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    85
  $ 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
    86
  $ sh -c "../send-signal.sh INT" &
49446
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    87
  $ ../wait-signal.sh
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    88
  interrupted!
48255
8c34edb1ad10 backout: backed out changeset 6edc8800dbc3
Raphaël Gomès <rgomes@octobus.net>
parents: 48186
diff changeset
    89
  [255]
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    90
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    91
  $ cat >> $HGRCPATH << EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    92
  > [experimental]
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    93
  > nointerrupt-interactiveonly = False
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    94
  > EOF
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    95
47762
f48a688a7044 test: remove `sleep` usage in `test-nointerrupt.t` (issue6271)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47587
diff changeset
    96
  $ 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
    97
  $ sh -c "../send-signal.sh INT" &
49446
8c75ae3f0eea tests: remove flakiness in test-nointerrupt.t
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48255
diff changeset
    98
  $ ../wait-signal.sh
38526
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
    99
  shutting down cleanly
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
   100
  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
   101
  end of unsafe operation
313a940d49a3 ui: add an uninterruptable context manager that can block SIGINT
Augie Fackler <augie@google.com>
parents:
diff changeset
   102
  interrupted!
48255
8c34edb1ad10 backout: backed out changeset 6edc8800dbc3
Raphaël Gomès <rgomes@octobus.net>
parents: 48186
diff changeset
   103
  [255]