예제 #1
0
def test_on_start__no_errors():
    def data_handler1(context):
        return "data1"

    def data_handler2(context):
        return "data2"

    scheduled_topic = ScheduledTopic(topic_name='s_topic',
                                     data_handler=data_handler1,
                                     interval_in_sec=5)
    topic = Topic(topic_name='topic', data_handler=data_handler2)

    handler = PublisherBrokerHandler(mock.Mock())

    sender = mock.Mock()
    handler._create_sender = mock.Mock(return_value=sender)
    mock_init_scheduled_topic = Mock()
    handler._init_scheduled_topic = mock_init_scheduled_topic

    handler.add_topic(topic)
    handler.add_topic(scheduled_topic)

    event = mock.Mock()
    with mock.patch.object(BrokerHandler, 'on_start'):
        handler.on_start(event)

        assert sender == handler._sender
        mock_init_scheduled_topic.assert_called_once_with(scheduled_topic)
예제 #2
0
def test_add_topic__topic_is_added():
    handler = PublisherBrokerHandler(mock.Mock())

    def data_handler(context=None):
        return "data"

    topic = Topic(topic_name='topic', data_handler=data_handler)

    handler.add_topic(topic)

    assert 1 == len(handler.topics)
    assert topic in handler.topics
예제 #3
0
def test_send_message__no_credit__message_is_not_sent_and_logs_message(caplog):
    caplog.set_level(logging.DEBUG)

    handler = PublisherBrokerHandler(mock.Mock())
    mock_sender = Mock()
    mock_sender.credit = 0
    handler._sender = mock_sender

    message = Message(body="topic data")
    subject = "subject"

    handler.send_message(message=message, subject=subject)

    log_message = caplog.records[0]
    assert f"No credit to send message {message}..." == log_message.message
예제 #4
0
def test_init_scheduled_topic():
    handler = PublisherBrokerHandler(mock.Mock())
    handler.container = mock.Mock()
    handler.container.schedule = mock.Mock()

    def data_handler(context=None):
        return "data"

    scheduled_topic = ScheduledTopic(topic_name='topic',
                                     data_handler=data_handler,
                                     interval_in_sec=5)

    handler._init_scheduled_topic(scheduled_topic)

    assert scheduled_topic._message_send_callback == handler.send_message
    handler.container.schedule.assert_called_once_with(
        scheduled_topic.interval_in_sec, scheduled_topic)
예제 #5
0
def test_trigger_topic__message_is_sent_and_logs_message(caplog):
    caplog.set_level(logging.DEBUG)

    handler = PublisherBrokerHandler(mock.Mock())
    mock_send_message = Mock()
    handler.send_message = mock_send_message
    data = Message(body="data")
    topic = Mock()
    topic.get_data = Mock(return_value=data)
    topic.name = "1"
    context = {}

    handler.trigger_topic(topic, context)

    log_message = caplog.records[0]
    assert f"Sending message for topic {topic.name}" == log_message.message

    mock_send_message.assert_called_once_with(message=data, subject=topic.name)
예제 #6
0
def test_send_message__enough_credit__message_is_sent_and_logs_message(caplog):
    caplog.set_level(logging.DEBUG)

    handler = PublisherBrokerHandler(mock.Mock())
    mock_sender = Mock()
    mock_sender.send = Mock()
    mock_sender.credit = 1
    handler._sender = mock_sender

    message = Message(body="topic data")
    subject = "subject"

    handler.send_message(message=message, subject=subject)

    assert subject == message.subject
    mock_sender.send.assert_called_once_with(message)

    log_message = caplog.records[0]
    assert f"Message sent: {message}..." == log_message.message
예제 #7
0
def test_trigger_topic__topicdatahandlererror_occurs__message_is_not_sent_and_logs_message(
        caplog):
    caplog.set_level(logging.DEBUG)

    handler = PublisherBrokerHandler(mock.Mock())
    mock_send_message = Mock()
    handler.send_message = mock_send_message
    topic = Mock()
    topic.get_data = Mock(
        side_effect=TopicDataHandlerError('data handler error'))
    topic.name = "1"
    context = {}

    handler.trigger_topic(topic, context)

    log_message = caplog.records[0]
    assert f"Error while getting data of topic {topic.name}: data handler error" == log_message.message

    mock_send_message.assert_not_called()
예제 #8
0
def test_send_message__data_not_message_instance__message_is_converted_and_sent_and_logs_message(
        caplog):
    caplog.set_level(logging.DEBUG)

    handler = PublisherBrokerHandler(mock.Mock())
    mock_sender = Mock()
    mock_sender.send = Mock()
    mock_sender.credit = 1
    handler._sender = mock_sender

    data = "topic data"
    subject = "subject"

    handler.send_message(message=data, subject=subject)

    message = mock_sender.send.call_args[0][0]

    assert subject == message.subject
    mock_sender.send.assert_called_once_with(message)

    log_message = caplog.records[0]
    assert f"Message sent: {message}..." == log_message.message
예제 #9
0
def test_on_start__create_sender_error__logs_error_and_returns(caplog):
    caplog.set_level(logging.DEBUG)

    handler = PublisherBrokerHandler(mock.Mock())
    handler._create_sender = mock.Mock(
        side_effect=BrokerHandlerError('proton error'))
    handler._schedule_topic_group = mock.Mock()

    event = mock.Mock()
    with mock.patch.object(BrokerHandler, 'on_start'):
        handler.on_start(event)

        log_message = caplog.records[0]
        assert 'Error while creating sender: proton error' == log_message.message
        handler._schedule_topic_group.assert_not_called()
예제 #10
0
def test_add_topic__scheduled_topic_is_added_and_initialized(
        handler_started, scheduled_topic_initialized):
    handler = PublisherBrokerHandler(mock.Mock())
    handler.started = handler_started
    mock_init_scheduled_topic = Mock()
    handler._init_scheduled_topic = mock_init_scheduled_topic

    def data_handler(context=None):
        return "data"

    scheduled_topic = ScheduledTopic(topic_name='topic',
                                     data_handler=data_handler,
                                     interval_in_sec=5)

    handler.add_topic(scheduled_topic)

    assert 1 == len(handler.topics)
    assert scheduled_topic in handler.topics
    if scheduled_topic_initialized:
        mock_init_scheduled_topic.assert_called_once_with(scheduled_topic)
    else:
        mock_init_scheduled_topic.assert_not_called()