def test_delete_message(self): """Test deleting a message from the sqs queue.""" body = json.dumps({'event_name': 'job.created'}) queue_message = self.create_message(body) message = SQSMessage(self.schema, message=queue_message) message.delete() with pytest.raises(ValueError) as excinfo: message.message assert 'No message available' in str(excinfo.value)
def test_init_with_valid_body(self): """Test message with a valid body.""" body = {'event_name': 'job.created'} message = SQSMessage(self.schema, body=body) assert isinstance(message, SQSMessage) assert message.body == body
def process_message(self, message: SQSMessage) -> bool: """Process a message retrieved from the input_queue. :param message: A message from the queue :returns: Status from the process """ body = message.body data = Objectify(body.get('data', {})) event = body.get('event_name', '') message_id = body.get('id', '') data.sqs_message_id = message_id dispatch = Objectify(self.dispatch_map.get(event, {})) if not dispatch: logger.info('Unknown event type - message {0} ignored'.format( body['id'])) return True logger.info('Processing event {event}'.format(event=event)) try: status, payload = dispatch.action(data) except Exception as error: msg = 'Unknown exception raised on \'{0}\' assignment {1}. \n' \ 'Error: {2} \n Payload: {3}' logger.error(msg.format(dispatch.name, data.id, error, data._dct)) raise # Let newrelic deal with it. response = ResponseWrapper(data, payload) notification_action = dispatch.notification_actions[status] event = notification_action.action(response) message = notification_action.message logger.info(message.format(event=event)) event() if not notification_action.success: # processing failed # Return False if the message is to be retried return not dispatch.on_failure_retry return True
def test_init_with_additional_fields(self): """Test message with a valid body.""" body = {'event_name': 'job.created', 'foo': 'bar'} message = SQSMessage(self.schema, body=body) assert isinstance(message, SQSMessage) assert message.body == {'event_name': 'job.created'}
def test_message_queue_preserves_time_data(self): """Test message roundtrip with date and datetime values.""" today = date.today() now = datetime.now() body = {'event_name': 'job.created', 'date': today, 'timestamp': now} unbound_message = SQSMessage(self.schema, body=body) queue_message = self.create_message(json.dumps(unbound_message.body)) message = SQSMessage(self.schema, message=queue_message) assert isinstance(message, SQSMessage) assert message.body['event_name'] == 'job.created' assert isinstance(message.body['date'], date) assert isinstance(message.body['timestamp'], datetime) assert message.body['date'] == today assert message.body['timestamp'] == now
def test_init_with_invalid_queue_message(self): """Test message with an invalid sqs message.""" body = json.dumps('event_name') queue_message = self.create_message(body) with pytest.raises(ValueError) as excinfo: SQSMessage(self.schema, message=queue_message) assert 'Not a valid message body' in str(excinfo.value)
def test_init_with_valid_queue_message(self): """Test message with a valid sqs message.""" body = json.dumps({'event_name': 'job.created', 'foo': 'bar'}) queue_message = self.create_message(body) message = SQSMessage(self.schema, message=queue_message) assert isinstance(message, SQSMessage) assert message.body == {'event_name': 'job.created'}
def test_init_with_invalid_body(self): """Test message with a valid body.""" body = {'foo': 2} with pytest.raises(ValueError) as excinfo: SQSMessage(self.schema, body=body) assert "{'event_name': 'Required'}" in str(excinfo.value) body = {'event_name': 2} with pytest.raises(ValueError) as excinfo: SQSMessage(self.schema, body=body) assert 'String does not match expected pattern' in str(excinfo.value) body = {'event_name': 'job.'} with pytest.raises(ValueError) as excinfo: SQSMessage(self.schema, body=body) assert 'String does not match expected pattern' in str(excinfo.value)