41
42
from bzrlib.bundle.serializer.v4 import BundleSerializerV4
42
43
from bzrlib.repofmt import knitrepo
43
44
from bzrlib.tests import (
47
50
from bzrlib.transform import TreeTransform
48
from bzrlib.tests import (
53
53
def get_text(vf, key):
1836
1836
bundle, then the ConnectionReset error should be propagated.
1838
1838
# Instantiate a server that will provoke a ConnectionReset
1839
sock_server = _DisconnectingTCPServer()
1839
sock_server = DisconnectingServer()
1840
1840
self.start_server(sock_server)
1841
1841
# We don't really care what the url is since the server will close the
1842
1842
# connection without interpreting it
1844
1844
self.assertRaises(errors.ConnectionReset, read_mergeable_from_url, url)
1847
class _DisconnectingTCPServer(object):
1848
"""A TCP server that immediately closes any connection made to it."""
1850
def start_server(self):
1851
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
1852
self.sock.bind(('127.0.0.1', 0))
1854
self.port = self.sock.getsockname()[1]
1855
self.thread = threading.Thread(
1856
name='%s (port %d)' % (self.__class__.__name__, self.port),
1857
target=self.accept_and_close)
1860
def accept_and_close(self):
1861
conn, addr = self.sock.accept()
1862
conn.shutdown(socket.SHUT_RDWR)
1847
class DisconnectingHandler(SocketServer.BaseRequestHandler):
1848
"""A request handler that immediately closes any connection made to it."""
1851
self.request.close()
1854
class DisconnectingServer(test_server.TestingTCPServerInAThread):
1857
super(DisconnectingServer, self).__init__(
1859
test_server.TestingTCPServer,
1860
DisconnectingHandler)
1865
1862
def get_url(self):
1866
return 'bzr://127.0.0.1:%d/' % (self.port,)
1868
def stop_server(self):
1870
# make sure the thread dies by connecting to the listening socket,
1871
# just in case the test failed to do so.
1872
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
1873
conn.connect(self.sock.getsockname())
1875
except socket.error:
1863
"""Return the url of the server"""
1864
return "bzr://%s:%d/" % self.server.server_address