Mercurial > hg
view tests/wireprotohelpers.sh @ 37483:61e405fb6372
wireproto: crude support for version 2 HTTP peer
As part of implementing the server-side bits of the wire protocol
command handlers for version 2, we want a way to easily test those
commands. Currently, we use the "httprequest" action of `hg
debugwireproto`. But this requires explicitly specifying the HTTP
request headers, low-level frame details, and the data structure
to encode with CBOR. That's a lot of boilerplate and a lot of it can
change as the wire protocol evolves.
`hg debugwireproto` has a mechanism to issue commands via the peer
interface. That is *much* easier to use and we prefer to test with
that going forward.
This commit implements enough parts of the peer API to send basic
requests via the HTTP version 2 transport.
The peer code is super hacky. Again, the goal is to facilitate
server testing, not robustly implement a client. The client code
will receive love at a later time.
Differential Revision: https://phab.mercurial-scm.org/D3177
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 28 Mar 2018 15:09:34 -0700 |
parents | fa9faf58959d |
children | 693cb3768943 |
line wrap: on
line source
HTTPV2=exp-http-v2-0001 MEDIATYPE=application/mercurial-exp-framing-0003 sendhttpraw() { hg --verbose debugwireproto --peer raw http://$LOCALIP:$HGPORT/ } sendhttpv2peer() { hg --verbose debugwireproto --peer http2 http://$LOCALIP:$HGPORT/ } cat > dummycommands.py << EOF from mercurial import ( wireprototypes, wireproto, ) @wireproto.wireprotocommand('customreadonly', permission='pull') def customreadonly(repo, proto): return wireprototypes.bytesresponse(b'customreadonly bytes response') @wireproto.wireprotocommand('customreadwrite', permission='push') def customreadwrite(repo, proto): return wireprototypes.bytesresponse(b'customreadwrite bytes response') EOF cat >> $HGRCPATH << EOF [extensions] drawdag = $TESTDIR/drawdag.py EOF enabledummycommands() { cat >> $HGRCPATH << EOF [extensions] dummycommands = $TESTTMP/dummycommands.py EOF } enablehttpv2() { cat >> $1/.hg/hgrc << EOF [experimental] web.apiserver = true web.api.http-v2 = true EOF }