mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-10-09 21:14:22 +00:00
103 lines
3.4 KiB
Python
103 lines
3.4 KiB
Python
from unittest.mock import MagicMock, patch
|
|
|
|
from prowler.providers.gcp.services.cloudfunction.cloudfunction_service import (
|
|
CloudFunction,
|
|
)
|
|
from tests.providers.gcp.gcp_fixtures import (
|
|
GCP_PROJECT_ID,
|
|
mock_is_api_active,
|
|
set_mocked_gcp_provider,
|
|
)
|
|
|
|
_LOCATION_ID = "us-central1"
|
|
_FUNCTION_NAME = "my-function"
|
|
_CONNECTOR = (
|
|
f"projects/{GCP_PROJECT_ID}/locations/{_LOCATION_ID}/connectors/my-connector"
|
|
)
|
|
|
|
|
|
def _make_cloudfunction_client(functions_list):
|
|
"""Return a mock GCP API client for the Cloud Functions v2 service."""
|
|
client = MagicMock()
|
|
|
|
client.projects().locations().list().execute.return_value = {
|
|
"locations": [{"locationId": _LOCATION_ID}]
|
|
}
|
|
client.projects().locations().list_next.return_value = None
|
|
|
|
client.projects().locations().functions().list().execute.return_value = {
|
|
"functions": functions_list
|
|
}
|
|
client.projects().locations().functions().list_next.return_value = None
|
|
|
|
return client
|
|
|
|
|
|
class TestCloudFunctionService:
|
|
def test_get_functions_with_vpc_connector(self):
|
|
def mock_api_client(*args, **kwargs):
|
|
return _make_cloudfunction_client(
|
|
functions_list=[
|
|
{
|
|
"name": f"projects/{GCP_PROJECT_ID}/locations/{_LOCATION_ID}/functions/{_FUNCTION_NAME}",
|
|
"state": "ACTIVE",
|
|
"serviceConfig": {
|
|
"vpcConnector": _CONNECTOR,
|
|
},
|
|
}
|
|
]
|
|
)
|
|
|
|
with (
|
|
patch(
|
|
"prowler.providers.gcp.lib.service.service.GCPService.__is_api_active__",
|
|
new=mock_is_api_active,
|
|
),
|
|
patch(
|
|
"prowler.providers.gcp.lib.service.service.GCPService.__generate_client__",
|
|
new=mock_api_client,
|
|
),
|
|
):
|
|
cf_client = CloudFunction(
|
|
set_mocked_gcp_provider(project_ids=[GCP_PROJECT_ID])
|
|
)
|
|
|
|
assert len(cf_client.functions) == 1
|
|
fn = cf_client.functions[0]
|
|
assert fn.name == _FUNCTION_NAME
|
|
assert fn.project_id == GCP_PROJECT_ID
|
|
assert fn.location == _LOCATION_ID
|
|
assert fn.state == "ACTIVE"
|
|
assert fn.vpc_connector == _CONNECTOR
|
|
|
|
def test_get_functions_without_vpc_connector(self):
|
|
def mock_api_client(*args, **kwargs):
|
|
return _make_cloudfunction_client(
|
|
functions_list=[
|
|
{
|
|
"name": f"projects/{GCP_PROJECT_ID}/locations/{_LOCATION_ID}/functions/no-vpc-func",
|
|
"state": "ACTIVE",
|
|
"serviceConfig": {},
|
|
}
|
|
]
|
|
)
|
|
|
|
with (
|
|
patch(
|
|
"prowler.providers.gcp.lib.service.service.GCPService.__is_api_active__",
|
|
new=mock_is_api_active,
|
|
),
|
|
patch(
|
|
"prowler.providers.gcp.lib.service.service.GCPService.__generate_client__",
|
|
new=mock_api_client,
|
|
),
|
|
):
|
|
cf_client = CloudFunction(
|
|
set_mocked_gcp_provider(project_ids=[GCP_PROJECT_ID])
|
|
)
|
|
|
|
assert len(cf_client.functions) == 1
|
|
fn = cf_client.functions[0]
|
|
assert fn.name == "no-vpc-func"
|
|
assert fn.vpc_connector is None
|