Passed
Pull Request — master (#30)
by Jan
06:05
created

get_parser()   A

Complexity

Conditions 2

Size

Total Lines 5
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 5
nop 1
dl 0
loc 5
rs 10
c 0
b 0
f 0
1
import pytest
2
3
from oscap_report.scap_results_parser.data_structures import Report, Rule
4
from oscap_report.scap_results_parser.scap_results_parser import \
5
    SCAPResultsParser
6
7
from ..constants import (PATH_TO_ARF, PATH_TO_ARF_WITH_REMOVED_INFO,
8
                         PATH_TO_EMPTY_XML_FILE,
9
                         PATH_TO_RULE_AND_CPE_CHECK_ARF,
10
                         PATH_TO_SIMPLE_RULE_FAIL_ARF,
11
                         PATH_TO_SIMPLE_RULE_PASS_ARF, PATH_TO_XCCDF)
12
13
14
def get_parser(file_path):
15
    xml_data = None
16
    with open(file_path, "r", encoding="utf-8") as xml_report:
17
        xml_data = xml_report.read().encode()
18
    return SCAPResultsParser(xml_data)
19
20
21
@pytest.mark.parametrize("file_path, result", [
22
    (PATH_TO_ARF, True),
23
    (PATH_TO_SIMPLE_RULE_PASS_ARF, True),
24
    (PATH_TO_SIMPLE_RULE_FAIL_ARF, True),
25
    (PATH_TO_RULE_AND_CPE_CHECK_ARF, True),
26
    (PATH_TO_ARF_WITH_REMOVED_INFO, True),
27
    (PATH_TO_XCCDF, False),
28
    (PATH_TO_EMPTY_XML_FILE, False),
29
])
30
def test_validation(file_path, result):
31
    parser = get_parser(file_path)
32
    assert parser.validate(parser.arf_schemas_path) == result
33
34
35
@pytest.mark.parametrize("file_path, number_of_cpe_platforms", [
36
    (PATH_TO_ARF, 13),
37
    (PATH_TO_XCCDF, 13),
38
    (PATH_TO_SIMPLE_RULE_PASS_ARF, 0),
39
    (PATH_TO_SIMPLE_RULE_FAIL_ARF, 0),
40
    (PATH_TO_ARF_WITH_REMOVED_INFO, 0),
41
    (PATH_TO_RULE_AND_CPE_CHECK_ARF, 1),
42
])
43
def test_get_profile_info(file_path, number_of_cpe_platforms):
44
    parser = get_parser(file_path)
45
    report = parser.get_profile_info()
46
    assert len(report.cpe_platforms) == number_of_cpe_platforms
47
48
49
@pytest.mark.parametrize("file_path, number_of_rules", [
50
    (PATH_TO_ARF, 714),
51
    (PATH_TO_XCCDF, 714),
52
    (PATH_TO_SIMPLE_RULE_PASS_ARF, 1),
53
    (PATH_TO_SIMPLE_RULE_FAIL_ARF, 1),
54
    (PATH_TO_ARF_WITH_REMOVED_INFO, 1),
55
    (PATH_TO_RULE_AND_CPE_CHECK_ARF, 3),
56
])
57
def test_get_info_about_rules_in_profile(file_path, number_of_rules):
58
    parser = get_parser(file_path)
59
    rules = parser.get_info_about_rules_in_profile()
60
    assert len(rules.keys()) == number_of_rules
61
    for rule in rules.values():
62
        assert isinstance(rule, Rule)
63
64
65
@pytest.mark.parametrize("file_path, contains_oval_tree", [
66
    (PATH_TO_ARF, True),
67
    (PATH_TO_XCCDF, False),
68
])
69
def test_parse_report(file_path, contains_oval_tree):
70
    parser = get_parser(file_path)
71
    report = parser.parse_report()
72
    assert isinstance(report, Report)
73
    assert report.profile_name is not None
74
    assert report.rules is not None
75
    rule_id = "xccdf_org.ssgproject.content_rule_accounts_passwords_pam_faillock_deny"
76
    assert isinstance(report.rules[rule_id], Rule)
77
    assert (report.rules[rule_id].oval_tree is not None) == contains_oval_tree
78