From eb3b7d08bca872e82ec51b2f1bc230fda3a2305c Mon Sep 17 00:00:00 2001 From: HugoPBrito Date: Wed, 16 Oct 2024 17:28:08 +0200 Subject: [PATCH] feat: added testing --- .../providers/aws/services/mq/mq_service.py | 3 + ...ctivemq_broker_active_standby_mode_test.py | 164 ++++++++++++++++++ .../aws/services/mq/mq_service_test.py | 5 +- 3 files changed, 170 insertions(+), 2 deletions(-) diff --git a/prowler/providers/aws/services/mq/mq_service.py b/prowler/providers/aws/services/mq/mq_service.py index 360dc85ba1..29c64a3d90 100644 --- a/prowler/providers/aws/services/mq/mq_service.py +++ b/prowler/providers/aws/services/mq/mq_service.py @@ -1,4 +1,5 @@ from enum import Enum +from typing import Optional from pydantic import BaseModel @@ -13,6 +14,7 @@ def __init__(self, provider): super().__init__("mq", provider) self.brokers = {} self.__threading_call__(self._list_brokers) + self.__threading_call__(self._describe_broker, self.brokers.values()) def _list_brokers(self, regional_client): logger.info("MQ - Listing brokers...") @@ -74,3 +76,4 @@ class Broker(BaseModel): region: str engine_type: EngineType = EngineType.ACTIVEMQ deployment_mode: DeploymentMode = DeploymentMode.SINGLE_INSTANCE + tags: Optional[list] = [] diff --git a/tests/providers/aws/services/mq/mq_activemq_broker_active_standby_mode/mq_activemq_broker_active_standby_mode_test.py b/tests/providers/aws/services/mq/mq_activemq_broker_active_standby_mode/mq_activemq_broker_active_standby_mode_test.py index e69de29bb2..3d6c9eaceb 100644 --- a/tests/providers/aws/services/mq/mq_activemq_broker_active_standby_mode/mq_activemq_broker_active_standby_mode_test.py +++ b/tests/providers/aws/services/mq/mq_activemq_broker_active_standby_mode/mq_activemq_broker_active_standby_mode_test.py @@ -0,0 +1,164 @@ +from unittest import mock + +from boto3 import client +from moto import mock_aws + +from tests.providers.aws.utils import ( + AWS_ACCOUNT_NUMBER, + AWS_REGION_US_EAST_1, + set_mocked_aws_provider, +) + + +class Test_mq_activemq_broker_active_standby_mode: + @mock_aws + def test_no_brokers(self): + from prowler.providers.aws.services.mq.mq_service import MQ + + aws_provider = set_mocked_aws_provider([AWS_REGION_US_EAST_1]) + + with mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=aws_provider, + ): + with mock.patch( + "prowler.providers.aws.services.mq.mq_activemq_broker_active_standby_mode.mq_activemq_broker_active_standby_mode.mq_client", + new=MQ(aws_provider), + ): + # Test Check + from prowler.providers.aws.services.mq.mq_activemq_broker_active_standby_mode.mq_activemq_broker_active_standby_mode import ( + mq_activemq_broker_active_standby_mode, + ) + + check = mq_activemq_broker_active_standby_mode() + result = check.execute() + + assert len(result) == 0 + + @mock_aws + def test_no_activemq_brokers(self): + from prowler.providers.aws.services.mq.mq_service import MQ + + aws_provider = set_mocked_aws_provider([AWS_REGION_US_EAST_1]) + + with mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=aws_provider, + ): + with mock.patch( + "prowler.providers.aws.services.mq.mq_activemq_broker_active_standby_mode.mq_activemq_broker_active_standby_mode.mq_client", + new=MQ(aws_provider), + ): + # Test Check + from prowler.providers.aws.services.mq.mq_activemq_broker_active_standby_mode.mq_activemq_broker_active_standby_mode import ( + mq_activemq_broker_active_standby_mode, + ) + + check = mq_activemq_broker_active_standby_mode() + result = check.execute() + + assert len(result) == 0 + + @mock_aws + def test_activemq_broker_active_standby_mode_enabled(self): + mq_client = client("mq", region_name=AWS_REGION_US_EAST_1) + broker_id = mq_client.create_broker( + BrokerName="test-broker", + EngineType="ACTIVEMQ", + EngineVersion="5.15.0", + HostInstanceType="mq.t2.micro", + Users=[ + { + "Username": "admin", + "Password": "admin", + }, + ], + DeploymentMode="ACTIVE_STANDBY_MULTI_AZ", + PubliclyAccessible=False, + AutoMinorVersionUpgrade=True, + )["BrokerId"] + + from prowler.providers.aws.services.mq.mq_service import MQ + + aws_provider = set_mocked_aws_provider([AWS_REGION_US_EAST_1]) + + with mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=aws_provider, + ): + with mock.patch( + "prowler.providers.aws.services.mq.mq_activemq_broker_active_standby_mode.mq_activemq_broker_active_standby_mode.mq_client", + new=MQ(aws_provider), + ): + # Test Check + from prowler.providers.aws.services.mq.mq_activemq_broker_active_standby_mode.mq_activemq_broker_active_standby_mode import ( + mq_activemq_broker_active_standby_mode, + ) + + check = mq_activemq_broker_active_standby_mode() + result = check.execute() + + assert len(result) == 1 + assert result[0].status == "PASS" + assert ( + result[0].status_extended + == f"MQ Broker {broker_id} does have active/standby deployment mode enabled." + ) + assert result[0].resource_id == broker_id + assert ( + result[0].resource_arn + == f"arn:{aws_provider.identity.partition}:mq:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:broker:{broker_id}" + ) + assert result[0].region == AWS_REGION_US_EAST_1 + + @mock_aws + def test_activemq_broker_active_standby_mode_disabled(self): + mq_client = client("mq", region_name=AWS_REGION_US_EAST_1) + broker_id = mq_client.create_broker( + BrokerName="test-broker", + EngineType="ACTIVEMQ", + EngineVersion="5.15.0", + HostInstanceType="mq.t2.micro", + Users=[ + { + "Username": "admin", + "Password": "admin", + }, + ], + DeploymentMode="SINGLE_INSTANCE", + PubliclyAccessible=False, + AutoMinorVersionUpgrade=False, + )["BrokerId"] + + from prowler.providers.aws.services.mq.mq_service import MQ + + aws_provider = set_mocked_aws_provider([AWS_REGION_US_EAST_1]) + + with mock.patch( + "prowler.providers.common.provider.Provider.get_global_provider", + return_value=aws_provider, + ): + with mock.patch( + "prowler.providers.aws.services.mq.mq_activemq_broker_active_standby_mode.mq_activemq_broker_active_standby_mode.mq_client", + new=MQ(aws_provider), + ): + # Test Check + from prowler.providers.aws.services.mq.mq_activemq_broker_active_standby_mode.mq_activemq_broker_active_standby_mode import ( + mq_activemq_broker_active_standby_mode, + ) + + check = mq_activemq_broker_active_standby_mode() + result = check.execute() + + assert len(result) == 1 + assert result[0].status == "FAIL" + assert ( + result[0].status_extended + == f"MQ Broker {broker_id} does not have active/standby deployment mode enabled." + ) + assert result[0].resource_id == broker_id + assert ( + result[0].resource_arn + == f"arn:{aws_provider.identity.partition}:mq:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:broker:{broker_id}" + ) + assert result[0].region == AWS_REGION_US_EAST_1 diff --git a/tests/providers/aws/services/mq/mq_service_test.py b/tests/providers/aws/services/mq/mq_service_test.py index 5b26d3ab28..33efeea231 100644 --- a/tests/providers/aws/services/mq/mq_service_test.py +++ b/tests/providers/aws/services/mq/mq_service_test.py @@ -1,7 +1,7 @@ from boto3 import client from moto import mock_aws -from prowler.providers.aws.services.mq.mq_service import MQ +from prowler.providers.aws.services.mq.mq_service import MQ, DeploymentMode, EngineType from tests.providers.aws.utils import AWS_REGION_EU_WEST_1, set_mocked_aws_provider @@ -99,4 +99,5 @@ def test_describe_broker(self): assert mq.brokers[broker_arn].name == "my-broker" assert mq.brokers[broker_arn].region == AWS_REGION_EU_WEST_1 assert mq.brokers[broker_arn].id == broker["BrokerId"] - assert mq.brokers[broker_arn].engine_type == "ActiveMQ" + assert mq.brokers[broker_arn].engine_type == EngineType.ACTIVEMQ + assert mq.brokers[broker_arn].deployment_mode == DeploymentMode.SINGLE_INSTANCE