From d9a1f229697569446ce1e96830ea1b004677b5de Mon Sep 17 00:00:00 2001 From: Mike Salvatore Date: Mon, 19 Jul 2021 14:26:40 -0400 Subject: [PATCH] Tests: Mark ZeroLogon tests as slow The ZerologonExploiter relies on impacket. Importing impacket is slow (approximately .72s). By moving the import statement in zerologon tests and marking them as slow, the import (and tests) can now be skipped by running `pytest -m 'not slow'`. --- .../infection_monkey/exploit/test_zerologon.py | 9 ++++++++- .../exploit/zerologon_utils/test_vuln_assessment.py | 7 ++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/monkey/tests/unit_tests/infection_monkey/exploit/test_zerologon.py b/monkey/tests/unit_tests/infection_monkey/exploit/test_zerologon.py index a2956887f..95beb1778 100644 --- a/monkey/tests/unit_tests/infection_monkey/exploit/test_zerologon.py +++ b/monkey/tests/unit_tests/infection_monkey/exploit/test_zerologon.py @@ -1,6 +1,5 @@ import pytest -from infection_monkey.exploit.zerologon import ZerologonExploiter from infection_monkey.model.host import VictimHost DOMAIN_NAME = "domain-name" @@ -15,6 +14,8 @@ NT_HASHES = ["def456", "765vut"] @pytest.fixture def zerologon_exploiter_object(monkeypatch): + from infection_monkey.exploit.zerologon import ZerologonExploiter + def mock_report_login_attempt(**kwargs): return None @@ -25,11 +26,13 @@ def zerologon_exploiter_object(monkeypatch): return obj +@pytest.mark.slow def test_assess_exploit_attempt_result_no_error(zerologon_exploiter_object): dummy_exploit_attempt_result = {"ErrorCode": 0} assert zerologon_exploiter_object.assess_exploit_attempt_result(dummy_exploit_attempt_result) +@pytest.mark.slow def test_assess_exploit_attempt_result_with_error(zerologon_exploiter_object): dummy_exploit_attempt_result = {"ErrorCode": 1} assert not zerologon_exploiter_object.assess_exploit_attempt_result( @@ -37,6 +40,7 @@ def test_assess_exploit_attempt_result_with_error(zerologon_exploiter_object): ) +@pytest.mark.slow def test_assess_restoration_attempt_result_restored(zerologon_exploiter_object): dummy_restoration_attempt_result = object() assert zerologon_exploiter_object.assess_restoration_attempt_result( @@ -44,6 +48,7 @@ def test_assess_restoration_attempt_result_restored(zerologon_exploiter_object): ) +@pytest.mark.slow def test_assess_restoration_attempt_result_not_restored(zerologon_exploiter_object): dummy_restoration_attempt_result = False assert not zerologon_exploiter_object.assess_restoration_attempt_result( @@ -51,6 +56,7 @@ def test_assess_restoration_attempt_result_not_restored(zerologon_exploiter_obje ) +@pytest.mark.slow def test__extract_user_creds_from_secrets_good_data(zerologon_exploiter_object): mock_dumped_secrets = [ f"{USERS[i]}:{RIDS[i]}:{LM_HASHES[i]}:{NT_HASHES[i]}:::" for i in range(len(USERS)) @@ -71,6 +77,7 @@ def test__extract_user_creds_from_secrets_good_data(zerologon_exploiter_object): assert zerologon_exploiter_object._extracted_creds == expected_extracted_creds +@pytest.mark.slow def test__extract_user_creds_from_secrets_bad_data(zerologon_exploiter_object): mock_dumped_secrets = [ f"{USERS[i]}:{RIDS[i]}:::{LM_HASHES[i]}:{NT_HASHES[i]}:::" for i in range(len(USERS)) diff --git a/monkey/tests/unit_tests/infection_monkey/exploit/zerologon_utils/test_vuln_assessment.py b/monkey/tests/unit_tests/infection_monkey/exploit/zerologon_utils/test_vuln_assessment.py index 525cd8e3f..c0635939c 100644 --- a/monkey/tests/unit_tests/infection_monkey/exploit/zerologon_utils/test_vuln_assessment.py +++ b/monkey/tests/unit_tests/infection_monkey/exploit/zerologon_utils/test_vuln_assessment.py @@ -2,7 +2,6 @@ import pytest from nmb.NetBIOS import NetBIOS from common.utils.exceptions import DomainControllerNameFetchError -from infection_monkey.exploit.zerologon_utils.vuln_assessment import get_dc_details from infection_monkey.model.host import VictimHost DOMAIN_NAME = "domain-name" @@ -21,7 +20,10 @@ def _get_stub_queryIPForName(netbios_names): return stub_queryIPForName +@pytest.mark.slow def test_get_dc_details_multiple_netbios_names(host, monkeypatch): + from infection_monkey.exploit.zerologon_utils.vuln_assessment import get_dc_details + NETBIOS_NAMES = ["Name1", "Name2", "Name3"] stub_queryIPForName = _get_stub_queryIPForName(NETBIOS_NAMES) @@ -33,7 +35,10 @@ def test_get_dc_details_multiple_netbios_names(host, monkeypatch): assert dc_handle == f"\\\\{NETBIOS_NAMES[0]}" +@pytest.mark.slow def test_get_dc_details_no_netbios_names(host, monkeypatch): + from infection_monkey.exploit.zerologon_utils.vuln_assessment import get_dc_details + NETBIOS_NAMES = [] stub_queryIPForName = _get_stub_queryIPForName(NETBIOS_NAMES)