test-ssh-proto.t
398 lines
| 10.6 KiB
| text/troff
|
Tads3Lexer
/ tests / test-ssh-proto.t
|
r35948 | $ cat >> $HGRCPATH << EOF | ||
> [ui] | ||||
> ssh = $PYTHON "$TESTDIR/dummyssh" | ||||
> [devel] | ||||
> debug.peer-request = true | ||||
> [extensions] | ||||
> sshprotoext = $TESTDIR/sshprotoext.py | ||||
> EOF | ||||
$ hg init server | ||||
$ cd server | ||||
$ echo 0 > foo | ||||
$ hg -q add foo | ||||
$ hg commit -m initial | ||||
$ cd .. | ||||
Test a normal behaving server, for sanity | ||||
$ hg --debug debugpeer ssh://user@dummy/server | ||||
running * "*/tests/dummyssh" 'user@dummy' 'hg -R server serve --stdio' (glob) | ||||
devel-peer-request: hello | ||||
sending hello command | ||||
devel-peer-request: between | ||||
devel-peer-request: pairs: 81 bytes | ||||
sending between command | ||||
remote: 384 | ||||
remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | ||||
remote: 1 | ||||
url: ssh://user@dummy/server | ||||
local: no | ||||
pushable: yes | ||||
Server should answer the "hello" command in isolation | ||||
$ hg -R server serve --stdio << EOF | ||||
> hello | ||||
> EOF | ||||
384 | ||||
capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | ||||
>=0.9.1 clients send a "hello" + "between" for the null range as part of handshake. | ||||
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 | ||||
> EOF | ||||
384 | ||||
capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | ||||
1 | ||||
SSH banner is not printed by default, ignored by clients | ||||
$ SSHSERVERMODE=banner hg debugpeer ssh://user@dummy/server | ||||
url: ssh://user@dummy/server | ||||
local: no | ||||
pushable: yes | ||||
--debug will print the banner | ||||
$ SSHSERVERMODE=banner hg --debug debugpeer ssh://user@dummy/server | ||||
running * "*/tests/dummyssh" 'user@dummy' 'hg -R server serve --stdio' (glob) | ||||
devel-peer-request: hello | ||||
sending hello command | ||||
devel-peer-request: between | ||||
devel-peer-request: pairs: 81 bytes | ||||
sending between command | ||||
remote: banner: line 0 | ||||
remote: banner: line 1 | ||||
remote: banner: line 2 | ||||
remote: banner: line 3 | ||||
remote: banner: line 4 | ||||
remote: banner: line 5 | ||||
remote: banner: line 6 | ||||
remote: banner: line 7 | ||||
remote: banner: line 8 | ||||
remote: banner: line 9 | ||||
remote: 384 | ||||
remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | ||||
remote: 1 | ||||
url: ssh://user@dummy/server | ||||
local: no | ||||
pushable: yes | ||||
And test the banner with the raw protocol | ||||
$ SSHSERVERMODE=banner hg -R server serve --stdio << EOF | ||||
> hello | ||||
> between | ||||
> pairs 81 | ||||
> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000 | ||||
> 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 | ||||
Connecting to a <0.9.1 server that doesn't support the hello command | ||||
$ SSHSERVERMODE=no-hello hg --debug debugpeer ssh://user@dummy/server | ||||
running * "*/tests/dummyssh" 'user@dummy' 'hg -R server serve --stdio' (glob) | ||||
devel-peer-request: hello | ||||
sending hello command | ||||
devel-peer-request: between | ||||
devel-peer-request: pairs: 81 bytes | ||||
sending between command | ||||
remote: 0 | ||||
remote: 1 | ||||
url: ssh://user@dummy/server | ||||
local: no | ||||
pushable: yes | ||||
The client should interpret this as no capabilities | ||||
$ SSHSERVERMODE=no-hello hg debugcapabilities ssh://user@dummy/server | ||||
Main capabilities: | ||||
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 | ||||
> EOF | ||||
0 | ||||
384 | ||||
capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | ||||
1 | ||||
$ 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) | ||||
devel-peer-request: no-args | ||||
sending no-args command | ||||
devel-peer-request: hello | ||||
sending hello command | ||||
devel-peer-request: between | ||||
devel-peer-request: pairs: 81 bytes | ||||
sending between command | ||||
remote: 0 | ||||
remote: 384 | ||||
remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | ||||
remote: 1 | ||||
url: ssh://user@dummy/server | ||||
local: no | ||||
pushable: yes | ||||
Send multiple unknown commands before hello | ||||
$ hg -R server serve --stdio << EOF | ||||
> unknown1 | ||||
> unknown2 | ||||
> unknown3 | ||||
> hello | ||||
> between | ||||
> pairs 81 | ||||
> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000 | ||||
> 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 | ||||
$ 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) | ||||
devel-peer-request: unknown1 | ||||
sending unknown1 command | ||||
devel-peer-request: unknown2 | ||||
sending unknown2 command | ||||
devel-peer-request: unknown3 | ||||
sending unknown3 command | ||||
devel-peer-request: hello | ||||
sending hello command | ||||
devel-peer-request: between | ||||
devel-peer-request: pairs: 81 bytes | ||||
sending between command | ||||
remote: 0 | ||||
remote: 0 | ||||
remote: 0 | ||||
remote: 384 | ||||
remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | ||||
remote: 1 | ||||
url: ssh://user@dummy/server | ||||
local: no | ||||
pushable: yes | ||||
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 | ||||
> 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 | ||||
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 | ||||
> 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 | ||||
$ hg -R server serve --stdio << EOF | ||||
> unknown | ||||
> foo 1 | ||||
> 1 | ||||
> hello | ||||
> between | ||||
> pairs 81 | ||||
> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000 | ||||
> 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 | ||||
When sending a dict argument value, it is serialized to | ||||
"<arg> <item count>" followed by "<key> <len>\n<value>" for each item | ||||
in the dict. | ||||
Dictionary value for unknown command | ||||
$ hg -R server serve --stdio << EOF | ||||
> unknown | ||||
> dict 3 | ||||
> key1 3 | ||||
> foo | ||||
> key2 3 | ||||
> bar | ||||
> key3 3 | ||||
> baz | ||||
> hello | ||||
> 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 | ||||
Incomplete dictionary send | ||||
$ hg -R server serve --stdio << EOF | ||||
> unknown | ||||
> dict 3 | ||||
> key1 3 | ||||
> foo | ||||
> EOF | ||||
0 | ||||
0 | ||||
0 | ||||
0 | ||||
Incomplete value send | ||||
$ hg -R server serve --stdio << EOF | ||||
> unknown | ||||
> dict 3 | ||||
> key1 3 | ||||
> fo | ||||
> EOF | ||||
0 | ||||
0 | ||||
0 | ||||
0 | ||||
Send a command line with spaces | ||||
$ hg -R server serve --stdio << EOF | ||||
> unknown withspace | ||||
> hello | ||||
> between | ||||
> pairs 81 | ||||
> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000 | ||||
> EOF | ||||
0 | ||||
384 | ||||
capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | ||||
1 | ||||
$ hg -R server serve --stdio << EOF | ||||
> unknown with multiple spaces | ||||
> hello | ||||
> between | ||||
> pairs 81 | ||||
> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000 | ||||
> EOF | ||||
0 | ||||
384 | ||||
capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | ||||
1 | ||||
$ hg -R server serve --stdio << EOF | ||||
> unknown with spaces | ||||
> key 10 | ||||
> some value | ||||
> hello | ||||
> between | ||||
> pairs 81 | ||||
> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000 | ||||
> 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 | ||||
Send an unknown command after the "between" | ||||
$ hg -R server serve --stdio << EOF | ||||
> hello | ||||
> between | ||||
> pairs 81 | ||||
> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000unknown | ||||
> EOF | ||||
384 | ||||
capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | ||||
1 | ||||
0 | ||||
And one with arguments | ||||
$ hg -R server serve --stdio << EOF | ||||
> hello | ||||
> between | ||||
> pairs 81 | ||||
> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000unknown | ||||
> foo 5 | ||||
> value | ||||
> bar 3 | ||||
> baz | ||||
> 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 | ||||