Rev 10: Use python-svn for testing server. Currently still fails with 'Malformed network data' error in file:///home/jelmer/bzr/bzrsvnserve/
Jelmer Vernooij
jelmer at samba.org
Mon Jan 22 13:58:09 GMT 2007
------------------------------------------------------------
revno: 10
revision-id: jelmer at samba.org-20070122135806-vrx4xj1uq5d8v3x1
parent: jelmer at samba.org-20070122131330-os8xa31ka1vyfjml
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: bzrsvnserve
timestamp: Mon 2007-01-22 14:58:06 +0100
message:
Use python-svn for testing server. Currently still fails with 'Malformed network data' error
modified:
marshall.py marshall.py-20070122110546-ggdrkocyus0pjsqd-1
svnserver.py svnserver.py-20061015150253-0jjovnw1ax00rjlb-1
tests/test_marshall.py test_marshall.py-20070122110633-944cvow1y1hg6krp-1
tests/test_server.py test_server.py-20070122114402-zcwhr4cxc67jvakf-1
=== modified file 'marshall.py'
--- a/marshall.py 2007-01-22 12:58:40 +0000
+++ b/marshall.py 2007-01-22 13:58:06 +0000
@@ -23,6 +23,9 @@
def __str__(self):
return self.txt
+ def __repr__(self):
+ return self.txt
+
# 1. Syntactic structure
# ----------------------
#
@@ -42,6 +45,7 @@
def __init__(self, msg):
BzrError.__init__(self, msg)
+
def marshall(x):
if isinstance(x, int):
return "%d " % x
@@ -53,6 +57,7 @@
return "%d:%s " % (len(x), x)
raise MarshallError("Unable to marshall type %s" % x)
+
def unmarshall(x):
whitespace = ['\n', ' ']
if len(x) == 0:
=== modified file 'svnserver.py'
--- a/svnserver.py 2007-01-22 13:13:30 +0000
+++ b/svnserver.py 2007-01-22 13:58:06 +0000
@@ -16,10 +16,14 @@
from bzrlib.branch import Branch
from bzrlib.errors import BzrError
+from bzrlib.trace import mutter
import os
-from marshall import marshall, unmarshall, literal
+from marshall import marshall, unmarshall, literal, MarshallError
+
+SVN_MAJOR_VERSION = 1
+SVN_MINOR_VERSION = 2
class SVNServer:
def __init__(self, rootdir, recv_fn, send_fn):
@@ -27,10 +31,12 @@
self.recv_fn = recv_fn
self.send_fn = send_fn
self.inbuffer = ""
+ self._stop = False
def send_greeting(self):
- self.send_msg([literal("success"), [1, 2, [literal("ANONYMOUS")],
- [ literal("edit-pipeline") ] ]])
+ self.send_msg([literal("success"),
+ [SVN_MAJOR_VERSION, SVN_MINOR_VERSION, [literal("ANONYMOUS")],
+ [ ] ]])
def send_mechs(self):
self.send_msg([literal("success"), [literal("ANONYMOUS")], ""])
@@ -85,6 +91,12 @@
def serve(self):
self.send_greeting()
(version, capabilities, url) = self.recv_msg()
+ self.capabilities = capabilities
+ self.version = version
+ self.url = url
+ mutter("client supports:")
+ mutter(" version %r" % version)
+ mutter(" capabilities %r " % capabilities)
self.send_mechs()
@@ -99,19 +111,24 @@
self.branch.base.replace(self.rootdir, rooturl)]])
# Expect:
- while not self.instr.closed:
+ while not self._stop:
( cmd, args ) = self.recv_msg()
self.commands[cmd](self, *args)
+ def close(self):
+ self._stop = True
+
def recv_msg(self):
# FIXME: Blocking read?
while True:
try:
self.inbuffer += self.recv_fn()
(self.inbuffer, ret) = unmarshall(self.inbuffer)
+ mutter('in: %r' % ret)
return ret
- except IndexError:
- pass
+ except MarshallError, e:
+ mutter('ERROR: %r' % e)
def send_msg(self, data):
+ mutter('out: %r' % data)
self.send_fn(marshall(data))
=== modified file 'tests/test_marshall.py'
--- a/tests/test_marshall.py 2007-01-22 12:58:40 +0000
+++ b/tests/test_marshall.py 2007-01-22 13:58:06 +0000
@@ -26,6 +26,10 @@
l = literal("foo bar")
self.assertEqual("foo bar", l.__str__())
+ def test_literal_rep(self):
+ l = literal("foo bar")
+ self.assertEqual("foo bar", l.__repr__())
+
def test_marshall_error(self):
e = MarshallError("bla bla")
self.assertEqual("bla bla", e.__str__())
=== modified file 'tests/test_server.py'
--- a/tests/test_server.py 2007-01-22 13:13:30 +0000
+++ b/tests/test_server.py 2007-01-22 13:58:06 +0000
@@ -21,17 +21,51 @@
from cStringIO import StringIO
import os
+import socket
+import threading
-class TestServer(TestCaseInTempDir):
+class DryTestServer(TestCaseInTempDir):
def setUp(self):
- super(TestServer, self).setUp()
+ super(DryTestServer, self).setUp()
self.branch_path = os.path.join(self.test_dir, 'a')
self.branch = Branch.initialize(self.branch_path)
self.outstr = StringIO()
- self.server = SVNServer(self.branch_path, None, self.outstr.send)
+ self.server = SVNServer(self.branch_path, None, self.outstr.write)
def test_send_greeting(self):
self.server.send_greeting()
self.outstr.seek(0)
- self.assertEqual("( success ( 1 2 ( ANONYMOUS ) ( edit-pipeline ) ) ) ",
+ self.assertEqual("( success ( 1 2 ( ANONYMOUS ) ( ) ) ) ",
self.outstr.read())
+
+import svn.client, svn.ra
+from svn.core import Pool
+
+class NativeTestServer(TestCaseInTempDir):
+ def setUp(self):
+ super(NativeTestServer, self).setUp()
+ self.branch_path = os.path.join(self.test_dir, 'a')
+ self.branch = Branch.initialize(self.branch_path)
+ self.outstr = StringIO()
+ self.pool = Pool()
+ self.client_ctx = svn.client.create_context(self.pool)
+ self.server = SVNServer(self.branch_path, None, self.outstr.write)
+ server_sock = socket.socket()
+ server_sock.listen(1)
+ addr = server_sock.getsockname()
+ def handle_connection():
+ sock, client_addr = server_sock.accept()
+ self.server = SVNServer(self.branch_path, lambda: sock.recv(1024), sock.send)
+ self.server.serve()
+ self.server_thread = threading.Thread(None, handle_connection, name='svn-smart-server')
+ self.server_thread.setDaemon(True)
+ self.server_thread.start()
+ self.ra = svn.client.open_ra_session("svn://%s:%d/" % addr,
+ self.client_ctx, self.pool)
+
+ def tearDown(self):
+ super(NativeTestServer, self).tearDown()
+ self.server.close()
+
+ def test_get_uuid(self):
+ self.assertEqual("foo", svn.ra.get_uuid(self.ra))
More information about the bazaar-commits
mailing list