Exemple #1
0
    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)
Exemple #2
0
    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
Exemple #3
0
    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
Exemple #4
0
    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'}
Exemple #5
0
    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
Exemple #6
0
    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)
Exemple #7
0
    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'}
Exemple #8
0
    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)