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)
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
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
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)
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)
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
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()
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
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()
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()