forked from nccgroup/ScoutSuite
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_main.py
executable file
·116 lines (83 loc) · 4.09 KB
/
test_main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import unittest
from unittest.mock import MagicMock, patch
from ScoutSuite.__main__ import run_from_cli
from ScoutSuite.core.cli_parser import ScoutSuiteArgumentParser
class TestMainClass(unittest.TestCase):
def setUp(self):
self.constructor = {}
self.mocked_provider = MagicMock()
self.mocked_engine = MagicMock()
self.mocked_report = MagicMock()
self.mocked_browser = MagicMock()
self.mocked_ruleset = MagicMock()
self.mocked_printInfo = MagicMock()
for import_name, mocked_object in [("print_info", self.mocked_printInfo),
("get_provider", self.mocked_provider),
("Ruleset", self.mocked_ruleset),
("ProcessingEngine", self.mocked_engine),
("ScoutReport", self.mocked_report),
("webbrowser", self.mocked_browser)]:
constructor_obj = patch("ScoutSuite.__main__.%s" % import_name, return_value=mocked_object).start()
self.constructor[mocked_object] = constructor_obj
self.mocked_report.save = MagicMock(return_value="dummyfile")
def tearDown(self):
patch.stopall()
async def test_empty(self):
args = None
code = None
with patch("sys.stderr", return_value=MagicMock()):
with self.assertRaises(SystemExit):
args = ScoutSuiteArgumentParser().parse_args(args)
code = await run_from_cli(args)
assert (code is None)
async def test_aws_provider(self):
args = ['aws']
self.mocked_provider.provider_code = "aws"
args = ScoutSuiteArgumentParser().parse_args(args)
code = await run_from_cli(args)
success_code = 0
assert (code == success_code)
report_init_args = self.constructor[self.mocked_report].call_args_list[0][0]
assert (report_init_args[0] == "aws") # provider
assert (report_init_args[1] == "aws") # report_file_name
assert (report_init_args[2] == "scoutsuite-report") # report_dir
async def test_gcp_provider(self):
args = ["gcp", "--service-account", "fakecredentials"]
self.mocked_provider.provider_code = "gcp"
args = ScoutSuiteArgumentParser().parse_args(args)
code = await run_from_cli(args)
success_code = 0
assert (code == success_code)
report_init_args = self.constructor[self.mocked_report].call_args_list[0][0]
assert (report_init_args[0] == "gcp") # provider
assert (report_init_args[1] == "gcp") # report_file_name
assert (report_init_args[2] == "scoutsuite-report") # report_dir
async def test_azure_provider(self):
args = ["azure", "--cli"]
self.mocked_provider.provider_code = "azure"
args = ScoutSuiteArgumentParser().parse_args(args)
code = await run_from_cli(args)
success_code = 0
assert (code == success_code)
report_init_args = self.constructor[self.mocked_report].call_args_list[0][0]
assert (report_init_args[0] == "azure") # provider
assert (report_init_args[1] == "azure") # report_file_name
assert (report_init_args[2] == "scoutsuite-report") # report_dir
async def test_unauthenticated(self):
args = ["aws"]
self.mocked_provider.provider_code = "aws"
self.mocked_provider.authenticate = MagicMock(return_value=False)
args = ScoutSuiteArgumentParser().parse_args(args)
code = await run_from_cli(args)
unauthenticated_code = 42
assert (code == unauthenticated_code)
async def test_keyboardinterrupted(self):
args = ["aws"]
self.mocked_provider.provider_code = "aws"
def _raise(e):
raise e
self.mocked_provider.fetch = MagicMock(side_effect=_raise(KeyboardInterrupt))
args = ScoutSuiteArgumentParser().parse_args(args)
code = await run_from_cli(args)
keyboardinterrupted_code = 130
assert (code == keyboardinterrupted_code)