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

tests.unit_tests.test_cpe_al_parser   A

Complexity

Total Complexity 1

Size/Duplication

Total Lines 110
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 36
dl 0
loc 110
rs 10
c 0
b 0
f 0
wmc 1

1 Function

Rating   Name   Duplication   Size   Complexity  
A test_get_logical_test() 0 100 1
1
# Copyright 2022, Red Hat, Inc.
2
# SPDX-License-Identifier: LGPL-2.1-or-later
3
4
import pytest
5
from lxml import etree
6
7
from ..test_utils import get_cpe_al_parser, get_dummy_cpe_oval_definition
8
9
10
@pytest.mark.unit_test
11
@pytest.mark.parametrize(
12
    "str_xml_element, evaluation_result",
13
    [
14
        (
15
            (
16
                '<cpe-lang:logical-test operator="AND" negate="false">'
17
                '     <cpe-lang:fact-ref name="cpe:/a:machine"/>'
18
                '</cpe-lang:logical-test>'
19
            ),
20
            "true",
21
        ),
22
        (
23
            (
24
                '<cpe-lang:logical-test operator="AND" negate="true">'
25
                '     <cpe-lang:fact-ref name="cpe:/a:machine"/>'
26
                '</cpe-lang:logical-test>'
27
            ),
28
            "false",
29
        ),
30
        (
31
            (
32
                '<cpe-lang:logical-test operator="AND" negate="false">'
33
                '     <cpe-lang:logical-test operator="OR" negate="false">'
34
                '         <cpe-lang:fact-ref name="cpe:/a:chrony"/>'
35
                '         <cpe-lang:fact-ref name="cpe:/a:ntp"/>'
36
                '     </cpe-lang:logical-test>'
37
                '     <cpe-lang:fact-ref name="cpe:/a:machine"/>'
38
                '</cpe-lang:logical-test>'
39
            ),
40
            "true",
41
        ),
42
        (
43
            (
44
                '<cpe-lang:logical-test operator="AND" negate="true">'
45
                '    <cpe-lang:logical-test operator="OR" negate="false">'
46
                '         <cpe-lang:logical-test operator="AND" negate="false">'
47
                '             <cpe-lang:fact-ref name="cpe:/o:fedoraproject:fedora:32"/>'
48
                '             <cpe-lang:fact-ref name="cpe:/a:gdm"/>'
49
                '         </cpe-lang:logical-test>'
50
                '         <cpe-lang:logical-test operator="AND" negate="false">'
51
                '             <cpe-lang:fact-ref name="cpe:/o:fedoraproject:fedora:32"/>'
52
                '             <cpe-lang:fact-ref name="cpe:/a:uefi"/>'
53
                '         </cpe-lang:logical-test>'
54
                '         <cpe-lang:logical-test operator="AND" negate="true">'
55
                '             <cpe-lang:fact-ref name="cpe:/a:zipl"/>'
56
                '             <cpe-lang:fact-ref name="cpe:/o:fedoraproject:fedora:32"/>'
57
                '         </cpe-lang:logical-test>'
58
                '     </cpe-lang:logical-test>'
59
                '</cpe-lang:logical-test>'
60
            ),
61
            "false",
62
        ),
63
        (
64
            (
65
                '<cpe-lang:logical-test operator="AND" negate="false">'
66
                '     <cpe-lang:check-fact-ref'
67
                ' system="http://oval.mitre.org/XMLSchema/oval-definitions-5"'
68
                ' href="ssg-rhel9-cpe-oval.xml"'
69
                ' id-ref="oval:ssg-installed_env_is_a_machine:def:1"/>'
70
                '</cpe-lang:logical-test>'
71
            ),
72
            "true",
73
        ),
74
        (
75
            (
76
                '<cpe-lang:logical-test operator="AND" negate="true">'
77
                '     <cpe-lang:check-fact-ref'
78
                ' system="http://oval.mitre.org/XMLSchema/oval-definitions-5"'
79
                ' href="ssg-rhel9-cpe-oval.xml"'
80
                ' id-ref="oval:ssg-installed_env_is_a_machine:def:1"/>'
81
                '</cpe-lang:logical-test>'
82
            ),
83
            "false",
84
        ),
85
        (
86
            (
87
                '<cpe-lang:logical-test operator="OR" negate="false">'
88
                '     <cpe-lang:check-fact-ref'
89
                ' system="http://oval.mitre.org/XMLSchema/oval-definitions-5"'
90
                ' href="ssg-rhel9-cpe-oval.xml"'
91
                ' id-ref="oval:ssg-installed_env_has_chrony_package:def:1"/>'
92
                '     <cpe-lang:check-fact-ref'
93
                ' system="http://oval.mitre.org/XMLSchema/oval-definitions-5"'
94
                ' href="ssg-rhel9-cpe-oval.xml"'
95
                ' id-ref="oval:ssg-installed_env_has_ntp_package:def:1"/>'
96
                '</cpe-lang:logical-test>'
97
            ),
98
            "true",
99
        ),
100
    ],
101
)
102
def test_get_logical_test(str_xml_element, evaluation_result):
103
    parser = get_cpe_al_parser()
104
    parser.oval_cpe_definitions = get_dummy_cpe_oval_definition()
105
    xml_element = etree.XML(
106
        f'<con xmlns:cpe-lang="http://cpe.mitre.org/language/2.0">{str_xml_element}</con>'
107
    )
108
    logical_test = parser.get_logical_test(xml_element[0])
109
    assert logical_test.evaluate_tree() == evaluation_result
110