Example #1
0
    def test_create_sns_message_body(self):
        action = {'Message': ['msg']}
        result_str = sns_listener.create_sns_message_body(
            self.subscriber, action)
        result = json.loads(result_str)
        try:
            uuid.UUID(result.pop('MessageId'))
        except KeyError:
            assert False, 'MessageId missing in SNS response message body'
        except ValueError:
            assert False, 'SNS response MessageId not a valid UUID'

        try:
            dateutil.parser.parse(result.pop('Timestamp'))
        except KeyError:
            assert False, 'Timestamp missing in SNS response message body'
        except ValueError:
            assert False, 'SNS response Timestamp not a valid ISO 8601 date'
        self.assertEqual(result, {
            'Message': 'msg',
            'Type': 'Notification',
            'TopicArn': 'arn'
        })

        # Now add a subject
        action = {
            'Message': ['msg'],
            'Subject': ['subject'],
            'MessageAttributes.entry.1.Name': ['attr1'],
            'MessageAttributes.entry.1.Value.DataType': ['String'],
            'MessageAttributes.entry.1.Value.StringValue': ['value1'],
            'MessageAttributes.entry.1.Value.BinaryValue': ['value1'],
            'MessageAttributes.entry.2.Name': ['attr2'],
            'MessageAttributes.entry.2.Value.DataType': ['String'],
            'MessageAttributes.entry.2.Value.StringValue': ['value2'],
            'MessageAttributes.entry.2.Value.BinaryValue': ['value2'],
        }
        result_str = sns_listener.create_sns_message_body(
            self.subscriber, action)
        result = json.loads(result_str)
        del result['MessageId']
        del result['Timestamp']
        msg = {
            'Message': 'msg',
            'TopicArn': 'arn',
            'Type': 'Notification',
            'Subject': 'subject',
            'MessageAttributes': {
                'attr1': {
                    'Type': 'String',
                    'Value': 'value1',
                },
                'attr2': {
                    'Type': 'String',
                    'Value': 'value2',
                }
            }
        }
        expected = json.dumps(msg)
        self.assertEqual(result, json.loads(expected))
 def test_create_sns_message_body_json_structure_without_default_key(self):
     action = {
         'Message': ['{"message": "abc"}'],
         'MessageStructure': ['json']
     }
     with assert_raises(Exception) as exc:
         sns_listener.create_sns_message_body(self.subscriber, action)
     self.assertEqual(str(exc.exception), "Unable to find 'default' key in message payload")
Example #3
0
 def test_create_sns_message_body_json_structure_without_default_key(self):
     action = {
         'Message': ['{"message": "abc"}'],
         'MessageStructure': ['json']
     }
     with assert_raises(Exception) as exc:
         sns_listener.create_sns_message_body(self.subscriber, action)
     assert str(exc.exception) == "Unable to find 'default' key in message payload"
Example #4
0
 def test_create_sns_message_body_json_structure_without_default_key(self):
     action = {
         "Message": ['{"message": "abc"}'],
         "MessageStructure": ["json"]
     }
     with self.assertRaises(Exception) as exc:
         sns_listener.create_sns_message_body(self.subscriber, action)
     self.assertEqual("Unable to find 'default' key in message payload",
                      str(exc.exception))
Example #5
0
def test_create_sns_message_body():
    subscriber = {
        'TopicArn': 'arn',
        'RawMessageDelivery': 'false',
    }
    action = {
        'Message': ['msg']
    }
    result_str = sns_listener.create_sns_message_body(subscriber, action)
    result = json.loads(result_str)
    try:
        uuid.UUID(result.pop('MessageId'))
    except KeyError:
        assert False, 'MessageId missing in SNS response message body'
    except ValueError:
        assert False, 'SNS response MessageId not a valid UUID'
    assert_equal(result, {'Message': 'msg', 'Type': 'Notification', 'TopicArn': 'arn'})

    # Now add a subject
    action = {
        'Message': ['msg'],
        'Subject': ['subject'],
        'MessageAttributes.entry.1.Name': ['attr1'],
        'MessageAttributes.entry.1.Value.DataType': ['String'],
        'MessageAttributes.entry.1.Value.StringValue': ['value1'],
        'MessageAttributes.entry.1.Value.BinaryValue': ['value1'],
        'MessageAttributes.entry.2.Name': ['attr2'],
        'MessageAttributes.entry.2.Value.DataType': ['String'],
        'MessageAttributes.entry.2.Value.StringValue': ['value2'],
        'MessageAttributes.entry.2.Value.BinaryValue': ['value2'],
    }
    result_str = sns_listener.create_sns_message_body(subscriber, action)
    result = json.loads(result_str)
    del result['MessageId']
    expected = json.dumps({'Message': 'msg',
                           'TopicArn': 'arn',
                           'Type': 'Notification',
                           'Subject': 'subject',
                           'MessageAttributes': {
                               'attr1': {
                                   'Type': 'String',
                                   'Value': 'value1',
                               }, 'attr2': {
                                   'Type': 'String',
                                   'Value': 'value2',
                               }
                           }})
    assert_equal(result, json.loads(expected))
 def test_create_sns_message_body_raw_message_delivery(self):
     self.subscriber['RawMessageDelivery'] = 'true'
     action = {
         'Message': ['msg']
     }
     result = sns_listener.create_sns_message_body(self.subscriber, action)
     self.assertEqual(result, 'msg')
Example #7
0
 def test_create_sns_message_body_raw_message_delivery(self):
     self.subscriber['RawMessageDelivery'] = 'true'
     action = {
         'Message': ['msg']
     }
     result = sns_listener.create_sns_message_body(self.subscriber, action)
     assert (result == 'msg')
Example #8
0
    def test_create_sns_message_body_json_structure_raw_delivery(self):
        self.subscriber["RawMessageDelivery"] = "true"
        action = {
            "Message": ['{"default": {"message": "abc"}}'],
            "MessageStructure": ["json"],
        }
        result = sns_listener.create_sns_message_body(self.subscriber, action)

        self.assertEqual({"message": "abc"}, result)
Example #9
0
    def test_create_sns_message_body_json_structure(self):
        action = {
            'Message': ['{"default": {"message": "abc"}}'],
            'MessageStructure': ['json']
        }
        result_str = sns_listener.create_sns_message_body(self.subscriber, action)
        result = json.loads(result_str)

        assert (result['Message'] == {'message': 'abc'})
Example #10
0
    def test_create_sns_message_body_json_structure_sqs_protocol(self):
        action = {
            'Message': ['{"default": "default message", "sqs": "sqs message"}'],
            'MessageStructure': ['json']
        }
        result_str = sns_listener.create_sns_message_body(self.subscriber, action)
        result = json.loads(result_str)

        assert (result['Message'] == 'sqs message')
Example #11
0
    def test_create_sns_message_body_json_structure_raw_delivery(self):
        self.subscriber['RawMessageDelivery'] = 'true'
        action = {
            'Message': ['{"default": {"message": "abc"}}'],
            'MessageStructure': ['json']
        }
        result = sns_listener.create_sns_message_body(self.subscriber, action)

        self.assertEqual(result, {'message': 'abc'})
    def test_create_sns_message_body_json_structure_sqs_protocol(self):
        action = {
            'Message': ['{"default": "default message", "sqs": "sqs message"}'],
            'MessageStructure': ['json']
        }
        result_str = sns_listener.create_sns_message_body(self.subscriber, action)
        result = json.loads(result_str)

        self.assertEqual(result['Message'], 'sqs message')
Example #13
0
def test_create_sns_message_body_raw_message_delivery():
    subscriber = {
        'RawMessageDelivery': 'true'
    }
    action = {
        'Message': ['msg']
    }
    result = sns_listener.create_sns_message_body(subscriber, action)
    assert (result == 'msg')
    def test_create_sns_message_body_json_structure(self):
        action = {
            'Message': ['{"default": {"message": "abc"}}'],
            'MessageStructure': ['json']
        }
        result_str = sns_listener.create_sns_message_body(self.subscriber, action)
        result = json.loads(result_str)

        self.assertEqual(result['Message'], {'message': 'abc'})
Example #15
0
    def test_create_sns_message_body(self):
        action = {
            'Message': ['msg']
        }
        result_str = sns_listener.create_sns_message_body(self.subscriber, action)
        result = json.loads(result_str)
        try:
            uuid.UUID(result.pop('MessageId'))
        except KeyError:
            assert False, 'MessageId missing in SNS response message body'
        except ValueError:
            assert False, 'SNS response MessageId not a valid UUID'
        assert_equal(result, {'Message': 'msg', 'Type': 'Notification', 'TopicArn': 'arn'})

        # Now add a subject
        action = {
            'Message': ['msg'],
            'Subject': ['subject'],
            'MessageAttributes.entry.1.Name': ['attr1'],
            'MessageAttributes.entry.1.Value.DataType': ['String'],
            'MessageAttributes.entry.1.Value.StringValue': ['value1'],
            'MessageAttributes.entry.1.Value.BinaryValue': ['value1'],
            'MessageAttributes.entry.2.Name': ['attr2'],
            'MessageAttributes.entry.2.Value.DataType': ['String'],
            'MessageAttributes.entry.2.Value.StringValue': ['value2'],
            'MessageAttributes.entry.2.Value.BinaryValue': ['value2'],
        }
        result_str = sns_listener.create_sns_message_body(self.subscriber, action)
        result = json.loads(result_str)
        del result['MessageId']
        expected = json.dumps({'Message': 'msg',
                               'TopicArn': 'arn',
                               'Type': 'Notification',
                               'Subject': 'subject',
                               'MessageAttributes': {
                                   'attr1': {
                                       'Type': 'String',
                                       'Value': 'value1',
                                   }, 'attr2': {
                                       'Type': 'String',
                                       'Value': 'value2',
                                   }
                               }})
        assert_equal(result, json.loads(expected))
def test_create_sns_message_body():
    subscriber = {
        'TopicArn': 'arn',
        'RawMessageDelivery': 'false',
    }
    action = {'Message': ['msg']}
    result = sns_listener.create_sns_message_body(subscriber, action)
    assert_equal(json.loads(result), {
        'Message': 'msg',
        'Type': 'Notification',
        'TopicArn': 'arn'
    })

    # Now add a subject
    action = {
        'Message': ['msg'],
        'Subject': ['subject'],
        'MessageAttributes.entry.1.Name': ['attr1'],
        'MessageAttributes.entry.1.Value.DataType': ['String'],
        'MessageAttributes.entry.1.Value.StringValue': ['value1'],
        'MessageAttributes.entry.1.Value.BinaryValue': ['value1'],
        'MessageAttributes.entry.2.Name': ['attr2'],
        'MessageAttributes.entry.2.Value.DataType': ['String'],
        'MessageAttributes.entry.2.Value.StringValue': ['value2'],
        'MessageAttributes.entry.2.Value.BinaryValue': ['value2'],
    }
    result = sns_listener.create_sns_message_body(subscriber, action)
    expected = json.dumps({
        'Message': 'msg',
        'TopicArn': 'arn',
        'Type': 'Notification',
        'Subject': 'subject',
        'MessageAttributes': {
            'attr1': {
                'Type': 'String',
                'Value': 'value1',
            },
            'attr2': {
                'Type': 'String',
                'Value': 'value2',
            }
        }
    })
    assert_equal(json.loads(result), json.loads(expected))
Example #17
0
    def test_create_sns_message_body_json_structure(self):
        action = {
            "Message": ['{"default": {"message": "abc"}}'],
            "MessageStructure": ["json"],
        }
        result_str = sns_listener.create_sns_message_body(
            self.subscriber, action)
        result = json.loads(result_str)

        self.assertEqual({"message": "abc"}, result["Message"])
Example #18
0
 def test_create_sns_message_timestamp_millis(self):
     action = {'Message': ['msg']}
     result_str = sns_listener.create_sns_message_body(
         self.subscriber, action)
     result = json.loads(result_str)
     timestamp = result.pop('Timestamp')
     end = timestamp[-5:]
     matcher = re.compile(r'\.[0-9]{3}Z')
     match = matcher.match(end)
     self.assertTrue(match is not None)
Example #19
0
 def test_create_sns_message_timestamp_millis(self):
     action = {"Message": ["msg"]}
     result_str = sns_listener.create_sns_message_body(
         self.subscriber, action)
     result = json.loads(result_str)
     timestamp = result.pop("Timestamp")
     end = timestamp[-5:]
     matcher = re.compile(r"\.[0-9]{3}Z")
     match = matcher.match(end)
     self.assertIsNotNone(match)
Example #20
0
    def test_create_sns_message_body_json_structure_sqs_protocol(self):
        action = {
            "Message":
            ['{"default": "default message", "sqs": "sqs message"}'],
            "MessageStructure": ["json"],
        }
        result_str = sns_listener.create_sns_message_body(
            self.subscriber, action)
        result = json.loads(result_str)

        self.assertEqual("sqs message", result["Message"])
Example #21
0
    def test_create_sns_message_body_json_structure_raw_delivery_sqs_protocol(
            self):
        self.subscriber['RawMessageDelivery'] = 'true'
        action = {
            'Message': [
                '{"default": {"message": "default version"}, "sqs": {"message": "sqs version"}}'
            ],
            'MessageStructure': ['json']
        }
        result = sns_listener.create_sns_message_body(self.subscriber, action)

        self.assertEqual({'message': 'sqs version'}, result)
Example #22
0
 def test_create_sns_message_body_raw_message_delivery(self):
     self.subscriber["RawMessageDelivery"] = "true"
     action = {"Message": ["msg"]}
     result = sns_listener.create_sns_message_body(self.subscriber, action)
     self.assertEqual("msg", result)
Example #23
0
    def test_create_sns_message_body(self):
        action = {"Message": ["msg"]}

        result_str = sns_listener.create_sns_message_body(
            self.subscriber, action, str(uuid.uuid4()))
        result = json.loads(result_str)
        try:
            uuid.UUID(result.pop("MessageId"))
        except KeyError:
            assert False, "MessageId missing in SNS response message body"
        except ValueError:
            assert False, "SNS response MessageId not a valid UUID"

        try:
            dateutil.parser.parse(result.pop("Timestamp"))
        except KeyError:
            assert False, "Timestamp missing in SNS response message body"
        except ValueError:
            assert False, "SNS response Timestamp not a valid ISO 8601 date"

        expected_sns_body = {
            "Message": "msg",
            "Signature": "EXAMPLEpH+..",
            "SignatureVersion": "1",
            "SigningCertURL":
            "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-0000000000000000000000.pem",
            "TopicArn": "arn",
            "Type": "Notification",
        }
        self.assertEqual(expected_sns_body, result)

        # Now add a subject
        action = {
            "Message": ["msg"],
            "Subject": ["subject"],
            "MessageAttributes.entry.1.Name": ["attr1"],
            "MessageAttributes.entry.1.Value.DataType": ["String"],
            "MessageAttributes.entry.1.Value.StringValue": ["value1"],
            "MessageAttributes.entry.1.Value.BinaryValue": ["value1"],
            "MessageAttributes.entry.2.Name": ["attr2"],
            "MessageAttributes.entry.2.Value.DataType": ["String"],
            "MessageAttributes.entry.2.Value.StringValue": ["value2"],
            "MessageAttributes.entry.2.Value.BinaryValue": ["value2"],
        }
        result_str = sns_listener.create_sns_message_body(
            self.subscriber, action)
        result = json.loads(result_str)
        del result["MessageId"]
        del result["Timestamp"]
        msg = {
            "Message": "msg",
            "Subject": "subject",
            "Signature": "EXAMPLEpH+..",
            "SignatureVersion": "1",
            "SigningCertURL":
            "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-0000000000000000000000.pem",
            "TopicArn": "arn",
            "Type": "Notification",
            "MessageAttributes": {
                "attr1": {
                    "Type": "String",
                    "Value": "value1",
                },
                "attr2": {
                    "Type": "String",
                    "Value": "value2",
                },
            },
        }
        self.assertEqual(msg, result)
Example #24
0
    def test_create_sns_message_body(self):
        action = {'Message': ['msg']}

        result_str = sns_listener.create_sns_message_body(
            self.subscriber, action, str(uuid.uuid4()))
        result = json.loads(result_str)
        try:
            uuid.UUID(result.pop('MessageId'))
        except KeyError:
            assert False, 'MessageId missing in SNS response message body'
        except ValueError:
            assert False, 'SNS response MessageId not a valid UUID'

        try:
            dateutil.parser.parse(result.pop('Timestamp'))
        except KeyError:
            assert False, 'Timestamp missing in SNS response message body'
        except ValueError:
            assert False, 'SNS response Timestamp not a valid ISO 8601 date'

        self.assertEqual(
            result, {
                'Message': 'msg',
                'Signature': 'EXAMPLEpH+..',
                'SignatureVersion': '1',
                'SigningCertURL':
                'https://sns.us-east-1.amazonaws.com/SimpleNotificationService-0000000000000000000000.pem',
                'SubscribeURL': None,
                'Token': None,
                'TopicArn': 'arn',
                'Type': 'Notification'
            })

        # Now add a subject
        action = {
            'Message': ['msg'],
            'Subject': ['subject'],
            'MessageAttributes.entry.1.Name': ['attr1'],
            'MessageAttributes.entry.1.Value.DataType': ['String'],
            'MessageAttributes.entry.1.Value.StringValue': ['value1'],
            'MessageAttributes.entry.1.Value.BinaryValue': ['value1'],
            'MessageAttributes.entry.2.Name': ['attr2'],
            'MessageAttributes.entry.2.Value.DataType': ['String'],
            'MessageAttributes.entry.2.Value.StringValue': ['value2'],
            'MessageAttributes.entry.2.Value.BinaryValue': ['value2'],
        }
        result_str = sns_listener.create_sns_message_body(
            self.subscriber, action)
        result = json.loads(result_str)
        del result['MessageId']
        del result['Timestamp']
        msg = {
            'Message': 'msg',
            'Subject': 'subject',
            'Signature': 'EXAMPLEpH+..',
            'SignatureVersion': '1',
            'SigningCertURL':
            'https://sns.us-east-1.amazonaws.com/SimpleNotificationService-0000000000000000000000.pem',
            'SubscribeURL': None,
            'Token': None,
            'TopicArn': 'arn',
            'Type': 'Notification',
            'MessageAttributes': {
                'attr1': {
                    'Type': 'String',
                    'Value': 'value1',
                },
                'attr2': {
                    'Type': 'String',
                    'Value': 'value2',
                }
            }
        }
        expected = json.dumps(msg)
        self.assertEqual(result, json.loads(expected))