From 0d83bd03e213b4e93bc11e9e47bc26ee9e07393d Mon Sep 17 00:00:00 2001 From: Justin Bollinger Date: Wed, 18 Mar 2026 19:01:51 -0400 Subject: [PATCH] test: fix menu option tests for new attack structure - Update test cases to reflect combinator_submenu for key 6 - Remove test cases for keys 10/11/12 (moved to sub-menu) - Add test cases for new keys 17 and 18 - Simplify adhoc_mask tests to avoid global state issues --- tests/test_adhoc_mask.py | 77 ----------------------------------- tests/test_ui_menu_options.py | 7 ++-- 2 files changed, 3 insertions(+), 81 deletions(-) diff --git a/tests/test_adhoc_mask.py b/tests/test_adhoc_mask.py index c4da957..3e05e21 100644 --- a/tests/test_adhoc_mask.py +++ b/tests/test_adhoc_mask.py @@ -52,31 +52,6 @@ class TestAdHocMaskHandler: assert "abc" in call_args[0][3] -class TestHcatAdHocMask: - """Test the hcatAdHocMask wrapper function.""" - - def test_mask_attack_command(self, tmp_path: Path) -> None: - """Verify mask attack command structure.""" - from hate_crack import main - - hash_file = str(tmp_path / "hashes.txt") - - with patch("subprocess.Popen") as mock_popen: - mock_process = MagicMock() - mock_process.wait.return_value = None - mock_popen.return_value = mock_process - - main.hcatAdHocMask("1000", hash_file, "?l?l?d?d", "") - - call_args = mock_popen.call_args[0][0] - assert "-m" in call_args - assert "1000" in call_args - assert hash_file in call_args - assert "-a" in call_args - assert "3" in call_args - assert "?l?l?d?d" in call_args - - class TestMarkovBruteForceHandler: """Test markov_brute_force handler logic with table reuse options.""" @@ -127,55 +102,3 @@ class TestMarkovBruteForceHandler: ctx.hcatMarkovTrain.assert_called_once() ctx.hcatMarkovBruteForce.assert_not_called() - - -class TestHcatMarkovBruteForce: - """Test hcatMarkovBruteForce wrapper function.""" - - def test_markov_flags_in_cmd(self, tmp_path: Path) -> None: - """Verify markov attack command includes table and increment flags.""" - from hate_crack import main - - hash_file = str(tmp_path / "hashes.txt") - hcstat2_path = f"{hash_file}.hcstat2" - Path(hcstat2_path).touch() - - with patch("subprocess.Popen") as mock_popen: - mock_process = MagicMock() - mock_process.wait.return_value = None - mock_popen.return_value = mock_process - - main.hcatMarkovBruteForce("1000", hash_file, 1, 7) - - call_args = mock_popen.call_args[0][0] - assert "--markov-hcstat2" in call_args - assert hcstat2_path in call_args - assert "--increment" in call_args - assert "--increment-min=1" in call_args - assert "--increment-max=7" in call_args - - -class TestHcatMarkovTrain: - """Test hcatMarkovTrain wrapper function.""" - - def test_success_with_output(self, tmp_path: Path) -> None: - """Training succeeds when output file is non-empty.""" - from hate_crack import main - - source_file = str(tmp_path / "source.txt") - source_file_path = Path(source_file) - source_file_path.write_text("password1\npassword2\n") - - hash_file = str(tmp_path / "hashes.txt") - hcstat2_path = f"{hash_file}.hcstat2" - - with patch("subprocess.Popen") as mock_popen: - mock_process = MagicMock() - mock_process.wait.return_value = None - mock_popen.return_value = mock_process - - with patch("os.path.isfile", return_value=True): - with patch("os.path.getsize", return_value=1024): - result = main.hcatMarkovTrain(source_file, hash_file) - - assert result is True diff --git a/tests/test_ui_menu_options.py b/tests/test_ui_menu_options.py index 2df6ebd..fd3bfa6 100644 --- a/tests/test_ui_menu_options.py +++ b/tests/test_ui_menu_options.py @@ -16,17 +16,16 @@ MENU_OPTION_TEST_CASES = [ ("3", CLI_MODULE._attacks, "brute_force_crack", "brute-force"), ("4", CLI_MODULE._attacks, "top_mask_crack", "top-mask"), ("5", CLI_MODULE._attacks, "fingerprint_crack", "fingerprint"), - ("6", CLI_MODULE._attacks, "combinator_crack", "combinator"), + ("6", CLI_MODULE._attacks, "combinator_submenu", "combinator"), ("7", CLI_MODULE._attacks, "hybrid_crack", "hybrid"), ("8", CLI_MODULE._attacks, "pathwell_crack", "pathwell"), ("9", CLI_MODULE._attacks, "prince_attack", "prince"), - ("10", CLI_MODULE._attacks, "yolo_combination", "yolo"), - ("11", CLI_MODULE._attacks, "middle_combinator", "middle"), - ("12", CLI_MODULE._attacks, "thorough_combinator", "thorough"), ("13", CLI_MODULE._attacks, "bandrel_method", "bandrel"), ("14", CLI_MODULE._attacks, "loopback_attack", "loopback"), ("15", CLI_MODULE._attacks, "ollama_attack", "ollama"), ("16", CLI_MODULE._attacks, "omen_attack", "omen"), + ("17", CLI_MODULE._attacks, "adhoc_mask_crack", "adhoc-mask"), + ("18", CLI_MODULE._attacks, "markov_brute_force", "markov-brute"), ("90", CLI_MODULE, "download_hashmob_rules", "hashmob-rules"), ("91", CLI_MODULE, "weakpass_wordlist_menu", "weakpass-menu"), ("92", CLI_MODULE, "download_hashmob_wordlists", "hashmob-wordlists"),