Mercurial > hg
view tests/test-transaction-rollback-on-sigpipe.t @ 49055:50bd2910d162
sslutil: be less strict about which ciphers are allowed when using --insecure
Python 3.10 restricted which ciphers are enabled by default, leading to
no available ciphers for TLS < 1.2. When using the --insecure flag we
allow old TLS, so also adjust the cipher list to give connections a
chance to work.
On the server side, also loosen the cipher selection in tests (when
using the devel.serverexactprotocol option).
Differential Revision: https://phab.mercurial-scm.org/D12489
author | Julien Cristau <jcristau@debian.org> |
---|---|
date | Sat, 09 Apr 2022 14:23:52 +0200 |
parents | 9c4204b7f3e4 |
children |
line wrap: on
line source
Test that, when an hg push is interrupted and the remote side receives SIGPIPE, the remote hg is able to successfully roll back the transaction. $ hg init -q remote $ hg clone -q ssh://user@dummy/`pwd`/remote local $ SIGPIPE_REMOTE_DEBUG_FILE="$TESTTMP/DEBUGFILE" $ SYNCFILE1="$TESTTMP/SYNCFILE1" $ SYNCFILE2="$TESTTMP/SYNCFILE2" $ export SIGPIPE_REMOTE_DEBUG_FILE $ export SYNCFILE1 $ export SYNCFILE2 $ PYTHONUNBUFFERED=1 $ export PYTHONUNBUFFERED On the remote end, run hg, piping stdout and stderr through processes that we know the PIDs of. We will later kill these to simulate an ssh client disconnecting. $ remotecmd="$RUNTESTDIR/testlib/sigpipe-remote.py" In the pretxnchangegroup hook, kill the PIDs recorded above to simulate ssh disconnecting. Then exit nonzero, to force a transaction rollback. $ cat >remote/.hg/hgrc <<EOF > [hooks] > pretxnchangegroup.00-break-things=sh "$RUNTESTDIR/testlib/wait-on-file" 10 "$SYNCFILE2" "$SYNCFILE1" > pretxnchangegroup.01-output-things=echo "some remote output to be forward to the closed pipe" > pretxnchangegroup.02-output-things=echo "some more remote output" > EOF $ hg --cwd ./remote tip -T '{node|short}\n' 000000000000 $ cd local $ echo foo > foo ; hg commit -qAm "commit" (use quiet to avoid flacky output from the server) $ hg push --quiet --remotecmd "$remotecmd" abort: stream ended unexpectedly (got 0 bytes, expected 4) [255] $ cat $SIGPIPE_REMOTE_DEBUG_FILE SIGPIPE-HELPER: Starting SIGPIPE-HELPER: Redirection in place SIGPIPE-HELPER: pipes closed in main SIGPIPE-HELPER: SYNCFILE1 detected SIGPIPE-HELPER: worker killed SIGPIPE-HELPER: creating SYNCFILE2 SIGPIPE-HELPER: Shutting down SIGPIPE-HELPER: Server process terminated with status 255 (no-windows !) SIGPIPE-HELPER: Server process terminated with status 1 (windows !) SIGPIPE-HELPER: Shut down The remote should be left in a good state $ hg --cwd ../remote tip -T '{node|short}\n' 000000000000 #if windows XXX-Windows Broken behavior to be fixed Behavior on Windows is broken and should be fixed. However this is a fairly corner case situation and no data are being corrupted. This would affect central repository being hosted on a Windows machine and accessed using ssh. This was catch as we setup new CI for Windows. Making the test pass on Windows was enough of a pain that fixing the behavior set aside for now. Dear and honorable reader, feel free to fix it. $ hg --cwd ../remote recover rolling back interrupted transaction (verify step skipped, run `hg verify` to check your repository content) #else $ hg --cwd ../remote recover no interrupted transaction available [1] #endif