1
|
|
|
import os |
2
|
|
|
|
3
|
|
|
import pytest |
4
|
|
|
|
5
|
|
|
from oval_graph.arf_xml_parser.arf_xml_parser import ARFXMLParser |
6
|
|
|
|
7
|
|
|
|
8
|
|
|
def get_arf_report_patch(src="../global_test_data/ssg-fedora-ds-arf.xml"): |
9
|
|
|
top_patch = os.path.dirname(os.path.realpath(__file__)) |
10
|
|
|
return os.path.join(top_patch, src) |
11
|
|
|
|
12
|
|
|
|
13
|
|
|
@pytest.mark.parametrize("rule_id, result", [ |
14
|
|
|
( |
15
|
|
|
"xccdf_org.ssgproject.content_rule_accounts_passwords_pam_faillock_deny", |
16
|
|
|
"false", |
17
|
|
|
), |
18
|
|
|
( |
19
|
|
|
"xccdf_org.ssgproject.content_rule_sshd_disable_gssapi_auth", |
20
|
|
|
"false", |
21
|
|
|
), |
22
|
|
|
( |
23
|
|
|
"xccdf_org.ssgproject.content_rule_service_debug-shell_disabled", |
24
|
|
|
"true", |
25
|
|
|
), |
26
|
|
|
( |
27
|
|
|
"xccdf_org.ssgproject.content_rule_mount_option_dev_shm_noexec", |
28
|
|
|
"false", |
29
|
|
|
), |
30
|
|
|
( |
31
|
|
|
"xccdf_org.ssgproject.content_rule_audit_rules_unsuccessful_file_modification_creat", |
32
|
|
|
"false", |
33
|
|
|
), |
34
|
|
|
( |
35
|
|
|
"xccdf_org.ssgproject.content_rule_audit_rules_file_deletion_events_rmdir", |
36
|
|
|
"false", |
37
|
|
|
), |
38
|
|
|
( |
39
|
|
|
"xccdf_org.ssgproject.content_rule_require_singleuser_auth", |
40
|
|
|
"true", |
41
|
|
|
), |
42
|
|
|
]) |
43
|
|
|
def test_parsing_and_evaluate_scan_rule(rule_id, result): |
44
|
|
|
patch = get_arf_report_patch() |
45
|
|
|
|
46
|
|
|
parser = ARFXMLParser(patch) |
47
|
|
|
oval_tree = parser.get_oval_tree(rule_id) |
48
|
|
|
assert oval_tree.evaluate_tree() == result |
49
|
|
|
|
50
|
|
|
|
51
|
|
|
@pytest.mark.parametrize("rule_id, pattern", [ |
52
|
|
|
("hello", "404 rule \"hello\" not found!"), |
53
|
|
|
("xccdf_org.ssgproject.content_rule_ntpd_specify_remote_server", "notselected"), |
54
|
|
|
("xccdf_org.ssgproject.content_rule_configure_bind_crypto_policy", "notchecked"), |
55
|
|
|
("xccdf_org.ssgproject.content_rule_ensure_gpgcheck_local_packages", "notapplicable"), |
56
|
|
|
]) |
57
|
|
|
def test_parsing_bad_rule(rule_id, pattern): |
58
|
|
|
patch = get_arf_report_patch() |
59
|
|
|
parser = ARFXMLParser(patch) |
60
|
|
|
|
61
|
|
|
with pytest.raises(Exception, match=pattern): |
62
|
|
|
assert parser.get_oval_tree(rule_id) |
63
|
|
|
|
64
|
|
|
|
65
|
|
|
def test_use_bad_report_file(): |
66
|
|
|
src = '../global_test_data/xccdf_org.ssgproject.content_profile_ospp-results-initial.xml' |
67
|
|
|
patch = get_arf_report_patch(src) |
68
|
|
|
with pytest.raises(Exception, match=r"arf\b|ARF\b"): |
69
|
|
|
assert ARFXMLParser(patch) |
70
|
|
|
|