예제 #1
0
    def test_abort_fails_all_pending_requests(self, read_message):
        request1 = metadata.MetadataRequest()
        request2 = metadata.MetadataRequest(topics=["example.foo"])

        mock_responses = [
            Mock(correlation_id=request1.correlation_id),
            Mock(correlation_id=request2.correlation_id),
        ]

        def get_next_response(*args):
            return self.future_value(mock_responses.pop(0))

        read_message.side_effect = get_next_response

        conn = Connection("localhost", 1234)
        conn.stream = Mock()
        conn.stream.write.return_value = self.future_value(None)

        responses = [conn.send(request1), conn.send(request2)]

        conn.abort()
        conn.abort()  # second abort is a no-op

        for response in responses:
            error = response.exception()
            self.assertEqual(error.host, "localhost")
            self.assertEqual(error.port, 1234)
예제 #2
0
    def test_abort_fails_all_pending_requests(self, read_message):
        request1 = metadata.MetadataRequest()
        request2 = metadata.MetadataRequest(topics=["example.foo"])

        mock_responses = [
            Mock(correlation_id=request1.correlation_id),
            Mock(correlation_id=request2.correlation_id),
        ]

        def get_next_response(*args):
            return self.future_value(mock_responses.pop(0))

        read_message.side_effect = get_next_response

        conn = Connection("localhost", 1234)
        conn.stream = Mock()
        conn.stream.write.return_value = self.future_value(None)

        responses = [conn.send(request1), conn.send(request2)]

        conn.abort()
        conn.abort()  # second abort is a no-op

        for response in responses:
            error = response.exception()
            self.assertEqual(error.host, "localhost")
            self.assertEqual(error.port, 1234)
예제 #3
0
    def test_send_when_closing_causes_error(self):
        error = None

        conn = Connection("localhost", 1234)
        conn.closing = True

        try:
            yield conn.send(Mock())
        except exc.BrokerConnectionError as e:
            error = e

        self.assertEqual(error.host, "localhost")
        self.assertEqual(error.port, 1234)
예제 #4
0
    def test_correlates_responses(self, read_message):
        request1 = metadata.MetadataRequest()
        request2 = metadata.MetadataRequest(topics=["example.foo"])

        response1 = metadata.MetadataResponse(
            brokers=[metadata.Broker(broker_id=1, host="broker01", port=333)],
            topics=[
                metadata.TopicMetadata(error_code=0, name="example.foo"),
                metadata.TopicMetadata(error_code=0, name="example.bar"),
            ]
        )
        response1.correlation_id = request1.correlation_id
        response2 = metadata.MetadataResponse(
            brokers=[metadata.Broker(broker_id=1, host="broker01", port=333)],
            topics=[
                metadata.TopicMetadata(error_code=0, name="example.foo"),
            ]
        )
        response2.correlation_id = request2.correlation_id

        # response2 comes over the wire before response1
        responses = [response2, response1]

        def get_next_response(*args):
            return self.future_value(responses.pop(0))

        read_message.side_effect = get_next_response

        conn = Connection("localhost", 1234)
        conn.stream = Mock()
        conn.stream.write.return_value = self.future_value(None)

        actual_responses = [conn.send(request1), conn.send(request2)]

        yield conn.read_loop()

        # first response is the one with two topics
        self.assertEqual(len(actual_responses[0].result().topics), 2)
        self.assertEqual(len(actual_responses[1].result().topics), 1)
예제 #5
0
    def test_send_when_closing_causes_error(self):
        error = None

        conn = Connection("localhost", 1234)
        conn.closing = True

        try:
            yield conn.send(Mock())
        except exc.BrokerConnectionError as e:
            error = e

        self.assertEqual(error.host, "localhost")
        self.assertEqual(error.port, 1234)
예제 #6
0
    def test_correlates_responses(self, read_message):
        request1 = metadata.MetadataRequest()
        request2 = metadata.MetadataRequest(topics=["example.foo"])

        response1 = metadata.MetadataResponse(
            brokers=[metadata.Broker(broker_id=1, host="broker01", port=333)],
            topics=[
                metadata.TopicMetadata(error_code=0, name="example.foo"),
                metadata.TopicMetadata(error_code=0, name="example.bar"),
            ])
        response1.correlation_id = request1.correlation_id
        response2 = metadata.MetadataResponse(
            brokers=[metadata.Broker(broker_id=1, host="broker01", port=333)],
            topics=[
                metadata.TopicMetadata(error_code=0, name="example.foo"),
            ])
        response2.correlation_id = request2.correlation_id

        # response2 comes over the wire before response1
        responses = [response2, response1]

        def get_next_response(*args):
            return self.future_value(responses.pop(0))

        read_message.side_effect = get_next_response

        conn = Connection("localhost", 1234)
        conn.stream = Mock()
        conn.stream.write.return_value = self.future_value(None)

        actual_responses = [conn.send(request1), conn.send(request2)]

        yield conn.read_loop()

        # first response is the one with two topics
        self.assertEqual(len(actual_responses[0].result().topics), 2)
        self.assertEqual(len(actual_responses[1].result().topics), 1)
예제 #7
0
    def test_immediate_error_writing_to_stream_aborts(self):
        class FakeException(Exception):
            pass

        conn = Connection("localhost", 1234)
        conn.stream = Mock()
        conn.stream.write.side_effect = FakeException("oh no!")

        error = None

        try:
            yield conn.send(metadata.MetadataRequest())
        except FakeException as e:
            error = e

        self.assertEqual(str(error), "oh no!")
        self.assertEqual(conn.closing, True)
        conn.stream.close.assert_called_once_with()
예제 #8
0
    def test_immediate_error_writing_to_stream_aborts(self):

        class FakeException(Exception):
            pass

        conn = Connection("localhost", 1234)
        conn.stream = Mock()
        conn.stream.write.side_effect = FakeException("oh no!")

        error = None

        try:
            yield conn.send(metadata.MetadataRequest())
        except FakeException as e:
            error = e

        self.assertEqual(str(error), "oh no!")
        self.assertEqual(conn.closing, True)
        conn.stream.close.assert_called_once_with()