mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-07-23 04:21:52 +00:00
186 lines
6.6 KiB
Python
186 lines
6.6 KiB
Python
from argparse import Namespace
|
|
from datetime import datetime
|
|
from os import rmdir
|
|
from unittest import mock
|
|
|
|
from freezegun import freeze_time
|
|
|
|
from prowler.config.config import output_file_timestamp
|
|
from prowler.providers.aws.models import AWSOutputOptions
|
|
from prowler.providers.azure.models import AzureOutputOptions
|
|
from prowler.providers.gcp.models import GCPOutputOptions
|
|
from prowler.providers.kubernetes.models import KubernetesOutputOptions
|
|
|
|
|
|
class Test_Output_Options:
|
|
@freeze_time(datetime.today())
|
|
def test_set_output_options_aws_no_output_filename(self):
|
|
arguments = Namespace()
|
|
arguments.status = ["FAIL"]
|
|
arguments.output_formats = ["csv"]
|
|
arguments.output_directory = "output_test_directory"
|
|
arguments.verbose = True
|
|
arguments.security_hub = True
|
|
arguments.shodan = None
|
|
arguments.only_logs = False
|
|
arguments.unix_timestamp = False
|
|
arguments.send_sh_only_fails = True
|
|
|
|
identity = mock.MagicMock()
|
|
identity.account = "123456789012"
|
|
|
|
output_options = AWSOutputOptions(arguments, {}, identity)
|
|
|
|
assert output_options.status == ["FAIL"]
|
|
assert output_options.output_modes == ["csv", "json-asff"]
|
|
assert output_options.output_directory == "output_test_directory"
|
|
assert output_options.verbose
|
|
assert output_options.security_hub_enabled
|
|
assert not output_options.shodan_api_key
|
|
assert not output_options.only_logs
|
|
assert not output_options.unix_timestamp
|
|
assert output_options.send_sh_only_fails
|
|
assert (
|
|
output_options.output_filename
|
|
== f"prowler-output-{identity.account}-{output_file_timestamp}"
|
|
)
|
|
assert output_options.bulk_checks_metadata == {}
|
|
|
|
rmdir(f"{arguments.output_directory}/compliance")
|
|
rmdir(arguments.output_directory)
|
|
|
|
@freeze_time(datetime.today())
|
|
def test_set_output_options_aws(self):
|
|
arguments = Namespace()
|
|
arguments.status = []
|
|
arguments.output_formats = ["csv"]
|
|
arguments.output_directory = "output_test_directory"
|
|
arguments.verbose = True
|
|
arguments.output_filename = "output_test_filename"
|
|
arguments.security_hub = True
|
|
arguments.shodan = None
|
|
arguments.only_logs = False
|
|
arguments.unix_timestamp = False
|
|
arguments.send_sh_only_fails = True
|
|
|
|
identity = mock.MagicMock()
|
|
identity.account = "123456789012"
|
|
|
|
output_options = AWSOutputOptions(arguments, {}, identity)
|
|
|
|
assert isinstance(output_options, AWSOutputOptions)
|
|
assert output_options.security_hub_enabled
|
|
assert output_options.send_sh_only_fails
|
|
assert output_options.status == []
|
|
assert output_options.output_modes == ["csv", "json-asff"]
|
|
assert output_options.output_directory == arguments.output_directory
|
|
assert output_options.bulk_checks_metadata == {}
|
|
assert output_options.verbose
|
|
assert output_options.output_filename == arguments.output_filename
|
|
|
|
rmdir(f"{arguments.output_directory}/compliance")
|
|
rmdir(arguments.output_directory)
|
|
|
|
@freeze_time(datetime.today())
|
|
def test_azure_provider_output_options_with_domain(self):
|
|
arguments = Namespace()
|
|
# Output Options
|
|
arguments.output_formats = ["csv"]
|
|
arguments.output_directory = "output_test_directory"
|
|
output_directory = arguments.output_directory
|
|
arguments.status = []
|
|
arguments.verbose = True
|
|
arguments.only_logs = False
|
|
arguments.unix_timestamp = False
|
|
arguments.shodan = None
|
|
|
|
identity = mock.MagicMock()
|
|
identity.tenant_domain = "test-domain"
|
|
|
|
output_options = AzureOutputOptions(
|
|
arguments,
|
|
{},
|
|
identity,
|
|
)
|
|
|
|
assert isinstance(output_options, AzureOutputOptions)
|
|
assert output_options.status == []
|
|
assert output_options.output_modes == [
|
|
"csv",
|
|
]
|
|
assert output_options.output_directory == output_directory
|
|
assert output_options.bulk_checks_metadata == {}
|
|
assert output_options.verbose
|
|
assert (
|
|
output_options.output_filename
|
|
== f"prowler-output-{identity.tenant_domain}-{output_file_timestamp}"
|
|
)
|
|
|
|
rmdir(f"{arguments.output_directory}/compliance")
|
|
rmdir(arguments.output_directory)
|
|
|
|
@freeze_time(datetime.today())
|
|
def test_gcp_output_options(self):
|
|
arguments = Namespace()
|
|
# Output options
|
|
arguments.status = []
|
|
arguments.output_formats = ["csv"]
|
|
arguments.output_directory = "output_test_directory"
|
|
arguments.verbose = True
|
|
arguments.only_logs = False
|
|
arguments.unix_timestamp = False
|
|
arguments.shodan = None
|
|
|
|
identity = mock.MagicMock()
|
|
identity.profile = "test-profile"
|
|
|
|
output_optionss = GCPOutputOptions(
|
|
arguments,
|
|
{},
|
|
identity,
|
|
)
|
|
|
|
assert isinstance(output_optionss, GCPOutputOptions)
|
|
assert output_optionss.status == []
|
|
assert output_optionss.output_modes == [
|
|
"csv",
|
|
]
|
|
assert output_optionss.output_directory == arguments.output_directory
|
|
assert output_optionss.bulk_checks_metadata == {}
|
|
assert output_optionss.verbose
|
|
assert f"prowler-output-{identity.profile}" in output_optionss.output_filename
|
|
|
|
rmdir(f"{arguments.output_directory}/compliance")
|
|
rmdir(arguments.output_directory)
|
|
|
|
def test_set_output_options_kubernetes(self):
|
|
arguments = Namespace()
|
|
arguments.status = []
|
|
arguments.output_formats = ["csv"]
|
|
arguments.output_directory = "output_test_directory"
|
|
arguments.verbose = True
|
|
arguments.output_filename = "output_test_filename"
|
|
arguments.only_logs = False
|
|
arguments.unix_timestamp = False
|
|
arguments.shodan = None
|
|
|
|
identity = mock.MagicMock()
|
|
identity.context = "test-context"
|
|
|
|
output_options = KubernetesOutputOptions(
|
|
arguments,
|
|
{},
|
|
identity,
|
|
)
|
|
|
|
assert isinstance(output_options, KubernetesOutputOptions)
|
|
assert output_options.status == []
|
|
assert output_options.output_modes == ["csv"]
|
|
assert output_options.output_directory == arguments.output_directory
|
|
assert output_options.bulk_checks_metadata == {}
|
|
assert output_options.verbose
|
|
assert output_options.output_filename == arguments.output_filename
|
|
|
|
rmdir(f"{arguments.output_directory}/compliance")
|
|
rmdir(arguments.output_directory)
|