From f73beac3a7ac3c85baf26237cf49f61587e7491e Mon Sep 17 00:00:00 2001 From: VakarisZ Date: Thu, 30 Apr 2020 16:12:58 +0300 Subject: [PATCH] Implemented map/report generation tests which are based on telemetries rather than real exploitation --- envs/monkey_zoo/blackbox/test_blackbox.py | 17 ++++++--- .../map_generation_from_telemetries.py | 31 ++++++++++++++++ .../performance/performance_test_workflow.py | 2 ++ .../report_generation_from_telemetries.py | 35 +++++++++++++++++++ .../telemetry_performance_test_workflow.py | 21 +++++++++++ 5 files changed, 102 insertions(+), 4 deletions(-) create mode 100644 envs/monkey_zoo/blackbox/tests/performance/map_generation_from_telemetries.py create mode 100644 envs/monkey_zoo/blackbox/tests/performance/report_generation_from_telemetries.py create mode 100644 envs/monkey_zoo/blackbox/tests/performance/telemetry_performance_test_workflow.py diff --git a/envs/monkey_zoo/blackbox/test_blackbox.py b/envs/monkey_zoo/blackbox/test_blackbox.py index c0a7caf3d..35db89eb4 100644 --- a/envs/monkey_zoo/blackbox/test_blackbox.py +++ b/envs/monkey_zoo/blackbox/test_blackbox.py @@ -10,7 +10,10 @@ from envs.monkey_zoo.blackbox.island_client.monkey_island_client import MonkeyIs from envs.monkey_zoo.blackbox.log_handlers.test_logs_handler import TestLogsHandler from envs.monkey_zoo.blackbox.tests.exploitation import ExploitationTest from envs.monkey_zoo.blackbox.tests.performance.map_generation import MapGenerationTest +from envs.monkey_zoo.blackbox.tests.performance.map_generation_from_telemetries import MapGenerationFromTelemetryTest from envs.monkey_zoo.blackbox.tests.performance.report_generation import ReportGenerationTest +from envs.monkey_zoo.blackbox.tests.performance.report_generation_from_telemetries import \ + ReportGenerationFromTelemetryTest from envs.monkey_zoo.blackbox.tests.performance.telemetry_performance_test import TelemetryPerformanceTest from envs.monkey_zoo.blackbox.utils import gcp_machine_handlers @@ -26,11 +29,11 @@ LOGGER = logging.getLogger(__name__) @pytest.fixture(autouse=True, scope='session') def GCPHandler(request): GCPHandler = gcp_machine_handlers.GCPHandler() - GCPHandler.start_machines(" ".join(GCP_TEST_MACHINE_LIST)) - wait_machine_bootup() + #GCPHandler.start_machines(" ".join(GCP_TEST_MACHINE_LIST)) + #wait_machine_bootup() def fin(): - GCPHandler.stop_machines(" ".join(GCP_TEST_MACHINE_LIST)) + #GCPHandler.stop_machines(" ".join(GCP_TEST_MACHINE_LIST)) pass request.addfinalizer(fin) @@ -49,7 +52,7 @@ def wait_machine_bootup(): @pytest.fixture(scope='class') def island_client(island): island_client_object = MonkeyIslandClient(island) - island_client_object.reset_env() + # island_client_object.reset_env() yield island_client_object @@ -147,5 +150,11 @@ class TestMonkeyBlackbox(object): "PERFORMANCE.conf", timeout_in_seconds=10*60) + def test_report_generation_from_fake_telemetries(self, island_client): + ReportGenerationFromTelemetryTest(island_client).run() + + def test_map_generation_from_fake_telemetries(self, island_client): + MapGenerationFromTelemetryTest(island_client).run() + def test_telem_performance(self, island_client): TelemetryPerformanceTest(island_client).test_telemetry_performance() diff --git a/envs/monkey_zoo/blackbox/tests/performance/map_generation_from_telemetries.py b/envs/monkey_zoo/blackbox/tests/performance/map_generation_from_telemetries.py new file mode 100644 index 000000000..c5344d8f7 --- /dev/null +++ b/envs/monkey_zoo/blackbox/tests/performance/map_generation_from_telemetries.py @@ -0,0 +1,31 @@ +from datetime import timedelta + +from envs.monkey_zoo.blackbox.tests.performance.performance_test import PerformanceTest +from envs.monkey_zoo.blackbox.tests.performance.performance_test_config import PerformanceTestConfig +from envs.monkey_zoo.blackbox.tests.performance.telemetry_performance_test_workflow import \ + TelemetryPerformanceTestWorkflow + +MAX_ALLOWED_SINGLE_PAGE_TIME = timedelta(seconds=2) +MAX_ALLOWED_TOTAL_TIME = timedelta(seconds=5) + +MAP_RESOURCES = [ + "api/netmap", +] + + +class MapGenerationFromTelemetryTest(PerformanceTest): + + TEST_NAME = "Map generation from fake telemetries test" + + def __init__(self, island_client, break_on_timeout=False): + self.island_client = island_client + performance_config = PerformanceTestConfig(max_allowed_single_page_time=MAX_ALLOWED_SINGLE_PAGE_TIME, + max_allowed_total_time=MAX_ALLOWED_TOTAL_TIME, + endpoints_to_test=MAP_RESOURCES, + break_on_timeout=break_on_timeout) + self.performance_test_workflow = TelemetryPerformanceTestWorkflow(MapGenerationFromTelemetryTest.TEST_NAME, + self.island_client, + performance_config) + + def run(self): + self.performance_test_workflow.run() diff --git a/envs/monkey_zoo/blackbox/tests/performance/performance_test_workflow.py b/envs/monkey_zoo/blackbox/tests/performance/performance_test_workflow.py index f6cd1dada..cdb4f08ac 100644 --- a/envs/monkey_zoo/blackbox/tests/performance/performance_test_workflow.py +++ b/envs/monkey_zoo/blackbox/tests/performance/performance_test_workflow.py @@ -25,6 +25,8 @@ class PerformanceTestWorkflow(BasicTest): self.exploitation_test.wait_for_monkey_process_to_finish() performance_test = EndpointPerformanceTest(self.name, self.performance_config, self.island_client) try: + if not self.island_client.is_all_monkeys_dead(): + raise RuntimeError("Can't test report times since not all Monkeys have died.") assert performance_test.run() finally: self.exploitation_test.parse_logs() diff --git a/envs/monkey_zoo/blackbox/tests/performance/report_generation_from_telemetries.py b/envs/monkey_zoo/blackbox/tests/performance/report_generation_from_telemetries.py new file mode 100644 index 000000000..a08bbda70 --- /dev/null +++ b/envs/monkey_zoo/blackbox/tests/performance/report_generation_from_telemetries.py @@ -0,0 +1,35 @@ +from datetime import timedelta + +from envs.monkey_zoo.blackbox.tests.performance.performance_test import PerformanceTest +from envs.monkey_zoo.blackbox.tests.performance.performance_test_config import PerformanceTestConfig +from envs.monkey_zoo.blackbox.tests.performance.telemetry_performance_test_workflow import \ + TelemetryPerformanceTestWorkflow + +MAX_ALLOWED_SINGLE_PAGE_TIME = timedelta(seconds=2) +MAX_ALLOWED_TOTAL_TIME = timedelta(seconds=5) + +REPORT_RESOURCES = [ + "api/report/security", + "api/attack/report", + "api/report/zero_trust/findings", + "api/report/zero_trust/principles", + "api/report/zero_trust/pillars" +] + + +class ReportGenerationFromTelemetryTest(PerformanceTest): + + TEST_NAME = "Map generation from fake telemetries test" + + def __init__(self, island_client, break_on_timeout=False): + self.island_client = island_client + performance_config = PerformanceTestConfig(max_allowed_single_page_time=MAX_ALLOWED_SINGLE_PAGE_TIME, + max_allowed_total_time=MAX_ALLOWED_TOTAL_TIME, + endpoints_to_test=REPORT_RESOURCES, + break_on_timeout=break_on_timeout) + self.performance_test_workflow = TelemetryPerformanceTestWorkflow(ReportGenerationFromTelemetryTest.TEST_NAME, + self.island_client, + performance_config) + + def run(self): + self.performance_test_workflow.run() diff --git a/envs/monkey_zoo/blackbox/tests/performance/telemetry_performance_test_workflow.py b/envs/monkey_zoo/blackbox/tests/performance/telemetry_performance_test_workflow.py new file mode 100644 index 000000000..320973d97 --- /dev/null +++ b/envs/monkey_zoo/blackbox/tests/performance/telemetry_performance_test_workflow.py @@ -0,0 +1,21 @@ +from envs.monkey_zoo.blackbox.tests.basic_test import BasicTest +from envs.monkey_zoo.blackbox.tests.performance.endpoint_performance_test import EndpointPerformanceTest +from envs.monkey_zoo.blackbox.tests.performance.performance_test_config import PerformanceTestConfig +from envs.monkey_zoo.blackbox.tests.performance.telemetry_performance_test import TelemetryPerformanceTest + + +class TelemetryPerformanceTestWorkflow(BasicTest): + + def __init__(self, name, island_client, performance_config: PerformanceTestConfig): + self.name = name + self.island_client = island_client + self.performance_config = performance_config + + def run(self): + try: + # TelemetryPerformanceTest(island_client=self.island_client).test_telemetry_performance() + performance_test = EndpointPerformanceTest(self.name, self.performance_config, self.island_client) + assert performance_test.run() + finally: + pass + # self.island_client.reset_env()