Passed
Push — main ( 30ff8e...89eb90 )
by
unknown
07:54 queued 13s
created

tests.test_utils.get_cpe_al_parser()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
# Copyright 2022, Red Hat, Inc.
2
# SPDX-License-Identifier: LGPL-2.1-or-later
3
4
from dataclasses import replace
5
6
try:
7
    from functools import cache
8
except ImportError:
9
    from functools import lru_cache
10
11
    cache = lru_cache(maxsize=None)
12
13
from lxml import etree
14
15
from openscap_report.scap_results_parser import SCAPResultsParser
16
from openscap_report.scap_results_parser.data_structures import OvalDefinition
17
from openscap_report.scap_results_parser.namespaces import NAMESPACES
18
from openscap_report.scap_results_parser.parsers import (
19
    CPEApplicabilityLanguageParser, RuleParser)
20
21
from .constants import (PATH_TO_ARF,
22
                        PATH_TO_ARF_REPRODUCING_DANGLING_REFERENCE_TO)
23
from .unit_tests.test_oval_tree_eval import OVAL_TREE_TRUE
24
25
26
@cache
27
def get_xml_data(file_path):
28
    with open(file_path, "r", encoding="utf-8") as xml_report:
29
        return xml_report.read().encode()
30
31
32
def get_parser(file_path):
33
    xml_data = get_xml_data(file_path)
34
    return SCAPResultsParser(xml_data)
35
36
37
BASIC_REPORT = get_parser(PATH_TO_ARF).parse_report()
38
39
40
def get_report(file_path=None):
41
    if file_path is None:
42
        return replace(BASIC_REPORT)
43
    return get_parser(file_path).parse_report()
44
45
46
REPORT_REPRODUCING_DANGLING_REFERENCE_TO = get_report(
47
    PATH_TO_ARF_REPRODUCING_DANGLING_REFERENCE_TO
48
)
49
50
51
def get_root(file_path):
52
    xml_data = get_xml_data(file_path)
53
    return etree.XML(xml_data)
54
55
56
def get_benchmark(root):
57
    benchmark_el = root.find(".//xccdf:Benchmark", NAMESPACES)
58
    if "Benchmark" in root.tag:
59
        return root
60
    return benchmark_el
61
62
63
def get_test_results(root):
64
    return root.find(".//xccdf:TestResult", NAMESPACES)
65
66
67
def get_ref_values(root):
68
    return {
69
        ref_value.get("idref"): ref_value.text
70
        for ref_value in root.findall(".//xccdf:set-value", NAMESPACES)
71
    }
72
73
74
DEFAULT_RULES = BASIC_REPORT.rules
75
76
77
def get_rules(file_path=None):
78
    if file_path is None:
79
        return DEFAULT_RULES.copy()
80
    root = get_root(file_path)
81
    test_results = get_test_results(root)
82
    ref_values = get_ref_values(root)
83
    rule_parser = RuleParser(root, test_results, ref_values)
84
    return rule_parser.get_rules()
85
86
87
def get_cpe_al_parser(file_path=PATH_TO_ARF):
88
    root = get_root(file_path)
89
    return CPEApplicabilityLanguageParser(root)
90
91
92
def get_dummy_cpe_oval_definition():
93
    dummy_oval_definition = OvalDefinition(
94
        definition_id="dummy_oval_def",
95
        title="dummy OVAL definition",
96
        oval_tree=OVAL_TREE_TRUE,
97
    )
98
    return {
99
        "oval:ssg-installed_env_is_a_machine:def:1": dummy_oval_definition,
100
        "oval:ssg-installed_env_has_chrony_package:def:1": dummy_oval_definition,
101
        "oval:ssg-installed_env_has_ntp_package:def:1": dummy_oval_definition,
102
        "oval:ssg-installed_env_has_gdm_package:def:1": dummy_oval_definition,
103
        "oval:ssg-installed_OS_is_fedora:def:1": dummy_oval_definition,
104
        "oval:ssg-installed_env_has_zipl_package:def:1": dummy_oval_definition,
105
        "oval:ssg-system_boot_mode_is_uefi:def:1": dummy_oval_definition,
106
    }
107