--- a/tests/test-ssh-proto.t Tue Feb 27 15:47:44 2018 -0800
+++ b/tests/test-ssh-proto.t Thu Mar 01 08:24:54 2018 -0800
@@ -12,10 +12,29 @@
$ echo 0 > foo
$ hg -q add foo
$ hg commit -m initial
- $ cd ..
+
+A no-op connection performs a handshake
+
+ $ hg debugwireproto --localssh << EOF
+ > EOF
+ creating ssh peer from handshake results
+
+Raw peers don't perform any activity
+
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > EOF
+ using raw connection to peer
+ $ hg debugwireproto --localssh --peer ssh1 << EOF
+ > EOF
+ creating ssh peer for wire protocol version 1
+ $ hg debugwireproto --localssh --peer ssh2 << EOF
+ > EOF
+ creating ssh peer for wire protocol version 2
Test a normal behaving server, for sanity
+ $ cd ..
+
$ hg --debug debugpeer ssh://user@dummy/server
running * "*/tests/dummyssh" 'user@dummy' 'hg -R server serve --stdio' (glob) (no-windows !)
running * "*\tests/dummyssh" "user@dummy" "hg -R server serve --stdio" (glob) (windows !)
@@ -33,11 +52,19 @@
Server should answer the "hello" command in isolation
- $ hg -R server serve --stdio << EOF
- > hello
+ $ hg -R server debugwireproto --localssh --peer raw << EOF
+ > raw
+ > hello\n
+ > readline
+ > readline
> EOF
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
+ using raw connection to peer
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
`hg debugserve --sshstdio` works
@@ -80,16 +107,33 @@
Server should reply with capabilities and should send "1\n\n" as a successful
reply with empty response to the "between".
- $ hg -R server serve --stdio << EOF
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ $ hg -R server debugwireproto --localssh --peer raw << EOF
+ > raw
+ > hello\n
+ > readline
+ > readline
+ > raw
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
> EOF
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
+ using raw connection to peer
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ i> write(98) -> None:
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 2:
+ o> 1\n
+ o> readline() -> 1:
+ o> \n
SSH banner is not printed by default, ignored by clients
@@ -127,26 +171,63 @@
And test the banner with the raw protocol
- $ SSHSERVERMODE=banner hg -R server serve --stdio << EOF
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ $ SSHSERVERMODE=banner hg -R server debugwireproto --localssh --peer raw << EOF
+ > raw
+ > hello\n
+ > readline
+ > readline
+ > readline
+ > readline
+ > readline
+ > readline
+ > readline
+ > readline
+ > readline
+ > readline
+ > readline
+ > readline
+ > raw
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
> EOF
- banner: line 0
- banner: line 1
- banner: line 2
- banner: line 3
- banner: line 4
- banner: line 5
- banner: line 6
- banner: line 7
- banner: line 8
- banner: line 9
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
+ using raw connection to peer
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 15:
+ o> banner: line 0\n
+ o> readline() -> 15:
+ o> banner: line 1\n
+ o> readline() -> 15:
+ o> banner: line 2\n
+ o> readline() -> 15:
+ o> banner: line 3\n
+ o> readline() -> 15:
+ o> banner: line 4\n
+ o> readline() -> 15:
+ o> banner: line 5\n
+ o> readline() -> 15:
+ o> banner: line 6\n
+ o> readline() -> 15:
+ o> banner: line 7\n
+ o> readline() -> 15:
+ o> banner: line 8\n
+ o> readline() -> 15:
+ o> banner: line 9\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ i> write(98) -> None:
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 2:
+ o> 1\n
+ o> readline() -> 1:
+ o> \n
Connecting to a <0.9.1 server that doesn't support the hello command.
The client should refuse, as we dropped support for connecting to such
@@ -167,18 +248,37 @@
Sending an unknown command to the server results in an empty response to that command
- $ hg -R server serve --stdio << EOF
- > pre-hello
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ $ hg -R server debugwireproto --localssh --peer raw << EOF
+ > raw
+ > pre-hello\n
+ > readline
+ > raw
+ > hello\n
+ > readline
+ > raw
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
> EOF
- 0
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
+ using raw connection to peer
+ i> write(10) -> None:
+ i> pre-hello\n
+ o> readline() -> 2:
+ o> 0\n
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ i> write(98) -> None:
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ o> readline() -> 2:
+ o> 1\n
$ hg --config sshpeer.mode=extra-handshake-commands --config sshpeer.handshake-mode=pre-no-args --debug debugpeer ssh://user@dummy/server
running * "*/tests/dummyssh" 'user@dummy' 'hg -R server serve --stdio' (glob) (no-windows !)
@@ -199,22 +299,54 @@
Send multiple unknown commands before hello
- $ hg -R server serve --stdio << EOF
- > unknown1
- > unknown2
- > unknown3
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ $ hg -R server debugwireproto --localssh --peer raw << EOF
+ > raw
+ > unknown1\n
+ > readline
+ > raw
+ > unknown2\n
+ > readline
+ > raw
+ > unknown3\n
+ > readline
+ > raw
+ > hello\n
+ > readline
+ > readline
+ > raw
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
> EOF
- 0
- 0
- 0
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
+ using raw connection to peer
+ i> write(9) -> None:
+ i> unknown1\n
+ o> readline() -> 2:
+ o> 0\n
+ i> write(9) -> None:
+ i> unknown2\n
+ o> readline() -> 2:
+ o> 0\n
+ i> write(9) -> None:
+ i> unknown3\n
+ o> readline() -> 2:
+ o> 0\n
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ i> write(98) -> None:
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 2:
+ o> 1\n
+ o> readline() -> 1:
+ o> \n
$ hg --config sshpeer.mode=extra-handshake-commands --config sshpeer.handshake-mode=pre-multiple-no-args --debug debugpeer ssh://user@dummy/server
running * "*/tests/dummyssh" 'user@dummy' 'hg -R server serve --stdio' (glob) (no-windows !)
@@ -239,62 +371,154 @@
Send an unknown command before hello that has arguments
- $ hg -R server serve --stdio << EOF
- > with-args
- > foo 13
- > value for foo
- > bar 13
- > value for bar
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ $ cd server
+
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > with-args\n
+ > foo 13\n
+ > value for foo\n
+ > bar 13\n
+ > value for bar\n
+ > readline
+ > readline
+ > readline
+ > readline
+ > readline
+ > raw
+ > hello\n
+ > readline
+ > readline
+ > raw
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
> EOF
- 0
- 0
- 0
- 0
- 0
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
+ using raw connection to peer
+ i> write(52) -> None:
+ i> with-args\n
+ i> foo 13\n
+ i> value for foo\n
+ i> bar 13\n
+ i> value for bar\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ i> write(98) -> None:
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 2:
+ o> 1\n
+ o> readline() -> 1:
+ o> \n
Send an unknown command having an argument that looks numeric
- $ hg -R server serve --stdio << EOF
- > unknown
- > foo 1
- > 0
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > unknown\n
+ > foo 1\n
+ > 0\n
+ > readline
+ > readline
+ > readline
+ > raw
+ > hello\n
+ > readline
+ > readline
+ > raw
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
> EOF
- 0
- 0
- 0
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
+ using raw connection to peer
+ i> write(16) -> None:
+ i> unknown\n
+ i> foo 1\n
+ i> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ i> write(98) -> None:
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 2:
+ o> 1\n
+ o> readline() -> 1:
+ o> \n
- $ hg -R server serve --stdio << EOF
- > unknown
- > foo 1
- > 1
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > unknown\n
+ > foo 1\n
+ > 1\n
+ > readline
+ > readline
+ > readline
+ > raw
+ > hello\n
+ > readline
+ > readline
+ > raw
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
> EOF
- 0
- 0
- 0
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
+ using raw connection to peer
+ i> write(16) -> None:
+ i> unknown\n
+ i> foo 1\n
+ i> 1\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ i> write(98) -> None:
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 2:
+ o> 1\n
+ o> readline() -> 1:
+ o> \n
When sending a dict argument value, it is serialized to
"<arg> <item count>" followed by "<key> <len>\n<value>" for each item
@@ -302,176 +526,402 @@
Dictionary value for unknown command
- $ hg -R server serve --stdio << EOF
- > unknown
- > dict 3
- > key1 3
- > foo
- > key2 3
- > bar
- > key3 3
- > baz
- > hello
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > unknown\n
+ > dict 3\n
+ > key1 3\n
+ > foo\n
+ > key2 3\n
+ > bar\n
+ > key3 3\n
+ > baz\n
+ > readline
+ > readline
+ > readline
+ > readline
+ > readline
+ > readline
+ > readline
+ > readline
+ > raw
+ > hello\n
+ > readline
+ > readline
> EOF
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
+ using raw connection to peer
+ i> write(48) -> None:
+ i> unknown\n
+ i> dict 3\n
+ i> key1 3\n
+ i> foo\n
+ i> key2 3\n
+ i> bar\n
+ i> key3 3\n
+ i> baz\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
Incomplete dictionary send
- $ hg -R server serve --stdio << EOF
- > unknown
- > dict 3
- > key1 3
- > foo
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > unknown\n
+ > dict 3\n
+ > key1 3\n
+ > foo\n
+ > readline
+ > readline
+ > readline
+ > readline
> EOF
- 0
- 0
- 0
- 0
+ using raw connection to peer
+ i> write(26) -> None:
+ i> unknown\n
+ i> dict 3\n
+ i> key1 3\n
+ i> foo\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
Incomplete value send
- $ hg -R server serve --stdio << EOF
- > unknown
- > dict 3
- > key1 3
- > fo
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > unknown\n
+ > dict 3\n
+ > key1 3\n
+ > fo
+ > readline
+ > readline
+ > readline
> EOF
- 0
- 0
- 0
- 0
+ using raw connection to peer
+ i> write(24) -> None:
+ i> unknown\n
+ i> dict 3\n
+ i> key1 3\n
+ i> fo
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
Send a command line with spaces
- $ hg -R server serve --stdio << EOF
- > unknown withspace
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > unknown withspace\n
+ > readline
+ > raw
+ > hello\n
+ > readline
+ > readline
+ > raw
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
> EOF
- 0
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
+ using raw connection to peer
+ i> write(18) -> None:
+ i> unknown withspace\n
+ o> readline() -> 2:
+ o> 0\n
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ i> write(98) -> None:
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 2:
+ o> 1\n
+ o> readline() -> 1:
+ o> \n
- $ hg -R server serve --stdio << EOF
- > unknown with multiple spaces
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > unknown with multiple spaces\n
+ > readline
+ > raw
+ > hello\n
+ > readline
+ > readline
+ > raw
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
> EOF
- 0
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
+ using raw connection to peer
+ i> write(29) -> None:
+ i> unknown with multiple spaces\n
+ o> readline() -> 2:
+ o> 0\n
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ i> write(98) -> None:
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 2:
+ o> 1\n
- $ hg -R server serve --stdio << EOF
- > unknown with spaces
- > key 10
- > some value
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > unknown with spaces\n
+ > key 10\n
+ > some value\n
+ > readline
+ > readline
+ > readline
+ > raw
+ > hello\n
+ > readline
+ > readline
+ > raw
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
> EOF
- 0
- 0
- 0
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
+ using raw connection to peer
+ i> write(38) -> None:
+ i> unknown with spaces\n
+ i> key 10\n
+ i> some value\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ i> write(98) -> None:
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 2:
+ o> 1\n
+ o> readline() -> 1:
+ o> \n
Send an unknown command after the "between"
- $ hg -R server serve --stdio << EOF
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000unknown
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > hello\n
+ > readline
+ > readline
+ > raw
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000unknown
+ > readline
+ > readline
> EOF
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
- 0
+ using raw connection to peer
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ i> write(105) -> None:
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000unknown
+ o> readline() -> 2:
+ o> 1\n
+ o> readline() -> 1:
+ o> \n
And one with arguments
- $ hg -R server serve --stdio << EOF
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000unknown
- > foo 5
- > value
- > bar 3
- > baz
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > hello\n
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
+ > readline
+ > readline
+ > raw
+ > unknown\n
+ > foo 5\n
+ > \nvalue\n
+ > bar 3\n
+ > baz\n
+ > readline
+ > readline
+ > readline
> EOF
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
- 0
- 0
- 0
- 0
- 0
+ using raw connection to peer
+ i> write(104) -> None:
+ i> hello\n
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ o> readline() -> 2:
+ o> 1\n
+ o> readline() -> 1:
+ o> \n
+ i> write(31) -> None:
+ i> unknown\n
+ i> foo 5\n
+ i> \n
+ i> value\n
+ i> bar 3\n
+ i> baz\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 2:
+ o> 0\n
+ o> readline() -> 0:
Send a valid command before the handshake
- $ hg -R server serve --stdio << EOF
- > heads
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > heads\n
+ > readline
+ > raw
+ > hello\n
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
+ > readline
+ > readline
> EOF
- 41
- 68986213bd4485ea51533535e3fc9e78007a711f
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
+ using raw connection to peer
+ i> write(6) -> None:
+ i> heads\n
+ o> readline() -> 3:
+ o> 41\n
+ i> write(104) -> None:
+ i> hello\n
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 41:
+ o> 68986213bd4485ea51533535e3fc9e78007a711f\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ o> readline() -> 2:
+ o> 1\n
And a variation that doesn't send the between command
- $ hg -R server serve --stdio << EOF
- > heads
- > hello
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > heads\n
+ > readline
+ > raw
+ > hello\n
+ > readline
+ > readline
> EOF
- 41
- 68986213bd4485ea51533535e3fc9e78007a711f
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
+ using raw connection to peer
+ i> write(6) -> None:
+ i> heads\n
+ o> readline() -> 3:
+ o> 41\n
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 41:
+ o> 68986213bd4485ea51533535e3fc9e78007a711f\n
+ o> readline() -> 4:
+ o> 384\n
Send an upgrade request to a server that doesn't support that command
- $ hg -R server serve --stdio << EOF
- > upgrade 2e82ab3f-9ce3-4b4e-8f8c-6fd1c0e9e23a proto=irrelevant1%2Cirrelevant2
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > upgrade 2e82ab3f-9ce3-4b4e-8f8c-6fd1c0e9e23a proto=irrelevant1%2Cirrelevant2\n
+ > readline
+ > raw
+ > hello\n
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
+ > readline
+ > readline
> EOF
- 0
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
+ using raw connection to peer
+ i> write(77) -> None:
+ i> upgrade 2e82ab3f-9ce3-4b4e-8f8c-6fd1c0e9e23a proto=irrelevant1%2Cirrelevant2\n
+ o> readline() -> 2:
+ o> 0\n
+ i> write(104) -> None:
+ i> hello\n
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ o> readline() -> 2:
+ o> 1\n
+ o> readline() -> 1:
+ o> \n
+
+ $ cd ..
$ hg --config experimental.sshpeer.advertise-v2=true --debug debugpeer ssh://user@dummy/server
running * "*/tests/dummyssh" 'user@dummy' 'hg -R server serve --stdio' (glob) (no-windows !)
@@ -500,17 +950,34 @@
Send an upgrade request to a server that supports upgrade
- >>> with open('payload', 'wb') as fh:
- ... fh.write(b'upgrade this-is-some-token proto=exp-ssh-v2-0001\n')
- ... fh.write(b'hello\n')
- ... fh.write(b'between\n')
- ... fh.write(b'pairs 81\n')
- ... fh.write(b'0000000000000000000000000000000000000000-0000000000000000000000000000000000000000')
+ $ cd server
- $ hg -R server serve --stdio < payload
- upgraded this-is-some-token exp-ssh-v2-0001
- 383
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > upgrade this-is-some-token proto=exp-ssh-v2-0001\n
+ > hello\n
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
+ > readline
+ > EOF
+ using raw connection to peer
+ i> write(153) -> None:
+ i> upgrade this-is-some-token proto=exp-ssh-v2-0001\n
+ i> hello\n
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 44:
+ o> upgraded this-is-some-token exp-ssh-v2-0001\n
+ o> readline() -> 4:
+ o> 383\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+
+ $ cd ..
$ hg --config experimental.sshpeer.advertise-v2=true --debug debugpeer ssh://user@dummy/server
running * "*/tests/dummyssh" 'user@dummy' 'hg -R server serve --stdio' (glob) (no-windows !)
@@ -578,95 +1045,210 @@
Command after upgrade to version 2 is processed
- >>> with open('payload', 'wb') as fh:
- ... fh.write(b'upgrade this-is-some-token proto=exp-ssh-v2-0001\n')
- ... fh.write(b'hello\n')
- ... fh.write(b'between\n')
- ... fh.write(b'pairs 81\n')
- ... fh.write(b'0000000000000000000000000000000000000000-0000000000000000000000000000000000000000')
- ... fh.write(b'hello\n')
- $ hg -R server serve --stdio < payload
- upgraded this-is-some-token exp-ssh-v2-0001
- 383
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
+ $ cd server
+
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > upgrade this-is-some-token proto=exp-ssh-v2-0001\n
+ > hello\n
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
+ > readline
+ > raw
+ > hello\n
+ > readline
+ > readline
+ > EOF
+ using raw connection to peer
+ i> write(153) -> None:
+ i> upgrade this-is-some-token proto=exp-ssh-v2-0001\n
+ i> hello\n
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 44:
+ o> upgraded this-is-some-token exp-ssh-v2-0001\n
+ o> readline() -> 4:
+ o> 383\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
Multiple upgrades is not allowed
- >>> with open('payload', 'wb') as fh:
- ... fh.write(b'upgrade this-is-some-token proto=exp-ssh-v2-0001\n')
- ... fh.write(b'hello\n')
- ... fh.write(b'between\n')
- ... fh.write(b'pairs 81\n')
- ... fh.write(b'0000000000000000000000000000000000000000-0000000000000000000000000000000000000000')
- ... fh.write(b'upgrade another-token proto=irrelevant\n')
- ... fh.write(b'hello\n')
- $ hg -R server serve --stdio < payload
- upgraded this-is-some-token exp-ssh-v2-0001
- 383
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- cannot upgrade protocols multiple times
- -
-
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > upgrade this-is-some-token proto=exp-ssh-v2-0001\n
+ > hello\n
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
+ > readline
+ > raw
+ > upgrade another-token proto=irrelevant\n
+ > hello\n
+ > readline
+ > readavailable
+ > EOF
+ using raw connection to peer
+ i> write(153) -> None:
+ i> upgrade this-is-some-token proto=exp-ssh-v2-0001\n
+ i> hello\n
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 44:
+ o> upgraded this-is-some-token exp-ssh-v2-0001\n
+ o> readline() -> 4:
+ o> 383\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ i> write(45) -> None:
+ i> upgrade another-token proto=irrelevant\n
+ i> hello\n
+ o> readline() -> 1:
+ o> \n
+ e> read(-1) -> 42:
+ e> cannot upgrade protocols multiple times\n
+ e> -\n
Malformed upgrade request line (not exactly 3 space delimited tokens)
- $ hg -R server serve --stdio << EOF
- > upgrade
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > upgrade\n
+ > readline
> EOF
- 0
+ using raw connection to peer
+ i> write(8) -> None:
+ i> upgrade\n
+ o> readline() -> 2:
+ o> 0\n
- $ hg -R server serve --stdio << EOF
- > upgrade token
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > upgrade token\n
+ > readline
> EOF
- 0
+ using raw connection to peer
+ i> write(14) -> None:
+ i> upgrade token\n
+ o> readline() -> 2:
+ o> 0\n
- $ hg -R server serve --stdio << EOF
- > upgrade token foo=bar extra-token
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > upgrade token foo=bar extra-token\n
+ > readline
> EOF
- 0
+ using raw connection to peer
+ i> write(34) -> None:
+ i> upgrade token foo=bar extra-token\n
+ o> readline() -> 2:
+ o> 0\n
Upgrade request to unsupported protocol is ignored
- $ hg -R server serve --stdio << EOF
- > upgrade this-is-some-token proto=unknown1,unknown2
- > hello
- > between
- > pairs 81
- > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > upgrade this-is-some-token proto=unknown1,unknown2\n
+ > readline
+ > raw
+ > hello\n
+ > readline
+ > readline
+ > raw
+ > between\n
+ > pairs 81\n
+ > 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ > readline
+ > readline
> EOF
- 0
- 384
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- 1
-
+ using raw connection to peer
+ i> write(51) -> None:
+ i> upgrade this-is-some-token proto=unknown1,unknown2\n
+ o> readline() -> 2:
+ o> 0\n
+ i> write(6) -> None:
+ i> hello\n
+ o> readline() -> 4:
+ o> 384\n
+ o> readline() -> 384:
+ o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
+ i> write(98) -> None:
+ i> between\n
+ i> pairs 81\n
+ i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
+ o> readline() -> 2:
+ o> 1\n
+ o> readline() -> 1:
+ o> \n
Upgrade request must be followed by hello + between
- $ hg -R server serve --stdio << EOF
- > upgrade token proto=exp-ssh-v2-0001
- > invalid
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > upgrade token proto=exp-ssh-v2-0001\n
+ > invalid\n
+ > readline
+ > readavailable
> EOF
- malformed handshake protocol: missing hello
- -
-
+ using raw connection to peer
+ i> write(44) -> None:
+ i> upgrade token proto=exp-ssh-v2-0001\n
+ i> invalid\n
+ o> readline() -> 1:
+ o> \n
+ e> read(-1) -> 46:
+ e> malformed handshake protocol: missing hello\n
+ e> -\n
- $ hg -R server serve --stdio << EOF
- > upgrade token proto=exp-ssh-v2-0001
- > hello
- > invalid
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > upgrade token proto=exp-ssh-v2-0001\n
+ > hello\n
+ > invalid\n
+ > readline
+ > readavailable
> EOF
- malformed handshake protocol: missing between
- -
-
+ using raw connection to peer
+ i> write(50) -> None:
+ i> upgrade token proto=exp-ssh-v2-0001\n
+ i> hello\n
+ i> invalid\n
+ o> readline() -> 1:
+ o> \n
+ e> read(-1) -> 48:
+ e> malformed handshake protocol: missing between\n
+ e> -\n
- $ hg -R server serve --stdio << EOF
- > upgrade token proto=exp-ssh-v2-0001
- > hello
- > between
- > invalid
+ $ hg debugwireproto --localssh --peer raw << EOF
+ > raw
+ > upgrade token proto=exp-ssh-v2-0001\n
+ > hello\n
+ > between\n
+ > invalid\n
+ > readline
+ > readavailable
> EOF
- malformed handshake protocol: missing pairs 81
- -
-
+ using raw connection to peer
+ i> write(58) -> None:
+ i> upgrade token proto=exp-ssh-v2-0001\n
+ i> hello\n
+ i> between\n
+ i> invalid\n
+ o> readline() -> 1:
+ o> \n
+ e> read(-1) -> 49:
+ e> malformed handshake protocol: missing pairs 81\n
+ e> -\n