def test_stopping_logs_errors_when_closing_connections(self): service = RegionService(sentinel.ipcWorker) service.starting = Deferred() service.starting.addErrback( lambda failure: failure.trap(CancelledError)) service.factory.protocol = HandshakingRegionServer connections = { service.factory.buildProtocol(None), service.factory.buildProtocol(None), } for conn in connections: transport = self.patch(conn, "transport") transport.loseConnection.side_effect = OSError("broken") # Pretend it's already connected. service.connections[conn.ident].add(conn) logger = self.useFixture(TwistedLoggerFixture()) # stopService() completes without returning an error. yield service.stopService() # Connection-specific errors are logged. self.assertDocTestMatches( """\ Failure when closing RPC connection. Traceback (most recent call last): ... builtins.OSError: broken ... Failure when closing RPC connection. Traceback (most recent call last): ... builtins.OSError: broken """, logger.dump(), )
def test_stopping_closes_connections_cleanly(self): service = RegionService(sentinel.ipcWorker) service.starting = Deferred() service.starting.addErrback( lambda failure: failure.trap(CancelledError)) service.factory.protocol = HandshakingRegionServer connections = { service.factory.buildProtocol(None), service.factory.buildProtocol(None), } for conn in connections: # Pretend it's already connected. service.connections[conn.ident].add(conn) transports = {self.patch(conn, "transport") for conn in connections} yield service.stopService() self.assertThat( transports, AllMatch( AfterPreprocessing(attrgetter("loseConnection"), MockCalledOnceWith())))