Mercurial > public > mercurial-scm > python-hglib
annotate tests/test-hglib.py @ 188:5609a21fe39a
client: fail gracefully on unexpected prompts (issue5516)
Right now, if hglib encounters an unexpected prompt, it fails with a rather
opaque "unexpected data on required channel 'L'" error message. Furthermore,
if subsequently another command is called on the same client instance, both
the client and server processes lock up hard (at least on Windows), and the
server process rapidly leaks ~2GB of memory.
Fix this by responding with an empty string to any unexpected prompt. This
will trigger an "abort: response expected" exception from the server, which
is easily handled as a CommandError, and subsequent commands sent from the
same client work as expected.
This doesn't completely resolve bug 5516, as unexpected requests on another
required channel (e.g. I) can still cause a lockup.
However, it does fix the most common case of an unexpected password prompt.
author | G?bor Stefanik <gabor.stefanik@nng.com> |
---|---|
date | Tue, 12 Sep 2017 13:16:36 -0400 |
parents | e6589149b2c8 |
children |
rev | line source |
---|---|
148
c1b966866ed7
hglib: make all imports absolute (issue4520)
Brett Cannon <brett@python.org>
parents:
134
diff
changeset
|
1 from tests import common |
c1b966866ed7
hglib: make all imports absolute (issue4520)
Brett Cannon <brett@python.org>
parents:
134
diff
changeset
|
2 import hglib |
62
d1f57f162274
closefds on posix when using subprocess
Idan Kamara <idankk86@gmail.com>
parents:
diff
changeset
|
3 |
d1f57f162274
closefds on posix when using subprocess
Idan Kamara <idankk86@gmail.com>
parents:
diff
changeset
|
4 class test_hglib(common.basetest): |
d1f57f162274
closefds on posix when using subprocess
Idan Kamara <idankk86@gmail.com>
parents:
diff
changeset
|
5 def setUp(self): |
d1f57f162274
closefds on posix when using subprocess
Idan Kamara <idankk86@gmail.com>
parents:
diff
changeset
|
6 pass |
d1f57f162274
closefds on posix when using subprocess
Idan Kamara <idankk86@gmail.com>
parents:
diff
changeset
|
7 |
d1f57f162274
closefds on posix when using subprocess
Idan Kamara <idankk86@gmail.com>
parents:
diff
changeset
|
8 def test_close_fds(self): |
134 | 9 """A weird Python bug that has something to do to inherited file |
10 descriptors, see http://bugs.python.org/issue12786 | |
62
d1f57f162274
closefds on posix when using subprocess
Idan Kamara <idankk86@gmail.com>
parents:
diff
changeset
|
11 """ |
d1f57f162274
closefds on posix when using subprocess
Idan Kamara <idankk86@gmail.com>
parents:
diff
changeset
|
12 common.basetest.setUp(self) |
d1f57f162274
closefds on posix when using subprocess
Idan Kamara <idankk86@gmail.com>
parents:
diff
changeset
|
13 client2 = hglib.open() |
d1f57f162274
closefds on posix when using subprocess
Idan Kamara <idankk86@gmail.com>
parents:
diff
changeset
|
14 self.client.close() |
169
e6589149b2c8
client: include stderr message in ServerError on initial communication failure
Yuya Nishihara <yuya@tcha.org>
parents:
148
diff
changeset
|
15 |
e6589149b2c8
client: include stderr message in ServerError on initial communication failure
Yuya Nishihara <yuya@tcha.org>
parents:
148
diff
changeset
|
16 def test_open_nonexistent(self): |
e6589149b2c8
client: include stderr message in ServerError on initial communication failure
Yuya Nishihara <yuya@tcha.org>
parents:
148
diff
changeset
|
17 # setup stuff necessary for basetest.tearDown() |
e6589149b2c8
client: include stderr message in ServerError on initial communication failure
Yuya Nishihara <yuya@tcha.org>
parents:
148
diff
changeset
|
18 self.clients = [] |
e6589149b2c8
client: include stderr message in ServerError on initial communication failure
Yuya Nishihara <yuya@tcha.org>
parents:
148
diff
changeset
|
19 self._oldopen = hglib.client.hgclient.open |
e6589149b2c8
client: include stderr message in ServerError on initial communication failure
Yuya Nishihara <yuya@tcha.org>
parents:
148
diff
changeset
|
20 try: |
e6589149b2c8
client: include stderr message in ServerError on initial communication failure
Yuya Nishihara <yuya@tcha.org>
parents:
148
diff
changeset
|
21 self.clients.append(hglib.open('inexistent')) |
e6589149b2c8
client: include stderr message in ServerError on initial communication failure
Yuya Nishihara <yuya@tcha.org>
parents:
148
diff
changeset
|
22 # hg 3.5 can't report error (fixed by 7332bf4ae959) |
e6589149b2c8
client: include stderr message in ServerError on initial communication failure
Yuya Nishihara <yuya@tcha.org>
parents:
148
diff
changeset
|
23 #self.fail('ServerError not raised') |
e6589149b2c8
client: include stderr message in ServerError on initial communication failure
Yuya Nishihara <yuya@tcha.org>
parents:
148
diff
changeset
|
24 except hglib.error.ServerError as inst: |
e6589149b2c8
client: include stderr message in ServerError on initial communication failure
Yuya Nishihara <yuya@tcha.org>
parents:
148
diff
changeset
|
25 self.assertTrue('inexistent' in str(inst)) |