tests: test using both versions of SSH protocol
Now that the version 2 of the SSH protocol is usable in core, we
can start actively testing it more widely outside of low-level
protocol tests.
We add #testcases variants to a handful of tests so we exercise both
version 1 and version 2 of the SSH protocol when testing. This will
allow us to more easily find regressions and variances as protocol 2
is developed. It will also make it easier to continue testing with
protocol version 1 once version 2 is enabled by default.
There are a handful of tests using ssh:// that should also gain test
variances. One - test-push-race.t - already has a #testcases. This
would require combinatorial cases. I didn't want to go down that
rabbit hole, so that test is unchanged. Thinking aloud, there is
probably an opportunity to automatically run tests with multiple
server/protocol implementations. Ideally any test that performed
server interaction would run with all supported server implementations
and protocols so we could find variances between servers and protocols.
But this has been a long-standing issue with our test harness. I
don't think it is an easily solved problem. But it would be nice...
Differential Revision: https://phab.mercurial-scm.org/D2206
--- a/tests/test-bundle2-exchange.t Thu Feb 08 11:39:23 2018 -0800
+++ b/tests/test-bundle2-exchange.t Mon Feb 12 16:35:06 2018 -0800
@@ -1,3 +1,13 @@
+#testcases sshv1 sshv2
+
+#if sshv2
+ $ cat >> $HGRCPATH << EOF
+ > [experimental]
+ > sshpeer.advertise-v2 = true
+ > sshserver.support-v2 = true
+ > EOF
+#endif
+
Test exchange of common information using bundle2
--- a/tests/test-bundle2-pushback.t Thu Feb 08 11:39:23 2018 -0800
+++ b/tests/test-bundle2-pushback.t Mon Feb 12 16:35:06 2018 -0800
@@ -1,3 +1,13 @@
+#testcases sshv1 sshv2
+
+#if sshv2
+ $ cat >> $HGRCPATH << EOF
+ > [experimental]
+ > sshpeer.advertise-v2 = true
+ > sshserver.support-v2 = true
+ > EOF
+#endif
+
$ cat > bundle2.py << EOF
> """A small extension to test bundle2 pushback parts.
> Current bundle2 implementation doesn't provide a way to generate those
--- a/tests/test-bundle2-remote-changegroup.t Thu Feb 08 11:39:23 2018 -0800
+++ b/tests/test-bundle2-remote-changegroup.t Mon Feb 12 16:35:06 2018 -0800
@@ -1,5 +1,15 @@
#require killdaemons
+#testcases sshv1 sshv2
+
+#if sshv2
+ $ cat >> $HGRCPATH << EOF
+ > [experimental]
+ > sshpeer.advertise-v2 = true
+ > sshserver.support-v2 = true
+ > EOF
+#endif
+
Create an extension to test bundle2 remote-changegroup parts
$ cat > bundle2.py << EOF
--- a/tests/test-clone.t Thu Feb 08 11:39:23 2018 -0800
+++ b/tests/test-clone.t Mon Feb 12 16:35:06 2018 -0800
@@ -1,3 +1,13 @@
+#testcases sshv1 sshv2
+
+#if sshv2
+ $ cat >> $HGRCPATH << EOF
+ > [experimental]
+ > sshpeer.advertise-v2 = true
+ > sshserver.support-v2 = true
+ > EOF
+#endif
+
Prepare repo a:
$ hg init a
@@ -1142,12 +1152,14 @@
#if windows
$ hg clone "ssh://%26touch%20owned%20/" --debug
running sh -c "read l; read l; read l" "&touch owned " "hg -R . serve --stdio"
+ sending upgrade request: * proto=exp-ssh-v2-0001 (glob) (sshv2 !)
sending hello command
sending between command
abort: no suitable response from remote hg!
[255]
$ hg clone "ssh://example.com:%26touch%20owned%20/" --debug
running sh -c "read l; read l; read l" -p "&touch owned " example.com "hg -R . serve --stdio"
+ sending upgrade request: * proto=exp-ssh-v2-0001 (glob) (sshv2 !)
sending hello command
sending between command
abort: no suitable response from remote hg!
@@ -1155,12 +1167,14 @@
#else
$ hg clone "ssh://%3btouch%20owned%20/" --debug
running sh -c "read l; read l; read l" ';touch owned ' 'hg -R . serve --stdio'
+ sending upgrade request: * proto=exp-ssh-v2-0001 (glob) (sshv2 !)
sending hello command
sending between command
abort: no suitable response from remote hg!
[255]
$ hg clone "ssh://example.com:%3btouch%20owned%20/" --debug
running sh -c "read l; read l; read l" -p ';touch owned ' example.com 'hg -R . serve --stdio'
+ sending upgrade request: * proto=exp-ssh-v2-0001 (glob) (sshv2 !)
sending hello command
sending between command
abort: no suitable response from remote hg!
@@ -1169,6 +1183,7 @@
$ hg clone "ssh://v-alid.example.com/" --debug
running sh -c "read l; read l; read l" v-alid\.example\.com ['"]hg -R \. serve --stdio['"] (re)
+ sending upgrade request: * proto=exp-ssh-v2-0001 (glob) (sshv2 !)
sending hello command
sending between command
abort: no suitable response from remote hg!
--- a/tests/test-largefiles-wireproto.t Thu Feb 08 11:39:23 2018 -0800
+++ b/tests/test-largefiles-wireproto.t Mon Feb 12 16:35:06 2018 -0800
@@ -1,3 +1,13 @@
+#testcases sshv1 sshv2
+
+#if sshv2
+ $ cat >> $HGRCPATH << EOF
+ > [experimental]
+ > sshpeer.advertise-v2 = true
+ > sshserver.support-v2 = true
+ > EOF
+#endif
+
This file contains testcases that tend to be related to the wire protocol part
of largefiles.
--- a/tests/test-pull.t Thu Feb 08 11:39:23 2018 -0800
+++ b/tests/test-pull.t Mon Feb 12 16:35:06 2018 -0800
@@ -1,5 +1,15 @@
#require serve
+#testcases sshv1 sshv2
+
+#if sshv2
+ $ cat >> $HGRCPATH << EOF
+ > [experimental]
+ > sshpeer.advertise-v2 = true
+ > sshserver.support-v2 = true
+ > EOF
+#endif
+
$ hg init test
$ cd test
--- a/tests/test-ssh-bundle1.t Thu Feb 08 11:39:23 2018 -0800
+++ b/tests/test-ssh-bundle1.t Mon Feb 12 16:35:06 2018 -0800
@@ -1,6 +1,16 @@
This test is a duplicate of 'test-http.t' feel free to factor out
parts that are not bundle1/bundle2 specific.
+#testcases sshv1 sshv2
+
+#if sshv2
+ $ cat >> $HGRCPATH << EOF
+ > [experimental]
+ > sshpeer.advertise-v2 = true
+ > sshserver.support-v2 = true
+ > EOF
+#endif
+
$ cat << EOF >> $HGRCPATH
> [devel]
> # This test is dedicated to interaction through old bundle
@@ -465,11 +475,13 @@
$ hg pull --debug ssh://user@dummy/remote
pulling from ssh://user@dummy/remote
running .* ".*/dummyssh" ['"]user@dummy['"] ('|")hg -R remote serve --stdio('|") (re)
+ sending upgrade request: * proto=exp-ssh-v2-0001 (glob) (sshv2 !)
sending hello command
sending between command
- remote: 384
+ protocol upgraded to exp-ssh-v2-0001 (sshv2 !)
+ remote: 384 (sshv1 !)
remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- remote: 1
+ remote: 1 (sshv1 !)
preparing listkeys for "bookmarks"
sending listkeys command
received listkey for "bookmarks": 45 bytes
--- a/tests/test-ssh-clone-r.t Thu Feb 08 11:39:23 2018 -0800
+++ b/tests/test-ssh-clone-r.t Mon Feb 12 16:35:06 2018 -0800
@@ -1,5 +1,15 @@
This test tries to exercise the ssh functionality with a dummy script
+#testcases sshv1 sshv2
+
+#if sshv2
+ $ cat >> $HGRCPATH << EOF
+ > [experimental]
+ > sshpeer.advertise-v2 = true
+ > sshserver.support-v2 = true
+ > EOF
+#endif
+
creating 'remote' repo
$ hg init remote
--- a/tests/test-ssh.t Thu Feb 08 11:39:23 2018 -0800
+++ b/tests/test-ssh.t Mon Feb 12 16:35:06 2018 -0800
@@ -1,3 +1,12 @@
+#testcases sshv1 sshv2
+
+#if sshv2
+ $ cat >> $HGRCPATH << EOF
+ > [experimental]
+ > sshpeer.advertise-v2 = true
+ > sshserver.support-v2 = true
+ > EOF
+#endif
This test tries to exercise the ssh functionality with a dummy script
@@ -481,14 +490,16 @@
$ hg pull --debug ssh://user@dummy/remote --config devel.debug.peer-request=yes
pulling from ssh://user@dummy/remote
running .* ".*/dummyssh" ['"]user@dummy['"] ('|")hg -R remote serve --stdio('|") (re)
+ sending upgrade request: * proto=exp-ssh-v2-0001 (glob) (sshv2 !)
devel-peer-request: hello
sending hello command
devel-peer-request: between
devel-peer-request: pairs: 81 bytes
sending between command
- remote: 384
+ remote: 384 (sshv1 !)
+ protocol upgraded to exp-ssh-v2-0001 (sshv2 !)
remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
- remote: 1
+ remote: 1 (sshv1 !)
query 1; heads
devel-peer-request: batch
devel-peer-request: cmds: 141 bytes