def test_process_queued(self, cur_time):
        """
        Test the basic process_queued functionality.
        +ve cases
        1. Enqueues the request in the right queue for the service.
        2. Checks that the queue is not full before enqueuing the request.
        -ve cases
        1. Fails if the processor is being shutdown.
        2. Fails if the message type is not a call or one way message.
        3. Fails if there is no service type in the message specified.
        4. Fails if the service is not registered.
        5. Fails if the queue is full.
        """

        # Fake the current time
        cur_time.return_value = 5

        # Start by doing a lot of magic.
        iprot = MagicMock()
        oprot = MagicMock()
        otrans = MagicMock()
        otrans.getvalue.return_value = 0
        callback = MagicMock()

        mock_queue = MagicMock()
        mock_queue.qsize.return_value = 5
        processor = MagicMock()
        service_mock = ServiceProcessor("Fake", processor, mock_queue,
                                        MagicMock(), 10)

        m_processor = TMultiplexedProcessor()
        m_processor.services["Fake"] = service_mock

        iprot.readMessageBegin.return_value = \
            ("Fake:test", TMessageType.CALL, 3)
        standardMessage = ("test", TMessageType.CALL, 3)
        m_iprot = StoredMessageProtocol(iprot, standardMessage)
        m_processor.process_queued(iprot, oprot, otrans, callback)

        # Invoke a custom matcher so we compare equivalence and not identity
        # for the StandardMessage
        matcher = Matcher(compare_standard_msg, m_iprot)

        # assert that queue size and put were called
        mock_queue.assert_has_calls([call.qsize()])
        mock_queue.put.assert_called_with(
            [processor, matcher, oprot, otrans, callback, 5])

        # Negative tests

        # Test shutting down.
        callback.reset_mock()
        m_processor = TMultiplexedProcessor()
        m_processor.shutting_down = True
        m_processor.process_queued(iprot, oprot, otrans, callback)
        callback.assert_called_once_with(False, '')

        # Test invalid_message
        callback.reset_mock()
        iprot.readMessageBegin.return_value = \
            ("Faketest", TMessageType.CALL, 3)
        m_processor = TMultiplexedProcessor()
        m_processor.process_queued(iprot, oprot, otrans, callback)
        callback.assert_called_once_with(False, '')

        # Test unknown service
        callback.reset_mock()
        iprot.readMessageBegin.return_value = \
            ("Fake1:test", TMessageType.CALL, 3)
        m_processor = TMultiplexedProcessor()
        m_processor.process_queued(iprot, oprot, otrans, callback)
        callback.assert_called_once_with(False, '')

        # Test full queue
        callback.reset_mock()
        iprot.readMessageBegin.return_value = \
            ("Fake:test", TMessageType.CALL, 3)
        service_mock = ServiceProcessor("Fake", processor, mock_queue,
                                        MagicMock(), 10)
        m_processor = TMultiplexedProcessor()
        m_processor.services["Fake"] = service_mock
        mock_queue.qsize.return_value = 10
        m_processor.process_queued(iprot, oprot, otrans, callback)
        callback.assert_called_once_with(False, '')
    def test_process_queued(self, cur_time):
        """
        Test the basic process_queued functionality.
        +ve cases
        1. Enqueues the request in the right queue for the service.
        2. Checks that the queue is not full before enqueuing the request.
        -ve cases
        1. Fails if the processor is being shutdown.
        2. Fails if the message type is not a call or one way message.
        3. Fails if there is no service type in the message specified.
        4. Fails if the service is not registered.
        5. Fails if the queue is full.
        """

        # Fake the current time
        cur_time.return_value = 5

        # Start by doing a lot of magic.
        iprot = MagicMock()
        oprot = MagicMock()
        otrans = MagicMock()
        otrans.getvalue.return_value = 0
        callback = MagicMock()

        mock_queue = MagicMock()
        mock_queue.qsize.return_value = 5
        processor = MagicMock()
        service_mock = ServiceProcessor("Fake", processor, mock_queue,
                                        MagicMock(), 10)

        m_processor = TMultiplexedProcessor()
        m_processor.services["Fake"] = service_mock

        iprot.readMessageBegin.return_value = \
            ("Fake:test", TMessageType.CALL, 3)
        standardMessage = ("test", TMessageType.CALL, 3)
        m_iprot = StoredMessageProtocol(iprot, standardMessage)
        m_processor.process_queued(iprot, oprot, otrans, callback)

        # Invoke a custom matcher so we compare equivalence and not identity
        # for the StandardMessage
        matcher = Matcher(compare_standard_msg, m_iprot)

        # assert that queue size and put were called
        mock_queue.assert_has_calls([call.qsize()])
        mock_queue.put.assert_called_with([processor, matcher, oprot, otrans,
                                           callback, 5])

        # Negative tests

        # Test shutting down.
        callback.reset_mock()
        m_processor = TMultiplexedProcessor()
        m_processor.shutting_down = True
        m_processor.process_queued(iprot, oprot, otrans, callback)
        callback.assert_called_once_with(False, '')

        # Test invalid_message
        callback.reset_mock()
        iprot.readMessageBegin.return_value = \
            ("Faketest", TMessageType.CALL, 3)
        m_processor = TMultiplexedProcessor()
        m_processor.process_queued(iprot, oprot, otrans, callback)
        callback.assert_called_once_with(False, '')

        # Test unknown service
        callback.reset_mock()
        iprot.readMessageBegin.return_value = \
            ("Fake1:test", TMessageType.CALL, 3)
        m_processor = TMultiplexedProcessor()
        m_processor.process_queued(iprot, oprot, otrans, callback)
        callback.assert_called_once_with(False, '')

        # Test full queue
        callback.reset_mock()
        iprot.readMessageBegin.return_value = \
            ("Fake:test", TMessageType.CALL, 3)
        service_mock = ServiceProcessor("Fake", processor, mock_queue,
                                        MagicMock(), 10)
        m_processor = TMultiplexedProcessor()
        m_processor.services["Fake"] = service_mock
        mock_queue.qsize.return_value = 10
        m_processor.process_queued(iprot, oprot, otrans, callback)
        callback.assert_called_once_with(False, '')