Patchwork sshserver: add a couple of tests for argument parsing

login
register
mail settings
Submitter Siddharth Agarwal
Date Jan. 19, 2018, 10:25 p.m.
Message ID <897f09345e370f08c019.1516400752@devvm31800.prn1.facebook.com>
Download mbox | patch
Permalink /patch/26984/
State Accepted
Headers show

Comments

Siddharth Agarwal - Jan. 19, 2018, 10:25 p.m.
# HG changeset patch
# User Siddharth Agarwal <sid0@fb.com>
# Date 1516400709 28800
#      Fri Jan 19 14:25:09 2018 -0800
# Node ID 897f09345e370f08c019e7025d51e3e7ff3832fb
# Parent  6d65cef5b038ff4c141c0bbc1a2e366e45c016a2
sshserver: add a couple of tests for argument parsing

I noticed that we didn't have any unit tests covering wire protocol argument
parsing.
Augie Fackler - Jan. 19, 2018, 10:41 p.m.
> On Jan 19, 2018, at 17:25, Siddharth Agarwal <sid0@fb.com> wrote:
> 
> # HG changeset patch
> # User Siddharth Agarwal <sid0@fb.com>
> # Date 1516400709 28800
> #      Fri Jan 19 14:25:09 2018 -0800
> # Node ID 897f09345e370f08c019e7025d51e3e7ff3832fb
> # Parent  6d65cef5b038ff4c141c0bbc1a2e366e45c016a2
> sshserver: add a couple of tests for argument parsing
> 
> I noticed that we didn't have any unit tests covering wire protocol argument
> parsing.

Nice catch. I'd have taken this even during the freeze, queued, thanks.

Patch

diff --git a/tests/test-sshserver.py b/tests/test-sshserver.py
new file mode 100644
--- /dev/null
+++ b/tests/test-sshserver.py
@@ -0,0 +1,44 @@ 
+from __future__ import absolute_import, print_function
+
+import io
+import unittest
+
+import silenttestrunner
+
+from mercurial import (
+    sshserver,
+    wireproto,
+)
+
+class SSHServerGetArgsTests(unittest.TestCase):
+    def testparseknown(self):
+        tests = [
+            ('* 0\nnodes 0\n', ['', {}]),
+            ('* 0\nnodes 40\n1111111111111111111111111111111111111111\n',
+             ['1111111111111111111111111111111111111111', {}]),
+        ]
+        for input, expected in tests:
+            self.assertparse('known', input, expected)
+
+    def assertparse(self, cmd, input, expected):
+        server = mockserver(input)
+        _func, spec = wireproto.commands[cmd]
+        self.assertEqual(server.getargs(spec), expected)
+
+def mockserver(inbytes):
+    ui = mockui(inbytes)
+    repo = mockrepo(ui)
+    return sshserver.sshserver(ui, repo)
+
+class mockrepo(object):
+    def __init__(self, ui):
+        self.ui = ui
+
+class mockui(object):
+    def __init__(self, inbytes):
+        self.fin = io.BytesIO(inbytes)
+        self.fout = io.BytesIO()
+        self.ferr = io.BytesIO()
+
+if __name__ == '__main__':
+    silenttestrunner.main(__name__)