tests.unit_tests.test_oval_tree_eval   A
last analyzed

Complexity

Total Complexity 1

Size/Duplication

Total Lines 250
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 181
dl 0
loc 250
rs 10
c 0
b 0
f 0
wmc 1

1 Function

Rating   Name   Duplication   Size   Complexity  
A test_oval_tree_evaluation() 0 16 1
1
# Copyright 2022, Red Hat, Inc.
2
# SPDX-License-Identifier: LGPL-2.1-or-later
3
4
import pytest
5
6
from openscap_report.scap_results_parser.data_structures import OvalNode
7
8
SAMPLE_OVAL_TREE = OvalNode(
9
    node_id="1",
10
    node_type="and",
11
    value="",
12
    children=[
13
        OvalNode(
14
            node_id="2",
15
            node_type="value",
16
            value="true",
17
        ),
18
        OvalNode(
19
            node_id="3",
20
            node_type="value",
21
            value="false",
22
        ),
23
        OvalNode(
24
            node_id="4",
25
            node_type="or",
26
            value="",
27
            children=[
28
                OvalNode(
29
                    node_id="5",
30
                    node_type="value",
31
                    value="false",
32
                ),
33
                OvalNode(
34
                    node_id="6",
35
                    node_type="value",
36
                    value="true",
37
                ),
38
            ]
39
        )
40
    ]
41
)
42
43
OVAL_TREE_TRUE = OvalNode(
44
    node_id="1",
45
    node_type="and",
46
    value="",
47
    children=[
48
        OvalNode(
49
            node_id="2",
50
            node_type="value",
51
            value="true",
52
        )
53
    ]
54
)
55
56
OVAL_TREE_FALSE = OvalNode(
57
    node_id="1",
58
    node_type="and",
59
    value="",
60
    children=[
61
        OvalNode(
62
            node_id="2",
63
            node_type="value",
64
            value="false",
65
        ),
66
    ]
67
)
68
69
OVAL_TREE_NOTEVAL = OvalNode(
70
    node_id="1",
71
    node_type="and",
72
    value="",
73
    children=[
74
        OvalNode(
75
            node_id="2",
76
            node_type="value",
77
            value="noteval",
78
        )
79
    ]
80
)
81
82
OVAL_TREE_NOTAPPL = OvalNode(
83
    node_id="1",
84
    node_type="and",
85
    value="",
86
    children=[
87
        OvalNode(
88
            node_id="2",
89
            node_type="value",
90
            value="notappl",
91
        )
92
    ]
93
)
94
95
OVAL_TREE_NEGATION_FALSE = OvalNode(
96
    node_id="1",
97
    node_type="and",
98
    value="",
99
    negation=True,
100
    children=[
101
        OvalNode(
102
            node_id="2",
103
            node_type="value",
104
            value="false",
105
        )
106
    ]
107
)
108
109
OVAL_TREE_NEGATION_TURE = OvalNode(
110
    node_id="1",
111
    node_type="and",
112
    negation=True,
113
    value="",
114
    children=[
115
        OvalNode(
116
            node_id="2",
117
            node_type="value",
118
            value="true",
119
        )
120
    ]
121
)
122
123
OVAL_TREE_NEGATION_NODE_FALSE = OvalNode(
124
    node_id="1",
125
    node_type="and",
126
    value="",
127
    children=[
128
        OvalNode(
129
            node_id="2",
130
            node_type="value",
131
            value="false",
132
            negation=True,
133
        ),
134
    ]
135
)
136
137
OVAL_TREE_NEGATION_NODE_TRUE = OvalNode(
138
    node_id="1",
139
    node_type="and",
140
    value="",
141
    children=[
142
        OvalNode(
143
            node_id="2",
144
            node_type="value",
145
            value="true",
146
            negation=True,
147
        ),
148
    ]
149
)
150
151
BIG_OVAL_TREE = OvalNode(
152
    node_id="1",
153
    node_type="and",
154
    value="",
155
    children=[
156
        OvalNode(
157
            node_id="2",
158
            node_type="value",
159
            value="false",
160
        ),
161
        OvalNode(
162
            node_id="3",
163
            node_type="xor",
164
            value="",
165
            children=[
166
                OvalNode(
167
                    node_id="4",
168
                    node_type="value",
169
                    value="true",
170
                ),
171
                OvalNode(
172
                    node_id="5",
173
                    node_type="one",
174
                    value="",
175
                    children=[
176
                        OvalNode(
177
                            node_id="6",
178
                            node_type="value",
179
                            value="noteval",
180
                        ),
181
                        OvalNode(
182
                            node_id="7",
183
                            node_type="value",
184
                            value="true",
185
                        ),
186
                        OvalNode(
187
                            node_id="8",
188
                            node_type="value",
189
                            value="notappl",
190
                        ),
191
                    ]
192
                ),
193
                OvalNode(
194
                    node_id="9",
195
                    node_type="value",
196
                    value="error",
197
                ),
198
            ]
199
        ),
200
        OvalNode(
201
            node_id="10",
202
            node_type="or",
203
            value="",
204
            children=[
205
                OvalNode(
206
                    node_id="11",
207
                    node_type="value",
208
                    value="unknown",
209
                ),
210
                OvalNode(
211
                    node_id="12",
212
                    node_type="value",
213
                    value="true",
214
                ),
215
            ]
216
        ),
217
    ]
218
)
219
220
NOT_EXIST_OPERATOR_OVAL_TREE = OvalNode(
221
    node_id="1",
222
    node_type="nand",
223
    value="",
224
    children=[
225
        OvalNode(
226
            node_id="2",
227
            node_type="value",
228
            value="true",
229
        ),
230
    ]
231
)
232
233
234
@pytest.mark.unit_test
235
@pytest.mark.parametrize("tree, result", [
236
    (SAMPLE_OVAL_TREE, "false"),
237
    (OVAL_TREE_FALSE, "false"),
238
    (OVAL_TREE_TRUE, "true"),
239
    (OVAL_TREE_NOTEVAL, "not evaluated"),
240
    (OVAL_TREE_NOTAPPL, "not applicable"),
241
    (OVAL_TREE_NEGATION_FALSE, "true"),
242
    (OVAL_TREE_NEGATION_TURE, "false"),
243
    (OVAL_TREE_NEGATION_NODE_TRUE, "false"),
244
    (OVAL_TREE_NEGATION_NODE_FALSE, "true"),
245
    (BIG_OVAL_TREE, "false"),
246
    (NOT_EXIST_OPERATOR_OVAL_TREE, None),
247
])
248
def test_oval_tree_evaluation(tree, result):
249
    assert tree.evaluate_tree() == result
250