예제 #1
0
 def test_domain_required(self):
     event = {"RequestType": "Create", "ResourceProperties": {}}
     lambda_handler(event, mock_context)
     self.assertLambdaResponse(event,
                               status="FAILED",
                               reason="The 'Domain' property is required.",
                               physical_resource_id="MISSING")
예제 #2
0
    def test_boto_error(self):
        event = {
            "RequestType": "Create",
            "ResourceProperties": {
                "Domain": "bad domain name",
            }
        }
        self.ses_stubber.add_client_error(
            'verify_domain_identity',
            "InvalidParameterValue",
            "Invalid domain name bad domain name.",
            expected_params={'Domain': "bad domain name"})
        with self.assertLogs(level="ERROR") as cm:
            lambda_handler(event, mock_context)
        self.assertLambdaResponse(
            event,
            status="FAILED",
            reason="An error occurred (InvalidParameterValue) when calling the"
            " VerifyDomainIdentity operation: Invalid domain name bad domain name.",
            physical_resource_id="bad domain name")

        # Check that the exception got logged
        self.assertEqual(len(cm.output), 1)
        self.assertIn(
            'ERROR:root:Error updating SES: An error occurred (InvalidParameterValue) when'
            ' calling the VerifyDomainIdentity operation: Invalid domain name bad domain name.',
            cm.output[0])
예제 #3
0
    def test_delete(self):
        event = {
            "RequestType": "Delete",
            "ResourceProperties": {
                "Domain": "example.com.",
                "EnableSend": True,
                "EnableReceive": True,
            }
        }
        self.ses_stubber.add_response('delete_identity', {},
                                      {'Identity': "example.com"})
        self.ses_stubber.add_response('set_identity_mail_from_domain', {}, {
            'Identity': "example.com",
            'MailFromDomain': ""
        })
        lambda_handler(event, mock_context)

        outputs = self.assertLambdaResponse(event,
                                            physical_resource_id="example.com")
        self.assertEqual(outputs["Domain"], "example.com")
        self.assertNotIn("VerificationToken", outputs)
        self.assertNotIn("DkimTokens", outputs)
        self.assertNotIn("MailFromDomain", outputs)
        self.assertNotIn("MailFromMX", outputs)
        self.assertNotIn("MailFromSPF", outputs)
        self.assertNotIn("DMARC", outputs)
        self.assertNotIn("ReceiveMX", outputs)
        self.assertEqual(outputs["Route53RecordSets"], [])
        self.assertEqual(outputs["ZoneFileEntries"], [])
예제 #4
0
    def test_update_receive_only(self):
        event = {
            "RequestType": "Create",
            "ResourceProperties": {
                "Domain": "example.com.",
                "EnableSend": False,
                "EnableReceive": True,
                "CustomDMARC": None,
            }
        }
        self.ses_stubber.add_response('verify_domain_identity',
                                      {'VerificationToken': "ID_TOKEN"},
                                      {'Domain': "example.com"})
        self.ses_stubber.add_response('set_identity_mail_from_domain', {}, {
            'Identity': "example.com",
            'MailFromDomain': ""
        })
        lambda_handler(event, mock_context)

        outputs = self.assertLambdaResponse(event,
                                            physical_resource_id="example.com")
        self.assertEqual(outputs["Domain"], "example.com")
        self.assertEqual(outputs["VerificationToken"], "ID_TOKEN")
        self.assertNotIn("DkimTokens", outputs)
        self.assertNotIn("MailFromDomain", outputs)
        self.assertNotIn("MailFromMX", outputs)
        self.assertNotIn("MailFromSPF", outputs)
        self.assertNotIn("DMARC", outputs)
        self.assertEqual(outputs["ReceiveMX"],
                         "inbound-smtp.mock-region.amazonaws.com")
        self.assertCountEqual(
            outputs["Route53RecordSets"],
            [{
                'Type': 'TXT',
                'Name': '_amazonses.example.com.',
                'TTL': '1800',
                'ResourceRecords': ['"ID_TOKEN"']
            }, {
                'Type': 'MX',
                'Name': 'example.com.',
                'TTL': '1800',
                'ResourceRecords':
                ['10 inbound-smtp.mock-region.amazonaws.com.']
            }])
        self.assertCountEqual(outputs["ZoneFileEntries"], [
            '_amazonses.example.com.\t1800\tIN\tTXT  \t"ID_TOKEN"',
            'example.com.           \t1800\tIN\tMX   \t10 inbound-smtp.mock-region.amazonaws.com.',
        ])
예제 #5
0
    def test_create_default(self):
        event = {
            "RequestType": "Create",
            "ResourceProperties": {
                "Domain": "example.com.",
            }
        }
        self.ses_stubber.add_response('verify_domain_identity',
                                      {'VerificationToken': "ID_TOKEN"},
                                      {'Domain': "example.com"})
        self.ses_stubber.add_response(
            'verify_domain_dkim',
            {'DkimTokens': ["DKIM_TOKEN_1", "DKIM_TOKEN_2"]},
            {'Domain': "example.com"})
        self.ses_stubber.add_response('set_identity_mail_from_domain', {}, {
            'Identity': "example.com",
            'MailFromDomain': "mail.example.com"
        })
        lambda_handler(event, mock_context)

        outputs = self.assertLambdaResponse(event,
                                            physical_resource_id="example.com")
        self.assertEqual(outputs["Domain"], "example.com")
        self.assertEqual(outputs["VerificationToken"], "ID_TOKEN")
        self.assertEqual(outputs["DkimTokens"],
                         ["DKIM_TOKEN_1", "DKIM_TOKEN_2"])
        self.assertEqual(outputs["MailFromDomain"], "mail.example.com")
        self.assertEqual(outputs["MailFromMX"],
                         "feedback-smtp.mock-region.amazonses.com")
        self.assertEqual(outputs["MailFromSPF"],
                         '"v=spf1 include:amazonses.com -all"')
        self.assertEqual(outputs["DMARC"],
                         '"v=DMARC1; p=none; pct=100; sp=none; aspf=r;"')
        self.assertNotIn("ReceiveMX", outputs)
        self.assertCountEqual(outputs["Route53RecordSets"], [
            {
                'Type': 'TXT',
                'Name': '_amazonses.example.com.',
                'TTL': '1800',
                'ResourceRecords': ['"ID_TOKEN"']
            },
            {
                'Type': 'CNAME',
                'Name': 'DKIM_TOKEN_1._domainkey.example.com.',
                'TTL': '1800',
                'ResourceRecords': ['DKIM_TOKEN_1.dkim.amazonses.com.']
            },
            {
                'Type': 'CNAME',
                'Name': 'DKIM_TOKEN_2._domainkey.example.com.',
                'TTL': '1800',
                'ResourceRecords': ['DKIM_TOKEN_2.dkim.amazonses.com.']
            },
            {
                'Type': 'MX',
                'Name': 'mail.example.com.',
                'TTL': '1800',
                'ResourceRecords':
                ['10 feedback-smtp.mock-region.amazonses.com.']
            },
            {
                'Type': 'TXT',
                'Name': 'mail.example.com.',
                'TTL': '1800',
                'ResourceRecords': ['"v=spf1 include:amazonses.com -all"']
            },
            {
                'Type':
                'TXT',
                'Name':
                '_dmarc.example.com.',
                'TTL':
                '1800',
                'ResourceRecords':
                ['"v=DMARC1; p=none; pct=100; sp=none; aspf=r;"']
            },
        ])
        self.assertCountEqual(outputs["ZoneFileEntries"], [
            '_amazonses.example.com.             \t1800\tIN\tTXT  \t"ID_TOKEN"',
            'DKIM_TOKEN_1._domainkey.example.com.\t1800\tIN\tCNAME\tDKIM_TOKEN_1.dkim.amazonses.com.',
            'DKIM_TOKEN_2._domainkey.example.com.\t1800\tIN\tCNAME\tDKIM_TOKEN_2.dkim.amazonses.com.',
            'mail.example.com.                   \t1800\tIN\tMX   \t10 feedback-smtp.mock-region.amazonses.com.',
            'mail.example.com.                   \t1800\tIN\tTXT  \t"v=spf1 include:amazonses.com -all"',
            '_dmarc.example.com.                 \t1800\tIN\tTXT  \t"v=DMARC1; p=none; pct=100; sp=none; aspf=r;"',
        ])
예제 #6
0
    def test_create_all_options(self):
        event = {
            "RequestType": "Create",
            "ResourceProperties": {
                "Domain": "example.com.",
                "EnableSend": True,
                "EnableReceive": True,
                "MailFromSubdomain": "bounce",
                "CustomDMARC":
                '"v=DMARC1; p=quarantine; rua=mailto:[email protected];"',
                "TTL": "300",
                "Region": "us-test-2",
            }
        }
        self.ses_stubber.add_response('verify_domain_identity',
                                      {'VerificationToken': "ID_TOKEN"},
                                      {'Domain': "example.com"})
        self.ses_stubber.add_response(
            'verify_domain_dkim',
            {'DkimTokens': ["DKIM_TOKEN_1", "DKIM_TOKEN_2"]},
            {'Domain': "example.com"})
        self.ses_stubber.add_response('set_identity_mail_from_domain', {}, {
            'Identity': "example.com",
            'MailFromDomain': "bounce.example.com"
        })
        lambda_handler(event, mock_context)

        outputs = self.assertLambdaResponse(event,
                                            physical_resource_id="example.com")
        self.assertEqual(outputs["Domain"], "example.com")
        self.assertEqual(outputs["VerificationToken"], "ID_TOKEN")
        self.assertEqual(outputs["DkimTokens"],
                         ["DKIM_TOKEN_1", "DKIM_TOKEN_2"])
        self.assertEqual(outputs["MailFromDomain"], "bounce.example.com")
        self.assertEqual(outputs["MailFromMX"],
                         "feedback-smtp.us-test-2.amazonses.com")
        self.assertEqual(outputs["MailFromSPF"],
                         '"v=spf1 include:amazonses.com -all"')
        self.assertEqual(
            outputs["DMARC"],
            '"v=DMARC1; p=quarantine; rua=mailto:[email protected];"')
        self.assertEqual(outputs["ReceiveMX"],
                         "inbound-smtp.us-test-2.amazonaws.com")
        self.assertCountEqual(
            outputs["Route53RecordSets"],
            [{
                'Type': 'TXT',
                'Name': '_amazonses.example.com.',
                'TTL': '300',
                'ResourceRecords': ['"ID_TOKEN"']
            }, {
                'Type': 'CNAME',
                'Name': 'DKIM_TOKEN_1._domainkey.example.com.',
                'TTL': '300',
                'ResourceRecords': ['DKIM_TOKEN_1.dkim.amazonses.com.']
            }, {
                'Type': 'CNAME',
                'Name': 'DKIM_TOKEN_2._domainkey.example.com.',
                'TTL': '300',
                'ResourceRecords': ['DKIM_TOKEN_2.dkim.amazonses.com.']
            }, {
                'Type': 'MX',
                'Name': 'bounce.example.com.',
                'TTL': '300',
                'ResourceRecords':
                ['10 feedback-smtp.us-test-2.amazonses.com.']
            }, {
                'Type': 'TXT',
                'Name': 'bounce.example.com.',
                'TTL': '300',
                'ResourceRecords': ['"v=spf1 include:amazonses.com -all"']
            }, {
                'Type':
                'TXT',
                'Name':
                '_dmarc.example.com.',
                'TTL':
                '300',
                'ResourceRecords':
                ['"v=DMARC1; p=quarantine; rua=mailto:[email protected];"']
            }, {
                'Type': 'MX',
                'Name': 'example.com.',
                'TTL': '300',
                'ResourceRecords':
                ['10 inbound-smtp.us-test-2.amazonaws.com.']
            }])
        self.assertCountEqual(outputs["ZoneFileEntries"], [
            '_amazonses.example.com.             \t300\tIN\tTXT  \t"ID_TOKEN"',
            'DKIM_TOKEN_1._domainkey.example.com.\t300\tIN\tCNAME\tDKIM_TOKEN_1.dkim.amazonses.com.',
            'DKIM_TOKEN_2._domainkey.example.com.\t300\tIN\tCNAME\tDKIM_TOKEN_2.dkim.amazonses.com.',
            'bounce.example.com.                 \t300\tIN\tMX   \t10 feedback-smtp.us-test-2.amazonses.com.',
            'bounce.example.com.                 \t300\tIN\tTXT  \t"v=spf1 include:amazonses.com -all"',
            '_dmarc.example.com.                 \t300\tIN\tTXT  \t"v=DMARC1; p=quarantine; rua=mailto:[email protected];"',
            'example.com.                        \t300\tIN\tMX   \t10 inbound-smtp.us-test-2.amazonaws.com.',
        ])