Beispiel #1
0
    def test_tryConnection_logs_error(self):
        listener = PostgresListenerService()

        exception_type = factory.make_exception_type()
        exception_message = factory.make_name("message")

        startConnection = self.patch(listener, "startConnection")
        startConnection.side_effect = exception_type(exception_message)

        with TwistedLoggerFixture() as logger:
            with ExpectedException(exception_type):
                yield listener.tryConnection()

        self.assertThat(logger.events, HasLength(1))
        self.assertThat(
            logger.events[0],
            ContainsDict({
                "log_format":
                Equals("Unable to connect to database: {error}"),
                "log_level":
                Equals(LogLevel.error),
                "error":
                Equals(exception_message),
            }),
        )
Beispiel #2
0
    def test_tryConnection_connects_to_database(self):
        listener = PostgresListenerService()

        yield listener.tryConnection()
        try:
            self.assertTrue(listener.connected())
        finally:
            yield listener.stopService()
Beispiel #3
0
    def test__tryConnection_sets_registeredChannels_to_True(self):
        listener = PostgresListenerService()

        yield listener.tryConnection()
        try:
            self.assertTrue(listener.registeredChannels)
        finally:
            yield listener.stopService()
Beispiel #4
0
    def test_tryConnection_closes_connection_on_failure(self):
        listener = PostgresListenerService()

        exc_type = factory.make_exception_type()
        startReading = self.patch(listener, "startReading")
        startReading.side_effect = exc_type("no reason")

        with ExpectedException(exc_type):
            yield listener.tryConnection()

        self.assertThat(listener.connection, Is(None))
Beispiel #5
0
    def test_tryConnection_adds_self_to_reactor(self):
        listener = PostgresListenerService()

        # Spy on calls to reactor.addReader.
        self.patch(reactor, "addReader").side_effect = reactor.addReader

        yield listener.tryConnection()
        try:
            self.assertThat(reactor.addReader, MockCalledOnceWith(listener))
        finally:
            yield listener.stopService()
Beispiel #6
0
    def test__tryConnection_logs_success(self):
        listener = PostgresListenerService()

        with TwistedLoggerFixture() as logger:
            yield listener.tryConnection()
            try:
                self.assertThat(
                    logger.output,
                    Equals("Listening for database notifications."))
            finally:
                yield listener.stopService()
Beispiel #7
0
    def test_tryConnection_will_retry_in_3_seconds_if_autoReconnect_set(self):
        listener = PostgresListenerService()
        listener.autoReconnect = True

        startConnection = self.patch(listener, "startConnection")
        startConnection.side_effect = factory.make_exception()
        deferLater = self.patch(listener_module, "deferLater")
        deferLater.return_value = sentinel.retry

        result = yield listener.tryConnection()

        self.assertThat(result, Is(sentinel.retry))
        self.assertThat(deferLater, MockCalledWith(reactor, 3, ANY))
Beispiel #8
0
    def test__tryConnection_calls_registerChannels_after_startConnection(self):
        listener = PostgresListenerService()

        exception_type = factory.make_exception_type()

        self.patch(listener, "startConnection")
        mock_registerChannels = self.patch(listener, "registerChannels")
        mock_registerChannels.side_effect = exception_type

        with ExpectedException(exception_type):
            yield listener.tryConnection()

        self.assertThat(mock_registerChannels, MockCalledOnceWith())
Beispiel #9
0
    def test_tryConnection_will_not_retry_if_autoReconnect_not_set(self):
        listener = PostgresListenerService()
        listener.autoReconnect = False

        exception_type = factory.make_exception_type()
        exception_message = factory.make_name("message")

        startConnection = self.patch(listener, "startConnection")
        startConnection.side_effect = exception_type(exception_message)
        deferLater = self.patch(listener_module, "deferLater")
        deferLater.return_value = sentinel.retry

        with ExpectedException(exception_type):
            yield listener.tryConnection()

        self.assertThat(deferLater, MockNotCalled())
Beispiel #10
0
 def test__tryConnection_reregisters_channels(self):
     listener = PostgresListenerService()
     handler = object()
     listener.register("channel", handler)
     yield listener.startService()
     yield listener.channelRegistrarDone
     listener.registerChannel = Mock()
     yield listener.stopService()
     yield listener.tryConnection()
     yield listener.channelRegistrarDone
     try:
         self.assertEqual([call("channel")],
                          listener.registerChannel.mock_calls)
         self.assertEqual({"channel": [handler]}, listener.listeners)
         self.assertEqual(set(["channel"]), listener.registeredChannels)
     finally:
         yield listener.stopService()