mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-07-23 12:31:54 +00:00
efba5d2a8d
Co-authored-by: MrCloudSec <hello@mistercloudsec.com>
106 lines
3.7 KiB
Python
106 lines
3.7 KiB
Python
from unittest.mock import patch
|
|
|
|
import botocore
|
|
from moto import mock_aws
|
|
|
|
from prowler.providers.aws.services.codepipeline.codepipeline_service import (
|
|
CodePipeline,
|
|
Pipeline,
|
|
Source,
|
|
)
|
|
from tests.providers.aws.utils import (
|
|
AWS_ACCOUNT_NUMBER,
|
|
AWS_COMMERCIAL_PARTITION,
|
|
AWS_REGION_EU_WEST_1,
|
|
set_mocked_aws_provider,
|
|
)
|
|
|
|
pipeline_name = "test-pipeline"
|
|
pipeline_arn = f"arn:{AWS_COMMERCIAL_PARTITION}:codepipeline:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:{pipeline_name}"
|
|
source_type = "CodeStarSourceConnection"
|
|
repository_id = "prowler-cloud/prowler-private"
|
|
connection_arn = f"arn:{AWS_COMMERCIAL_PARTITION}:codestar-connections:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:connection/test"
|
|
|
|
# Mocking API calls
|
|
make_api_call = botocore.client.BaseClient._make_api_call
|
|
|
|
|
|
def mock_make_api_call(self, operation_name, kwarg):
|
|
if operation_name == "ListPipelines":
|
|
return {"pipelines": [{"name": pipeline_name}]}
|
|
elif operation_name == "GetPipeline":
|
|
return {
|
|
"pipeline": {
|
|
"name": pipeline_name,
|
|
"stages": [
|
|
{
|
|
"name": "Source",
|
|
"actions": [
|
|
{
|
|
"name": "Source",
|
|
"actionTypeId": {
|
|
"category": "Source",
|
|
"owner": "AWS",
|
|
"provider": source_type,
|
|
"version": "1",
|
|
},
|
|
"configuration": {
|
|
"ConnectionArn": connection_arn,
|
|
"FullRepositoryId": repository_id,
|
|
},
|
|
}
|
|
],
|
|
}
|
|
],
|
|
},
|
|
}
|
|
elif operation_name == "ListTagsForResource":
|
|
return {"tags": [{"key": "Environment", "value": "Test"}]}
|
|
return make_api_call(self, operation_name, kwarg)
|
|
|
|
|
|
# Mock generate_regional_clients()
|
|
def mock_generate_regional_clients(provider, service):
|
|
regional_client = provider._session.current_session.client(
|
|
service, region_name=AWS_REGION_EU_WEST_1
|
|
)
|
|
regional_client.region = AWS_REGION_EU_WEST_1
|
|
return {AWS_REGION_EU_WEST_1: regional_client}
|
|
|
|
|
|
class Test_CodePipeline_Service:
|
|
@patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
|
|
@patch(
|
|
"prowler.providers.aws.aws_provider.AwsProvider.generate_regional_clients",
|
|
new=mock_generate_regional_clients,
|
|
)
|
|
@mock_aws
|
|
def test_codepipeline_service(self):
|
|
codepipeline = CodePipeline(set_mocked_aws_provider())
|
|
|
|
assert codepipeline.session.__class__.__name__ == "Session"
|
|
assert codepipeline.service == "codepipeline"
|
|
|
|
# Test pipeline properties
|
|
assert len(codepipeline.pipelines) == 1
|
|
assert isinstance(codepipeline.pipelines, dict)
|
|
assert isinstance(codepipeline.pipelines[pipeline_arn], Pipeline)
|
|
|
|
pipeline = codepipeline.pipelines[pipeline_arn]
|
|
assert pipeline.name == pipeline_name
|
|
assert pipeline.arn == pipeline_arn
|
|
assert pipeline.region == AWS_REGION_EU_WEST_1
|
|
|
|
# Test source properties
|
|
assert isinstance(pipeline.source, Source)
|
|
assert pipeline.source.type == source_type
|
|
assert pipeline.source.repository_id == repository_id
|
|
assert pipeline.source.configuration == {
|
|
"ConnectionArn": connection_arn,
|
|
"FullRepositoryId": repository_id,
|
|
}
|
|
|
|
# Test tags
|
|
assert pipeline.tags[0]["key"] == "Environment"
|
|
assert pipeline.tags[0]["value"] == "Test"
|