pull/7185/head
Erik Johnston 2020-03-31 13:25:09 +01:00
parent 7e2593bc4d
commit 90bd1708b5
3 changed files with 26 additions and 33 deletions

View File

@ -15,10 +15,9 @@
from mock import Mock, NonCallableMock from mock import Mock, NonCallableMock
from synapse.replication.tcp.client import ( from synapse.replication.tcp.client import ReplicationClientFactory
ReplicationClientFactory, from synapse.replication.tcp.handler import ReplicationCommandHandler
ReplicationClientHandler, from synapse.replication.tcp.client import ReplicationDataHandler
)
from synapse.replication.tcp.resource import ReplicationStreamProtocolFactory from synapse.replication.tcp.resource import ReplicationStreamProtocolFactory
from synapse.storage.database import make_conn from synapse.storage.database import make_conn
@ -51,15 +50,20 @@ class BaseSlavedStoreTestCase(unittest.HomeserverTestCase):
self.event_id = 0 self.event_id = 0
server_factory = ReplicationStreamProtocolFactory(self.hs) server_factory = ReplicationStreamProtocolFactory(self.hs)
self.streamer = server_factory.streamer self.streamer = hs.get_replication_streamer()
handler_factory = Mock() # We now do some gut wrenching so that we have a client that is based
self.replication_handler = ReplicationClientHandler(self.slaved_store) # off of the slave store rather than the main store.
self.replication_handler.factory = handler_factory self.replication_handler = ReplicationCommandHandler(self.hs)
self.replication_handler.store = self.slaved_store
self.replication_handler.replication_data_handler = ReplicationDataHandler(
self.slaved_store
)
client_factory = ReplicationClientFactory( client_factory = ReplicationClientFactory(
self.hs, "client_name", self.replication_handler self.hs, "client_name", self.replication_handler
) )
client_factory.handler = self.replication_handler
server = server_factory.buildProtocol(None) server = server_factory.buildProtocol(None)
client = client_factory.buildProtocol(None) client = client_factory.buildProtocol(None)

View File

@ -15,7 +15,7 @@
from mock import Mock from mock import Mock
from synapse.replication.tcp.commands import ReplicateCommand from synapse.replication.tcp.handler import ReplicationCommandHandler
from synapse.replication.tcp.protocol import ClientReplicationStreamProtocol from synapse.replication.tcp.protocol import ClientReplicationStreamProtocol
from synapse.replication.tcp.resource import ReplicationStreamProtocolFactory from synapse.replication.tcp.resource import ReplicationStreamProtocolFactory
@ -26,15 +26,20 @@ from tests.server import FakeTransport
class BaseStreamTestCase(unittest.HomeserverTestCase): class BaseStreamTestCase(unittest.HomeserverTestCase):
"""Base class for tests of the replication streams""" """Base class for tests of the replication streams"""
def make_homeserver(self, reactor, clock):
self.test_handler = Mock(wraps=TestReplicationClientHandler())
return self.setup_test_homeserver(replication_data_handler=self.test_handler)
def prepare(self, reactor, clock, hs): def prepare(self, reactor, clock, hs):
# build a replication server # build a replication server
server_factory = ReplicationStreamProtocolFactory(self.hs) server_factory = ReplicationStreamProtocolFactory(hs)
self.streamer = server_factory.streamer self.streamer = hs.get_replication_streamer()
self.server = server_factory.buildProtocol(None) self.server = server_factory.buildProtocol(None)
self.test_handler = Mock(wraps=TestReplicationClientHandler()) repl_handler = ReplicationCommandHandler(hs)
repl_handler.handler = self.test_handler
self.client = ClientReplicationStreamProtocol( self.client = ClientReplicationStreamProtocol(
hs, "client", "test", clock, self.test_handler, hs, "client", "test", clock, repl_handler,
) )
self._client_transport = None self._client_transport = None
@ -69,14 +74,8 @@ class BaseStreamTestCase(unittest.HomeserverTestCase):
self.streamer.on_notifier_poke() self.streamer.on_notifier_poke()
self.pump(0.1) self.pump(0.1)
def replicate_stream(self):
"""Make the client end a REPLICATE command to set up a subscription to a stream"""
self.client.send_command(ReplicateCommand())
class TestReplicationClientHandler(object):
"""Drop-in for ReplicationClientHandler which just collects RDATA rows"""
class TestReplicationClientHandler:
def __init__(self): def __init__(self):
self.streams = set() self.streams = set()
self._received_rdata_rows = [] self._received_rdata_rows = []
@ -88,18 +87,9 @@ class TestReplicationClientHandler(object):
positions[stream] = max(token, positions.get(stream, 0)) positions[stream] = max(token, positions.get(stream, 0))
return positions return positions
def get_currently_syncing_users(self):
return []
def update_connection(self, connection):
pass
def finished_connecting(self):
pass
async def on_position(self, stream_name, token):
"""Called when we get new position data."""
async def on_rdata(self, stream_name, token, rows): async def on_rdata(self, stream_name, token, rows):
for r in rows: for r in rows:
self._received_rdata_rows.append((stream_name, token, r)) self._received_rdata_rows.append((stream_name, token, r))
async def on_position(self, stream_name, token):
pass

View File

@ -24,7 +24,6 @@ class ReceiptsStreamTestCase(BaseStreamTestCase):
self.reconnect() self.reconnect()
# make the client subscribe to the receipts stream # make the client subscribe to the receipts stream
self.replicate_stream()
self.test_handler.streams.add("receipts") self.test_handler.streams.add("receipts")
# tell the master to send a new receipt # tell the master to send a new receipt