test-wireproto.py
88 lines
| 1.9 KiB
| text/x-python
|
PythonLexer
/ tests / test-wireproto.py
Pulkit Goyal
|
r28675 | from __future__ import absolute_import, print_function | ||
Gregory Szorc
|
r27301 | |||
timeless
|
r28860 | from mercurial import ( | ||
Gregory Szorc
|
r36091 | error, | ||
timeless
|
r28861 | util, | ||
timeless
|
r28860 | wireproto, | ||
Gregory Szorc
|
r36091 | wireprototypes, | ||
timeless
|
r28860 | ) | ||
timeless
|
r28861 | stringio = util.stringio | ||
Thomas Arendsen Hein
|
r14765 | |||
class proto(object): | ||||
def __init__(self, args): | ||||
self.args = args | ||||
def getargs(self, spec): | ||||
args = self.args | ||||
args.setdefault('*', {}) | ||||
names = spec.split() | ||||
return [args[n] for n in names] | ||||
Peter Arrenbrecht
|
r17192 | class clientpeer(wireproto.wirepeer): | ||
Thomas Arendsen Hein
|
r14765 | def __init__(self, serverrepo): | ||
self.serverrepo = serverrepo | ||||
Augie Fackler
|
r25912 | |||
Gregory Szorc
|
r33805 | @property | ||
def ui(self): | ||||
return self.serverrepo.ui | ||||
def url(self): | ||||
return 'test' | ||||
def local(self): | ||||
return None | ||||
def peer(self): | ||||
return self | ||||
def canpush(self): | ||||
return True | ||||
def close(self): | ||||
pass | ||||
def capabilities(self): | ||||
Augie Fackler
|
r25912 | return ['batch'] | ||
Thomas Arendsen Hein
|
r14765 | def _call(self, cmd, **args): | ||
Gregory Szorc
|
r36091 | res = wireproto.dispatch(self.serverrepo, proto(args), cmd) | ||
if isinstance(res, wireprototypes.bytesresponse): | ||||
return res.data | ||||
elif isinstance(res, bytes): | ||||
return res | ||||
else: | ||||
raise error.Abort('dummy client does not support response type') | ||||
Thomas Arendsen Hein
|
r14765 | |||
Augie Fackler
|
r28438 | def _callstream(self, cmd, **args): | ||
timeless
|
r28861 | return stringio(self._call(cmd, **args)) | ||
Augie Fackler
|
r28438 | |||
Thomas Arendsen Hein
|
r14765 | @wireproto.batchable | ||
def greet(self, name): | ||||
f = wireproto.future() | ||||
Augie Fackler
|
r20686 | yield {'name': mangle(name)}, f | ||
Thomas Arendsen Hein
|
r14765 | yield unmangle(f.value) | ||
class serverrepo(object): | ||||
def greet(self, name): | ||||
return "Hello, " + name | ||||
Pierre-Yves David
|
r18278 | def filtered(self, name): | ||
return self | ||||
Thomas Arendsen Hein
|
r14765 | def mangle(s): | ||
return ''.join(chr(ord(c) + 1) for c in s) | ||||
def unmangle(s): | ||||
return ''.join(chr(ord(c) - 1) for c in s) | ||||
def greet(repo, proto, name): | ||||
return mangle(repo.greet(unmangle(name))) | ||||
wireproto.commands['greet'] = (greet, 'name',) | ||||
srv = serverrepo() | ||||
Peter Arrenbrecht
|
r17192 | clt = clientpeer(srv) | ||
Thomas Arendsen Hein
|
r14765 | |||
Pulkit Goyal
|
r28675 | print(clt.greet("Foobar")) | ||
Gregory Szorc
|
r33762 | b = clt.iterbatch() | ||
map(b.greet, ('Fo, =;:<o', 'Bar')) | ||||
Thomas Arendsen Hein
|
r14765 | b.submit() | ||
Gregory Szorc
|
r33762 | print([r for r in b.results()]) | ||