Mercurial > hg
annotate tests/test-wireproto.py @ 45281:fe2040abb183
merge: make mergeresult constructor initialize empty object
In future patches, we will be going to update mergeresult object
instead of building an actions dict and then setting it in the object.
Differential Revision: https://phab.mercurial-scm.org/D8819
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Fri, 24 Jul 2020 15:56:11 +0530 |
parents | 2372284d9457 |
children | c424ff4807e6 |
rev | line source |
---|---|
28675
fcafd84bc9c5
py3: make test-wireproto use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28438
diff
changeset
|
1 from __future__ import absolute_import, print_function |
27301
5defcb7d6e5f
tests: use absolulte_import in test-wireproto.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25912
diff
changeset
|
2 |
37923
40381a88bab4
tests: port test-wireproto.py to Python 3
Augie Fackler <augie@google.com>
parents:
37785
diff
changeset
|
3 import sys |
40381a88bab4
tests: port test-wireproto.py to Python 3
Augie Fackler <augie@google.com>
parents:
37785
diff
changeset
|
4 |
28860
50d11dd8ac02
py3: use multi-line import in test-wireproto.py
timeless <timeless@mozdev.org>
parents:
28675
diff
changeset
|
5 from mercurial import ( |
36074
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33806
diff
changeset
|
6 error, |
36555
c28de190e20a
py3: port tests/test-wireproto.py to Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36074
diff
changeset
|
7 pycompat, |
36944
65615c29e74f
tests: fix test-wireproto.py to work around serverrepo() not having a ui
Augie Fackler <augie@google.com>
parents:
36801
diff
changeset
|
8 ui as uimod, |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28860
diff
changeset
|
9 util, |
36074
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33806
diff
changeset
|
10 wireprototypes, |
37614
a81d02ea65db
wireproto: move version 1 peer functionality to standalone module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37321
diff
changeset
|
11 wireprotov1peer, |
37785
b4d85bc122bd
wireproto: rename wireproto to wireprotov1server (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37633
diff
changeset
|
12 wireprotov1server, |
28860
50d11dd8ac02
py3: use multi-line import in test-wireproto.py
timeless <timeless@mozdev.org>
parents:
28675
diff
changeset
|
13 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
14 from mercurial.utils import stringutil |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
15 |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28860
diff
changeset
|
16 stringio = util.stringio |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
17 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
18 |
14764
a7d5816087a9
classes: fix class style problems found by b071cd58af50
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14622
diff
changeset
|
19 class proto(object): |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
20 def __init__(self, args): |
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
21 self.args = args |
37295
45b39c69fae0
wireproto: separate commands tables for version 1 and 2 commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36944
diff
changeset
|
22 self.name = 'dummyproto' |
45b39c69fae0
wireproto: separate commands tables for version 1 and 2 commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36944
diff
changeset
|
23 |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
24 def getargs(self, spec): |
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
25 args = self.args |
36555
c28de190e20a
py3: port tests/test-wireproto.py to Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36074
diff
changeset
|
26 args.setdefault(b'*', {}) |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
27 names = spec.split() |
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
28 return [args[n] for n in names] |
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
29 |
36801
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36555
diff
changeset
|
30 def checkperm(self, perm): |
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36555
diff
changeset
|
31 pass |
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36555
diff
changeset
|
32 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
33 |
37295
45b39c69fae0
wireproto: separate commands tables for version 1 and 2 commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36944
diff
changeset
|
34 wireprototypes.TRANSPORTS['dummyproto'] = { |
45b39c69fae0
wireproto: separate commands tables for version 1 and 2 commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36944
diff
changeset
|
35 'transport': 'dummy', |
45b39c69fae0
wireproto: separate commands tables for version 1 and 2 commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36944
diff
changeset
|
36 'version': 1, |
45b39c69fae0
wireproto: separate commands tables for version 1 and 2 commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36944
diff
changeset
|
37 } |
45b39c69fae0
wireproto: separate commands tables for version 1 and 2 commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36944
diff
changeset
|
38 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
39 |
37614
a81d02ea65db
wireproto: move version 1 peer functionality to standalone module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37321
diff
changeset
|
40 class clientpeer(wireprotov1peer.wirepeer): |
36944
65615c29e74f
tests: fix test-wireproto.py to work around serverrepo() not having a ui
Augie Fackler <augie@google.com>
parents:
36801
diff
changeset
|
41 def __init__(self, serverrepo, ui): |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
42 self.serverrepo = serverrepo |
37321
e826fe7a08c7
peer: make ui an attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37295
diff
changeset
|
43 self.ui = ui |
33806
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
44 |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
45 def url(self): |
36555
c28de190e20a
py3: port tests/test-wireproto.py to Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36074
diff
changeset
|
46 return b'test' |
33806
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
47 |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
48 def local(self): |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
49 return None |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
50 |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
51 def peer(self): |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
52 return self |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
53 |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
54 def canpush(self): |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
55 return True |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
56 |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
57 def close(self): |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
58 pass |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
59 |
dedab036215d
wireproto: use new peer interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33767
diff
changeset
|
60 def capabilities(self): |
36555
c28de190e20a
py3: port tests/test-wireproto.py to Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36074
diff
changeset
|
61 return [b'batch'] |
25912
cbbdd085c991
batching: migrate basic noop batching into peer.peer
Augie Fackler <augie@google.com>
parents:
25708
diff
changeset
|
62 |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
63 def _call(self, cmd, **args): |
36555
c28de190e20a
py3: port tests/test-wireproto.py to Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36074
diff
changeset
|
64 args = pycompat.byteskwargs(args) |
37785
b4d85bc122bd
wireproto: rename wireproto to wireprotov1server (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37633
diff
changeset
|
65 res = wireprotov1server.dispatch(self.serverrepo, proto(args), cmd) |
36074
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33806
diff
changeset
|
66 if isinstance(res, wireprototypes.bytesresponse): |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33806
diff
changeset
|
67 return res.data |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33806
diff
changeset
|
68 elif isinstance(res, bytes): |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33806
diff
changeset
|
69 return res |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33806
diff
changeset
|
70 else: |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33806
diff
changeset
|
71 raise error.Abort('dummy client does not support response type') |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
72 |
28438
48fd02dac1d4
wireproto: make iterbatcher behave streamily over http(s)
Augie Fackler <augie@google.com>
parents:
27301
diff
changeset
|
73 def _callstream(self, cmd, **args): |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28860
diff
changeset
|
74 return stringio(self._call(cmd, **args)) |
28438
48fd02dac1d4
wireproto: make iterbatcher behave streamily over http(s)
Augie Fackler <augie@google.com>
parents:
27301
diff
changeset
|
75 |
37614
a81d02ea65db
wireproto: move version 1 peer functionality to standalone module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37321
diff
changeset
|
76 @wireprotov1peer.batchable |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
77 def greet(self, name): |
37614
a81d02ea65db
wireproto: move version 1 peer functionality to standalone module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37321
diff
changeset
|
78 f = wireprotov1peer.future() |
36555
c28de190e20a
py3: port tests/test-wireproto.py to Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36074
diff
changeset
|
79 yield {b'name': mangle(name)}, f |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
80 yield unmangle(f.value) |
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
81 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
82 |
14764
a7d5816087a9
classes: fix class style problems found by b071cd58af50
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14622
diff
changeset
|
83 class serverrepo(object): |
41840
d6569f1e9b37
server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
37942
diff
changeset
|
84 def __init__(self, ui): |
d6569f1e9b37
server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
37942
diff
changeset
|
85 self.ui = ui |
d6569f1e9b37
server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
37942
diff
changeset
|
86 |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
87 def greet(self, name): |
36555
c28de190e20a
py3: port tests/test-wireproto.py to Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36074
diff
changeset
|
88 return b"Hello, " + name |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
89 |
18278
753acee7d6dd
clfilter: make localpeer use a repo with "unserved" filter
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17192
diff
changeset
|
90 def filtered(self, name): |
753acee7d6dd
clfilter: make localpeer use a repo with "unserved" filter
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17192
diff
changeset
|
91 return self |
753acee7d6dd
clfilter: make localpeer use a repo with "unserved" filter
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17192
diff
changeset
|
92 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
93 |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
94 def mangle(s): |
36555
c28de190e20a
py3: port tests/test-wireproto.py to Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36074
diff
changeset
|
95 return b''.join(pycompat.bytechr(ord(c) + 1) for c in pycompat.bytestr(s)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
96 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
97 |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
98 def unmangle(s): |
36555
c28de190e20a
py3: port tests/test-wireproto.py to Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36074
diff
changeset
|
99 return b''.join(pycompat.bytechr(ord(c) - 1) for c in pycompat.bytestr(s)) |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
100 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
101 |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
102 def greet(repo, proto, name): |
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
103 return mangle(repo.greet(unmangle(name))) |
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
104 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
105 |
37785
b4d85bc122bd
wireproto: rename wireproto to wireprotov1server (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37633
diff
changeset
|
106 wireprotov1server.commands[b'greet'] = (greet, b'name') |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
107 |
41840
d6569f1e9b37
server: allow customizing the default repo filter
Joerg Sonnenberger <joerg@bec.de>
parents:
37942
diff
changeset
|
108 srv = serverrepo(uimod.ui()) |
36944
65615c29e74f
tests: fix test-wireproto.py to work around serverrepo() not having a ui
Augie Fackler <augie@google.com>
parents:
36801
diff
changeset
|
109 clt = clientpeer(srv, uimod.ui()) |
14622
bd88561afb4b
wireproto: add batching support to wirerepository
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
110 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
111 |
37923
40381a88bab4
tests: port test-wireproto.py to Python 3
Augie Fackler <augie@google.com>
parents:
37785
diff
changeset
|
112 def printb(data, end=b'\n'): |
40381a88bab4
tests: port test-wireproto.py to Python 3
Augie Fackler <augie@google.com>
parents:
37785
diff
changeset
|
113 out = getattr(sys.stdout, 'buffer', sys.stdout) |
40381a88bab4
tests: port test-wireproto.py to Python 3
Augie Fackler <augie@google.com>
parents:
37785
diff
changeset
|
114 out.write(data + end) |
40381a88bab4
tests: port test-wireproto.py to Python 3
Augie Fackler <augie@google.com>
parents:
37785
diff
changeset
|
115 out.flush() |
40381a88bab4
tests: port test-wireproto.py to Python 3
Augie Fackler <augie@google.com>
parents:
37785
diff
changeset
|
116 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
117 |
37923
40381a88bab4
tests: port test-wireproto.py to Python 3
Augie Fackler <augie@google.com>
parents:
37785
diff
changeset
|
118 printb(clt.greet(b"Foobar")) |
37633
33a6eee08db2
wireproto: remove iterbatch() from peer interface (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37614
diff
changeset
|
119 |
33a6eee08db2
wireproto: remove iterbatch() from peer interface (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37614
diff
changeset
|
120 with clt.commandexecutor() as e: |
33a6eee08db2
wireproto: remove iterbatch() from peer interface (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37614
diff
changeset
|
121 fgreet1 = e.callcommand(b'greet', {b'name': b'Fo, =;:<o'}) |
33a6eee08db2
wireproto: remove iterbatch() from peer interface (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37614
diff
changeset
|
122 fgreet2 = e.callcommand(b'greet', {b'name': b'Bar'}) |
33a6eee08db2
wireproto: remove iterbatch() from peer interface (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37614
diff
changeset
|
123 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
124 printb( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
125 stringutil.pprint([f.result() for f in (fgreet1, fgreet2)], bprefix=True) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41840
diff
changeset
|
126 ) |