mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-10-26 21:34:19 +00:00
197 lines
7.4 KiB
Python
197 lines
7.4 KiB
Python
from unittest.mock import patch
|
|
|
|
import botocore
|
|
from boto3 import client
|
|
from moto import mock_aws
|
|
|
|
from prowler.providers.aws.services.eventbridge.eventbridge_service import (
|
|
EventBridge,
|
|
Schema,
|
|
)
|
|
from tests.providers.aws.utils import (
|
|
AWS_ACCOUNT_NUMBER,
|
|
AWS_REGION_US_EAST_1,
|
|
set_mocked_aws_provider,
|
|
)
|
|
|
|
# Mocking Calls
|
|
make_api_call = botocore.client.BaseClient._make_api_call
|
|
|
|
|
|
def mock_make_api_call(self, operation_name, kwargs):
|
|
"""We have to mock every AWS API call using Boto3"""
|
|
if operation_name == "ListRegistries":
|
|
return {
|
|
"Registries": [
|
|
{
|
|
"RegistryArn": "arn:aws:schemas:us-east-1:123456789012:registry/test",
|
|
"RegistryName": "test",
|
|
"Tags": {"key1": "value1"},
|
|
},
|
|
]
|
|
}
|
|
if operation_name == "GetResourcePolicy":
|
|
return {
|
|
"Policy": '{"Version":"2012-10-17","Statement":[{"Sid":"AllowReadWrite","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::123456789012:root"},"Action":"schemas:*","Resource":"arn:aws:schemas:eu-west-1:123456789012:registry/test"}]}',
|
|
"RevisionId": "1",
|
|
}
|
|
if operation_name == "ListEndpoints":
|
|
return {
|
|
"Endpoints": [
|
|
{
|
|
"Name": "test-endpoint",
|
|
"Arn": f"arn:aws:events:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:endpoint/test-endpoint",
|
|
"ReplicationConfig": {"State": "DISABLED"},
|
|
}
|
|
]
|
|
}
|
|
|
|
return make_api_call(self, operation_name, kwargs)
|
|
|
|
|
|
@patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
|
|
class Test_EventBridge_Service:
|
|
# Test EventBridge Service
|
|
@mock_aws
|
|
def test_service(self):
|
|
# EventBridge client for this test class
|
|
aws_provider = set_mocked_aws_provider()
|
|
eventbridge = EventBridge(aws_provider)
|
|
assert eventbridge.service == "events"
|
|
|
|
# Test EventBridge Client
|
|
@mock_aws
|
|
def test_client(self):
|
|
# EventBridge client for this test class
|
|
aws_provider = set_mocked_aws_provider()
|
|
eventbridge = EventBridge(aws_provider)
|
|
for client_ in eventbridge.regional_clients.values():
|
|
assert client_.__class__.__name__ == "EventBridge"
|
|
|
|
# Test EventBridge Session
|
|
@mock_aws
|
|
def test__get_session__(self):
|
|
# EventBridge client for this test class
|
|
aws_provider = set_mocked_aws_provider()
|
|
eventbridge = EventBridge(aws_provider)
|
|
assert eventbridge.session.__class__.__name__ == "Session"
|
|
|
|
# Test EventBridge Session
|
|
@mock_aws
|
|
def test_audited_account(self):
|
|
# EventBridge client for this test class
|
|
aws_provider = set_mocked_aws_provider()
|
|
eventbridge = EventBridge(aws_provider)
|
|
assert eventbridge.audited_account == AWS_ACCOUNT_NUMBER
|
|
|
|
# Test Schema Service
|
|
@mock_aws
|
|
def test_schema_service(self):
|
|
# Schema client for this test class
|
|
aws_provider = set_mocked_aws_provider()
|
|
schema = Schema(aws_provider)
|
|
assert schema.service == "schemas"
|
|
|
|
# Test Schema Client
|
|
@mock_aws
|
|
def test_schema_client(self):
|
|
# Schema client for this test class
|
|
aws_provider = set_mocked_aws_provider()
|
|
schema = Schema(aws_provider)
|
|
for client_ in schema.regional_clients.values():
|
|
assert client_.__class__.__name__ == "Schemas"
|
|
|
|
# Test Schema Session
|
|
@mock_aws
|
|
def test__schema_get_session__(self):
|
|
# Schema client for this test class
|
|
aws_provider = set_mocked_aws_provider()
|
|
schema = Schema(aws_provider)
|
|
assert schema.session.__class__.__name__ == "Session"
|
|
|
|
# Test Schema Session
|
|
@mock_aws
|
|
def test_schema_audited_account(self):
|
|
# Schema client for this test class
|
|
aws_provider = set_mocked_aws_provider()
|
|
schema = Schema(aws_provider)
|
|
assert schema.audited_account == AWS_ACCOUNT_NUMBER
|
|
|
|
# Test EventBridge Buses
|
|
@mock_aws
|
|
def test_list_event_buses(self):
|
|
# EventBridge client for this test class
|
|
events_client = client("events", region_name=AWS_REGION_US_EAST_1)
|
|
events_client.create_event_bus(Name="test")
|
|
events_client.tag_resource(
|
|
ResourceARN=f"arn:aws:events:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:event-bus/test",
|
|
Tags=[{"Key": "key-1", "Value": "value-1"}],
|
|
)
|
|
events_client.put_permission(
|
|
EventBusName="test",
|
|
Action="events:PutEvents",
|
|
Principal="123456789012",
|
|
StatementId="test-statement",
|
|
)
|
|
aws_provider = set_mocked_aws_provider()
|
|
eventbridge = EventBridge(aws_provider)
|
|
assert len(eventbridge.buses) == 34 # 1 per region
|
|
for bus in eventbridge.buses.values():
|
|
if bus.name == "test":
|
|
assert (
|
|
bus.arn
|
|
== f"arn:aws:events:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:event-bus/test"
|
|
)
|
|
assert bus.name == "test"
|
|
assert bus.region == AWS_REGION_US_EAST_1
|
|
assert bus.policy == {
|
|
"Statement": [
|
|
{
|
|
"Action": "events:PutEvents",
|
|
"Effect": "Allow",
|
|
"Principal": {"AWS": "arn:aws:iam::123456789012:root"},
|
|
"Resource": "arn:aws:events:us-east-1:123456789012:event-bus/test",
|
|
"Sid": "test-statement",
|
|
}
|
|
],
|
|
"Version": "2012-10-17",
|
|
}
|
|
assert bus.tags == [{"Key": "key-1", "Value": "value-1"}]
|
|
|
|
# Test Schema Registries
|
|
def test_list_policies(self):
|
|
aws_provider = set_mocked_aws_provider()
|
|
schema = Schema(aws_provider)
|
|
assert len(schema.registries) == 1
|
|
schema_arn = "arn:aws:schemas:us-east-1:123456789012:registry/test"
|
|
assert schema.registries[schema_arn].arn == schema_arn
|
|
assert schema.registries[schema_arn].name == "test"
|
|
assert schema.registries[schema_arn].tags == [{"key1": "value1"}]
|
|
assert schema.registries[schema_arn].policy == {
|
|
"Statement": [
|
|
{
|
|
"Action": "schemas:*",
|
|
"Effect": "Allow",
|
|
"Principal": {"AWS": "arn:aws:iam::123456789012:root"},
|
|
"Resource": "arn:aws:schemas:eu-west-1:123456789012:registry/test",
|
|
"Sid": "AllowReadWrite",
|
|
}
|
|
],
|
|
"Version": "2012-10-17",
|
|
}
|
|
|
|
# Test EventBridge Endpoints
|
|
def test_list_endpoints(self):
|
|
aws_provider = set_mocked_aws_provider([AWS_REGION_US_EAST_1])
|
|
eventbridge = EventBridge(aws_provider)
|
|
assert len(eventbridge.endpoints) == 1
|
|
endpoint_arn = f"arn:aws:events:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:endpoint/test-endpoint"
|
|
assert eventbridge.endpoints[endpoint_arn].name == "test-endpoint"
|
|
assert (
|
|
eventbridge.endpoints[endpoint_arn].arn
|
|
== f"arn:aws:events:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:endpoint/test-endpoint"
|
|
)
|
|
assert eventbridge.endpoints[endpoint_arn].replication_state == "DISABLED"
|
|
assert eventbridge.endpoints[endpoint_arn].tags == []
|
|
assert eventbridge.endpoints[endpoint_arn].region == AWS_REGION_US_EAST_1
|