Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Jan 2019 12:12:25 -0800] rev 41466
tests: log sendall() operations and port test-http-bad-server.t
Python 3's HTTP server layer buffers output and uses sendall()
instead of write(). In order to make test-http-bad-server.t pass
on Python 3, we needed to teach our socket proxy to log sendall()
events and to abort future sends if we reached our send limit.
The tests using `tail` were difficult to port with inline output
conditionals since the number of lines varied. So we now use
`#if py3` for these tests.
test-http-bad-server.t now passes on Python 3.6 and 3.7 on at
least Linux. However, it does not yet pass on Python 3.5 because
of low-level differences to how the HTTP server is implemented.
Differential Revision: https://phab.mercurial-scm.org/D5753
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 29 Jan 2019 14:06:46 -0800] rev 41465
tests: glob away readline(-1)
Most of these are readline(65537) on Python 3. I don't think it is
worth the readability hit to use (re), as it would require escaping
parenthesis.
Differential Revision: https://phab.mercurial-scm.org/D5752
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Jan 2019 13:08:59 -0800] rev 41464
tests: change how sockets are closed
Python 3 uses a different type to represent a socket file object
than Python 2. We need to conditionalize how the socket is closed
accordingly.
While we're here, we switch to use socket.shutdown() to close the
socket. This is because socket.close() may not actually close
the socket until it is GCd. socket.shutdown() forces an immediate
shutdown.
I suspect Python 3 changed semantic behavior here, as I can't get
test-http-bad-server.t to work with socket.close(). socket.shutdown()
does appear to work, however.
Differential Revision: https://phab.mercurial-scm.org/D5751
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Jan 2019 09:52:16 -0800] rev 41463
tests: add b'' prefixes to badserverext.py
This avoids a handful of failures due to missing str and bytes.
# skip-blame: just a bunch of b'' prefixes
Differential Revision: https://phab.mercurial-scm.org/D5750
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Jan 2019 11:44:34 -0800] rev 41462
hgweb: log error before attempting I/O
Previously, an uncaught exception during HTTP request serving would
attempt to send an error response then log the exception.
If an exception occurred during I/O, this exception would be
raised and the original exception wouldn't be logged.
This commit changes behavior so the original exception is logged
first, before we attempt to do anything else. This ensures the
exception is logged.
This change resulted in new tracebacks appearing in various tests.
Because tracebacks can vary between Python versions, we added a
simple script to filter the stack part of traceback lines. This
makes testing much simpler, as we don't need to glob over lines
and make lines conditional.
Differential Revision: https://phab.mercurial-scm.org/D5749
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 29 Jan 2019 11:51:19 -0800] rev 41461
tests: write commit message using file I/O
Python 2.7 will print() \x94\x5c\x0a whereas Python 3 will
print() \xc2\x94\x5c\x0a. Why, I'm not sure. It probably has to
do with print() being Unicode aware on Python 3 and Python
attempting some kind of encoding before emitting the output.
This difference results in a different bytes making it to the
commit message and the JSON output varying. We work around
this by writing bytes to a commit message file.
Differential Revision: https://phab.mercurial-scm.org/D5741
Augie Fackler <raf@durin42.com> [Fri, 01 Feb 2019 13:44:09 -0500] rev 41460
Added signature for changeset
83377b4b4ae0