Beispiel #1
0
 def test_of_email_body_problematic_resources_with_reason(
         self, mock_get_account_alias):
     mock_get_account_alias.return_value = "test-account"
     unwanted_resources = [
         Resource(
             42,
             "ec2 instance",
             "12345",
             "date1",
             "us",
             reason=
             'Please follow the principal of least privilege and do not use Action : *'
         ),
         Resource(42, "ec2 volume", "3312345", "date2", "us")
     ]
     problematic_resources = []
     dry_run = False
     test_status_mail_plugin = StatusMailPlugin(
         unwanted_resources,
         problematic_resources,
         dry_run,
         region=self.test_region,
         sender=self.test_sender,
         recipients=self.test_recipients)
     body = test_status_mail_plugin.body
     expected_body = (EXPECTED_PART_HEADER + EXPECTED_PART_NO_DRY_RUN +
                      EXPECTED_PART_UNWANTED_FILLED_WITH_REASON +
                      EXPECTED_PART_FOOTER)
     self.maxDiff = None
     self.assertEqual(body, expected_body)
 def setUp(self):
     self.test_recipients = ["*****@*****.**", "*****@*****.**"]
     self.unwanted_resources = [
         Resource(42, "ec2 instance", "12345", "date1", "us"),
         Resource(42, "ec2 volume", "3312345", "date2", "us")]
     self.problematic_resources = [
         Resource(23, "ec2 instance", "67890", "date1", "us"),
         Resource(23, "ec2 volume", "1112345", "date2", "us")]
     self.dry_run = True
     self.reason = 'Do not do it'
     self.test_region = "eu-west-1"
     self.test_sender = "*****@*****.**"
     self.test_status_mail_plugin = StatusMailPlugin(self.unwanted_resources,
                                                     self.problematic_resources,
                                                     self.dry_run,
                                                     region=self.test_region,
                                                     sender=self.test_sender,
                                                     recipients=self.test_recipients)
Beispiel #3
0
    def test_of_email_body_no_dry_run(self, mock_get_account_alias):
        mock_get_account_alias.return_value = "test-account"
        test_status_mail_plugin = StatusMailPlugin(
            self.unwanted_resources,
            self.problematic_resources,
            False,
            region=self.test_region,
            sender=self.test_sender,
            recipients=self.test_recipients)
        body = test_status_mail_plugin.body
        expected_body = (EXPECTED_PART_HEADER + EXPECTED_PART_NO_DRY_RUN +
                         EXPECTED_PART_UNWANTED_FILLED +
                         EXPECTED_PART_PROBLEMATIC_FILLED +
                         EXPECTED_PART_FOOTER)

        self.maxDiff = None
        self.assertEqual(body, expected_body)
Beispiel #4
0
    def test_body_property_set_failure(self, mock_get_account_alias):
        mock_get_account_alias.return_value = "test-account"
        not_expected_body = 'CHANGED BODY'
        test_status_mail_plugin = StatusMailPlugin(
            self.unwanted_resources,
            self.problematic_resources,
            self.dry_run,
            region=self.test_region,
            sender=self.test_sender,
            recipients=self.test_recipients,
            body=not_expected_body)

        expected_body = (EXPECTED_PART_HEADER + EXPECTED_PART_DRY_RUN +
                         EXPECTED_PART_UNWANTED_FILLED +
                         EXPECTED_PART_PROBLEMATIC_FILLED +
                         EXPECTED_PART_FOOTER)
        self.assertNotEqual(test_status_mail_plugin.body, not_expected_body)
        self.assertEqual(test_status_mail_plugin.body, expected_body)
Beispiel #5
0
class StatusMailPluginTest(TestCase):
    def setUp(self):
        self.test_recipients = [
            "*****@*****.**", "*****@*****.**"
        ]
        self.unwanted_resources = [
            Resource(42, "ec2 instance", "12345", "date1", "us"),
            Resource(42, "ec2 volume", "3312345", "date2", "us")
        ]
        self.problematic_resources = [
            Resource(23, "ec2 instance", "67890", "date1", "us"),
            Resource(23, "ec2 volume", "1112345", "date2", "us")
        ]
        self.dry_run = True
        self.reason = 'Do not do it'
        self.test_region = "eu-west-1"
        self.test_sender = "*****@*****.**"
        self.test_status_mail_plugin = StatusMailPlugin(
            self.unwanted_resources,
            self.problematic_resources,
            self.dry_run,
            region=self.test_region,
            sender=self.test_sender,
            recipients=self.test_recipients)

    # Moto's mock_iam does not support the get_account_alias() function.
    @patch(
        'monocyte.plugins.status_mail_plugin.StatusMailPlugin._get_account_alias'
    )
    def test_of_email_body_in_case_of_action(self, mock_get_account_alias):
        mock_get_account_alias.return_value = "test-account"
        body = self.test_status_mail_plugin.body
        expected_body = (EXPECTED_PART_HEADER + EXPECTED_PART_DRY_RUN +
                         EXPECTED_PART_UNWANTED_FILLED +
                         EXPECTED_PART_PROBLEMATIC_FILLED +
                         EXPECTED_PART_FOOTER)

        self.maxDiff = None
        self.assertEqual(body, expected_body)

    @patch(
        'monocyte.plugins.status_mail_plugin.StatusMailPlugin._get_account_alias'
    )
    def test_of_email_body_problematic_resources_with_reason(
            self, mock_get_account_alias):
        mock_get_account_alias.return_value = "test-account"
        unwanted_resources = [
            Resource(
                42,
                "ec2 instance",
                "12345",
                "date1",
                "us",
                reason=
                'Please follow the principal of least privilege and do not use Action : *'
            ),
            Resource(42, "ec2 volume", "3312345", "date2", "us")
        ]
        problematic_resources = []
        dry_run = False
        test_status_mail_plugin = StatusMailPlugin(
            unwanted_resources,
            problematic_resources,
            dry_run,
            region=self.test_region,
            sender=self.test_sender,
            recipients=self.test_recipients)
        body = test_status_mail_plugin.body
        expected_body = (EXPECTED_PART_HEADER + EXPECTED_PART_NO_DRY_RUN +
                         EXPECTED_PART_UNWANTED_FILLED_WITH_REASON +
                         EXPECTED_PART_FOOTER)
        self.maxDiff = None
        self.assertEqual(body, expected_body)

    @patch(
        'monocyte.plugins.status_mail_plugin.StatusMailPlugin._get_account_alias'
    )
    def test_of_email_body_no_problematic_resources(self,
                                                    mock_get_account_alias):
        mock_get_account_alias.return_value = "test-account"
        test_status_mail_plugin = StatusMailPlugin(
            self.unwanted_resources, [],
            self.dry_run,
            region=self.test_region,
            sender=self.test_sender,
            recipients=self.test_recipients)
        body = test_status_mail_plugin.body
        expected_body = (EXPECTED_PART_HEADER + EXPECTED_PART_DRY_RUN +
                         EXPECTED_PART_UNWANTED_FILLED +
                         EXPECTED_PART_PROBLEMATIC_EMPTY +
                         EXPECTED_PART_FOOTER)

        self.maxDiff = None
        self.assertEqual(body, expected_body)

    @patch(
        'monocyte.plugins.status_mail_plugin.StatusMailPlugin._get_account_alias'
    )
    def test_of_email_body_no_unwanted_resources(self, mock_get_account_alias):
        mock_get_account_alias.return_value = "test-account"
        test_status_mail_plugin = StatusMailPlugin(
            [],
            self.problematic_resources,
            self.dry_run,
            region=self.test_region,
            sender=self.test_sender,
            recipients=self.test_recipients)
        body = test_status_mail_plugin.body
        expected_body = (EXPECTED_PART_HEADER + EXPECTED_PART_DRY_RUN +
                         EXPECTED_PART_UNWANTED_EMPTY +
                         EXPECTED_PART_PROBLEMATIC_FILLED +
                         EXPECTED_PART_FOOTER)

        self.maxDiff = None
        self.assertEqual(body, expected_body)

    @patch(
        'monocyte.plugins.status_mail_plugin.StatusMailPlugin._get_account_alias'
    )
    def test_of_email_body_no_dry_run(self, mock_get_account_alias):
        mock_get_account_alias.return_value = "test-account"
        test_status_mail_plugin = StatusMailPlugin(
            self.unwanted_resources,
            self.problematic_resources,
            False,
            region=self.test_region,
            sender=self.test_sender,
            recipients=self.test_recipients)
        body = test_status_mail_plugin.body
        expected_body = (EXPECTED_PART_HEADER + EXPECTED_PART_NO_DRY_RUN +
                         EXPECTED_PART_UNWANTED_FILLED +
                         EXPECTED_PART_PROBLEMATIC_FILLED +
                         EXPECTED_PART_FOOTER)

        self.maxDiff = None
        self.assertEqual(body, expected_body)

    def test_email_sending_only_if_resources_are_given(self):
        self.test_status_mail_plugin.unwanted_resources = []
        self.test_status_mail_plugin.problematic_resources = []
        self.test_status_mail_plugin.send_email = Mock()

        self.test_status_mail_plugin.run()

        self.assertEqual(self.test_status_mail_plugin.send_email.call_count, 0)

    @mock_ses
    @patch(
        'monocyte.plugins.status_mail_plugin.StatusMailPlugin._get_account_alias'
    )
    def test_send_mail_ok(self, mock_get_account_alias):
        mock_get_account_alias.return_value = "test-account"

        conn = boto3.client('ses', region_name=self.test_region)
        conn.verify_email_identity(EmailAddress=self.test_sender)

        self.test_status_mail_plugin.run()

        send_quota = conn.get_send_quota()
        sent_count = int(send_quota['SentLast24Hours'])
        self.assertEqual(sent_count, 1)

    @mock_ses
    @patch(
        'monocyte.plugins.status_mail_plugin.StatusMailPlugin._get_account_alias'
    )
    def test_body_property_set_failure(self, mock_get_account_alias):
        mock_get_account_alias.return_value = "test-account"
        not_expected_body = 'CHANGED BODY'
        test_status_mail_plugin = StatusMailPlugin(
            self.unwanted_resources,
            self.problematic_resources,
            self.dry_run,
            region=self.test_region,
            sender=self.test_sender,
            recipients=self.test_recipients,
            body=not_expected_body)

        expected_body = (EXPECTED_PART_HEADER + EXPECTED_PART_DRY_RUN +
                         EXPECTED_PART_UNWANTED_FILLED +
                         EXPECTED_PART_PROBLEMATIC_FILLED +
                         EXPECTED_PART_FOOTER)
        self.assertNotEqual(test_status_mail_plugin.body, not_expected_body)
        self.assertEqual(test_status_mail_plugin.body, expected_body)