tests: add low-level SSH protocol tests
We don't really have good low-level tests for the behavior of the SSH
wire protocol. This commit attempts to establish some.
The added tests consist of a mixture of starting a server
with `hg serve --stdio` and sending bytes to it and using
`hg debugpeer` to go through the official client code. Having
insight into what raw bytes are exchanged as well as what the peer
does is useful.
We also introduce a test extension for modifying the behavior of
the SSH server and peer. For example, we change the server to
not recognize the "hello" command, simulating behavior of <0.9.1
servers.
These tests are generally useful to have. But the impetus for creating
them now is they will be needed for verifying behavior of old clients
and servers when a new SSH protocol is introduced.
Differential Revision: https://phab.mercurial-scm.org/D2026
# no-check-commit because of serve_forever()
https://bz.mercurial-scm.org/1877
$ hg init a
$ cd a
$ echo a > a
$ hg add a
$ hg ci -m 'a'
$ echo b > a
$ hg ci -m'b'
$ hg up 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg book main
$ hg book
* main 0:cb9a9f314b8b
$ echo c > c
$ hg add c
$ hg ci -m'c'
created new head
$ hg book
* main 2:d36c0562f908
$ hg heads
changeset: 2:d36c0562f908
bookmark: main
tag: tip
parent: 0:cb9a9f314b8b
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: c
changeset: 1:1e6c11564562
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
$ hg up 1e6c11564562
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
(leaving bookmark main)
$ hg merge main
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg book
main 2:d36c0562f908
$ hg ci -m'merge'
$ hg book
main 2:d36c0562f908
$ cd ..