Passed
Push — main ( 4c53b2...a46e16 )
by Matthew
07:04 queued 15s
created

tests.unit_tests.test_oval_items_parser   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 120
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 93
dl 0
loc 120
rs 10
c 0
b 0
f 0
wmc 5

5 Functions

Rating   Name   Duplication   Size   Complexity  
A test_oval_items_parser_multiple() 0 8 1
A test_oval_items_parser_single() 0 7 1
A test_oval_items_parser_wrong_object_id() 0 4 1
B fixture_parser() 0 76 1
A test_oval_items_parser_dne() 0 4 1
1
# Copyright 2024, Red Hat, Inc.
2
# SPDX-License-Identifier: LGPL-2.1-or-later
3
4
import pytest
5
from lxml import etree
6
7
from openscap_report.scap_results_parser.namespaces import NAMESPACES
8
from openscap_report.scap_results_parser.parsers.oval_items_parser import \
9
    OVALItemsParser
10
11
12
# pylint: disable = too-many-locals
13
@pytest.fixture(name="parser")
14
def fixture_parser():
15
    sc_ns = NAMESPACES["oval-characteristics"]
16
    is_ns = NAMESPACES["ind-sys"]
17
18
    o1_id = "oval:example:obj:1"
19
    o2_id = "oval:example:obj:2"
20
    o3_id = "oval:example:obj:3"
21
    i1_id = "11117777"
22
    i2_id = "11117777"
23
    i3_id = "33339999"
24
25
    o1 = etree.Element(
26
        "{%s}object" % sc_ns, nsmap=NAMESPACES, id=o1_id, version="1",
27
        flag="complete")
28
    o1_r1 = etree.Element(
29
        "{%s}reference" % sc_ns, nsmap=NAMESPACES, item_ref=i1_id)
30
    o1.append(o1_r1)
31
32
    o2 = etree.Element(
33
        "{%s}object" % sc_ns, nsmap=NAMESPACES, id=o2_id, version="1",
34
        flag="complete")
35
    o2_r1 = etree.Element(
36
        "{%s}reference" % sc_ns, nsmap=NAMESPACES, item_ref=i2_id)
37
    o2.append(o2_r1)
38
    o2_r2 = etree.Element(
39
        "{%s}reference" % sc_ns, nsmap=NAMESPACES, item_ref=i3_id)
40
    o2.append(o2_r2)
41
42
    o3 = etree.Element(
43
        "{%s}object" % sc_ns, nsmap=NAMESPACES, id=o3_id, version="1",
44
        flag="does not exist")
45
46
    collected_objects = {
47
        o1_id: o1,
48
        o2_id: o2,
49
        o3_id: o3
50
    }
51
52
    i1 = etree.Element(
53
        "{%s}textfilecontent_item" % is_ns, nsmap=NAMESPACES, id=i1_id,
54
        status="exists")
55
    i1_filepath = etree.Element("{%s}filepath" % is_ns, nsmap=NAMESPACES)
56
    i1_filepath.text = "/var/cities"
57
    i1.append(i1_filepath)
58
    i1_text = etree.Element("{%s}text" % is_ns, nsmap=NAMESPACES)
59
    i1_text.text = "Paris"
60
    i1.append(i1_text)
61
62
    i2 = etree.Element(
63
        "{%s}textfilecontent_item" % is_ns, nsmap=NAMESPACES, id=i2_id,
64
        status="exists")
65
    i2_filepath = etree.Element("{%s}filepath" % is_ns, nsmap=NAMESPACES)
66
    i2_filepath.text = "/var/cities"
67
    i2.append(i2_filepath)
68
    i2_text = etree.Element("{%s}text" % is_ns, nsmap=NAMESPACES)
69
    i2_text.text = "London"
70
    i2.append(i2_text)
71
72
    i3 = etree.Element(
73
        "{%s}textfilecontent_item" % is_ns, nsmap=NAMESPACES, id=i3_id,
74
        status="exists")
75
    i3_filepath = etree.Element("{%s}filepath" % is_ns, nsmap=NAMESPACES)
76
    i3_filepath.text = "/var/cities"
77
    i3.append(i3_filepath)
78
    i3_text = etree.Element("{%s}text" % is_ns, nsmap=NAMESPACES)
79
    i3_text.text = "Prague"
80
    i3.append(i3_text)
81
82
    system_data = {
83
        i1_id: i1,
84
        i2_id: i2,
85
        i3_id: i3,
86
    }
87
88
    return OVALItemsParser(collected_objects, system_data)
89
90
91
@pytest.mark.unit_test
92
def test_oval_items_parser_single(parser):
93
    oi = parser.get_oval_items("oval:example:obj:1")
94
    assert oi is not None
95
    assert oi.header == ("filepath", "text")
96
    assert len(oi.entries) == 1
97
    assert oi.entries[0] == ("/var/cities", "London")
98
99
100
@pytest.mark.unit_test
101
def test_oval_items_parser_multiple(parser):
102
    oi = parser.get_oval_items("oval:example:obj:2")
103
    assert oi is not None
104
    assert oi.header == ("filepath", "text")
105
    assert len(oi.entries) == 2
106
    assert oi.entries[0] == ("/var/cities", "London")
107
    assert oi.entries[1] == ("/var/cities", "Prague")
108
109
110
@pytest.mark.unit_test
111
def test_oval_items_parser_dne(parser):
112
    oi = parser.get_oval_items("oval:example:obj:3")
113
    assert oi is None
114
115
116
@pytest.mark.unit_test
117
def test_oval_items_parser_wrong_object_id(parser):
118
    oi = parser.get_oval_items("oval:example:obj:666")
119
    assert oi is None
120