Passed
Push — master ( b75d19...555acd )
by Matěj
04:11 queued 10s
created

any_test_help.any_test_dict_to_tree()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
nop 1
1
import os
2
import json
3
import sys
4
import mock
5
import pytest
6
import uuid
7
import tempfile
8
import re
9
10
from oval_graph.oval_node import restore_dict_to_tree, OvalNode
11
from oval_graph.converter import Converter
12
from oval_graph.xml_parser import XmlParser
13
14
15
def any_test_treeEvaluation(tree, expect, file_name=None):
16
    if file_name is not None and tree is None:
17
        if file_name.startswith('AND'):
18
            dir = 'test_data_and'
19
        elif file_name.startswith('OR'):
20
            dir = 'test_data_or'
21
        elif file_name.startswith('XOR'):
22
            dir = 'test_data_xor'
23
        elif file_name.startswith('ONE'):
24
            dir = 'test_data_one'
25
        else:
26
            dir = 'test_data_NONE'
27
28
        src = 'test_data/' + dir + '/' + file_name
29
        data = dict()
30
        with open(get_src(src), "r") as f:
31
            data = json.load(f)
32
        assert restore_dict_to_tree(
33
            data).evaluate_tree() == expect
34
    else:
35
        assert tree.evaluate_tree() == expect
36
37
38
def any_test_parsing_and_evaluate_scan_rule(src, rule_id, result):
39
    parser = XmlParser(get_src(src))
40
    oval_tree = parser.get_oval_tree(rule_id)
41
    any_test_treeEvaluation(oval_tree, result)
42
43
44
def get_random_dir_in_tmp():
45
    return os.path.join(tempfile.gettempdir(), str(uuid.uuid4()))
46
47
48
def any_get_test_data_json(src):
49
    with open(get_src(src), 'r') as f:
50
        return json.load(f)
51
52
53
def any_get_tested_file(src):
54
    with open(get_src(src), 'r') as f:
55
        return f.readlines()
56
57
58
def get_Converter_simple_tree():
59
    return Converter(get_simple_tree())
60
61
62
def any_test_create_node_dict_for_JsTree(tree, json_src):
63
    data = dict()
64
    with open(get_src(json_src), "r") as f:
65
        data = json.load(f)
66
    assert Converter(tree).to_JsTree_dict() == data
67
68
69
def get_simple_tree():
70
    return OvalNode(
71
        node_id=1,
72
        node_type='operator',
73
        value='and',
74
        children=[
75
            OvalNode(
76
                node_id=2,
77
                node_type='value',
78
                value='true',
79
            ),
80
            OvalNode(
81
                node_id=3,
82
                node_type='value',
83
                value='false',
84
            ),
85
            OvalNode(
86
                node_id=4,
87
                node_type='operator',
88
                value='or',
89
                children=[
90
                    OvalNode(
91
                        node_id=5,
92
                        node_type='value',
93
                        value='false',
94
                    ),
95
                    OvalNode(
96
                        node_id=6,
97
                        node_type='value',
98
                        value="true",
99
                    ),
100
                ]
101
            )
102
        ]
103
    )
104
105
106
def get_dict_of_simple_tree():
107
    return get_simple_tree().save_tree_to_dict()
108
109
110
def any_test_transformation_tree_to_Json_for_JsTree(
111
        src, test_data_src, rule_id):
112
    test_data = any_get_test_data_json(test_data_src)
113
114
    parser = XmlParser(get_src(src))
115
    oval_tree = parser.get_oval_tree(rule_id)
116
117
    assert oval_tree.node_id == rule_id
118
    out_data = Converter(oval_tree).to_JsTree_dict()
119
    assert out_data == test_data
120
121
122
def any_test_tree_to_dict_of_tree(tree, dict_of_tree):
123
    assert tree.save_tree_to_dict() == dict_of_tree
124
125
126
def find_any_node(tree, node_id):
127
    findTree = tree.find_node_with_ID(node_id)
128
    assert findTree.node_id == node_id
129
130
131
def any_test_treeEvaluation_with_tree(tree, expect):
132
    assert tree.evaluate_tree() == expect
133
134
135
def any_test_dict_to_tree(dict_of_tree):
136
    treedict_of_tree = restore_dict_to_tree(dict_of_tree)
137
    assert treedict_of_tree.save_tree_to_dict() == dict_of_tree
138
139
140
def get_parser(src):
141
    return XmlParser(get_src(src))
142
143
144
def get_src(src):
145
    _dir = os.path.dirname(os.path.realpath(__file__))
146
    FIXTURE_DIR = os.path.join(_dir, src)
147
    return str(FIXTURE_DIR)
148
149
150
def compare_results_html(result):
151
    result_ = any_get_tested_file(result)
152
    reference_pattern = any_get_tested_file(
153
        'test_data/referenc_pattern_html_report.txt')
154
    start_pattern = False
155
    count_row = 0
156
    for row in result_:
157
        if row == '<script>var data_of_tree = {\n':
158
            start_pattern = True
159
        if start_pattern and "xccdforgssgprojectcontentrulepackageabrtremoved" in row:
160
            row = re.sub(r'[0-9]+', '', row)
161
        count_row += (1 if start_pattern and row in reference_pattern else 0)
162
        if row == '};</script><div>\n':
163
            break
164
    assert count_row == len(reference_pattern)
165
166
167
def compare_results_json(result):
168
    result = any_get_test_data_json(result)
169
    reference_result = any_get_test_data_json(
170
        'test_data/referenc_result_data_json.json')
171
    rule_name = "xccdf_org.ssgproject.content_rule_package_abrt_removed"
172
    result_rule_name = [
173
        x for x in result.keys() if re.search(
174
            rule_name, x)]
175
    assert (result[result_rule_name[0]]
176
            == reference_result[rule_name])
177
178
179
def get_questions_not_selected(capsys, client):
180
    out = client.get_questions()[0].choices
181
    outResult = [
182
        'xccdf_org.ssgproject.content_rule_package_abrt_removed',
183
        'xccdf_org.ssgproject.content_rule_package_sendmail_removed']
184
    assert out == outResult
185
    captured = capsys.readouterr()
186
# Problem with CI when si called function test_arf_to_hml.test_get_question_not_selected
187
# other calls work with ==.
188
    assert (('== The not selected rule IDs ==\n'
189
             'xccdf_org.ssgproject.content_rule_package_nis_removed(Not selected)\n'
190
             'xccdf_org.ssgproject.content_rule_package_ntpdate_removed(Not selected)\n'
191
             'xccdf_org.ssgproject.content_rule_package_telnetd_removed(Not selected)\n'
192
             'xccdf_org.ssgproject.content_rule_package_gdm_removed(Not selected)\n'
193
             'xccdf_org.ssgproject.content_rule_package_setroubleshoot_removed(Not selected)\n'
194
             'xccdf_org.ssgproject.content_rule_package_mcstrans_removed(Not selected)\n')
195
            in captured.out)
196
197
198
def get_questions_not_selected_and_show_failed_rules(capsys, client):
199
    out = client.get_questions()[0].choices
200
    outResult = ['xccdf_org.ssgproject.content_rule_package_abrt_removed']
201
    assert out == outResult
202
    captured = capsys.readouterr()
203
    assert captured.out == (
204
        '== The not selected rule IDs ==\n'
205
        'xccdf_org.ssgproject.content_rule_package_nis_removed(Not selected)\n'
206
        'xccdf_org.ssgproject.content_rule_package_ntpdate_removed(Not selected)\n'
207
        'xccdf_org.ssgproject.content_rule_package_telnetd_removed(Not selected)\n'
208
        'xccdf_org.ssgproject.content_rule_package_gdm_removed(Not selected)\n'
209
        'xccdf_org.ssgproject.content_rule_package_setroubleshoot_removed(Not selected)\n'
210
        'xccdf_org.ssgproject.content_rule_package_mcstrans_removed(Not selected)\n')
211
212
213
def get_questions_with_option_show_failed_rules(client):
214
    out = client.get_questions()[0].choices
215
    rule1 = 'xccdf_org.ssgproject.content_rule_package_abrt_removed'
216
    assert out[0] == rule1
217
    with pytest.raises(Exception, match="list index out of range"):
218
        assert out[2] is None
219
220
221
def if_not_installed_inquirer_with_option_show_failed_rules(capsys, client):
222
    with mock.patch.dict(sys.modules, {'inquirer': None}):
223
        out = client.run_gui_and_return_answers()
224
        assert out is None
225
        captured = capsys.readouterr()
226
        assert captured.out == (
227
            '== The Rule IDs ==\n'
228
            "'xccdf_org.ssgproject.content_rule_package_abrt_removed\\b'\n"
229
            "You haven't got installed inquirer lib. Please copy id rule with you"
230
            " want use and put it in command\n")
231
232
233
def if_not_installed_inquirer_with_option_show_not_selected_rules(
234
        capsys, client):
235
    with mock.patch.dict(sys.modules, {'inquirer': None}):
236
        out = client.run_gui_and_return_answers()
237
        assert out is None
238
        captured = capsys.readouterr()
239
        assert captured.out == (
240
            '== The Rule IDs ==\n'
241
            "'xccdf_org.ssgproject.content_rule_package_abrt_removed\\b'\n"
242
            "'xccdf_org.ssgproject.content_rule_package_sendmail_removed\\b'\n"
243
            '== The not selected rule IDs ==\n'
244
            'xccdf_org.ssgproject.content_rule_package_nis_removed(Not selected)\n'
245
            'xccdf_org.ssgproject.content_rule_package_ntpdate_removed(Not selected)\n'
246
            'xccdf_org.ssgproject.content_rule_package_telnetd_removed(Not selected)\n'
247
            'xccdf_org.ssgproject.content_rule_package_gdm_removed(Not selected)\n'
248
            'xccdf_org.ssgproject.content_rule_package_setroubleshoot_removed(Not selected)\n'
249
            'xccdf_org.ssgproject.content_rule_package_mcstrans_removed(Not selected)\n'
250
            "You haven't got installed inquirer lib. Please copy id rule with you"
251
            " want use and put it in command\n")
252
253
254
def if_not_installed_inquirer_with_option_show_not_selected_rules_and_show_failed_rules(
255
        capsys,
256
        client):
257
    with mock.patch.dict(sys.modules, {'inquirer': None}):
258
        out = client.run_gui_and_return_answers()
259
        assert out is None
260
        captured = capsys.readouterr()
261
        assert captured.out == (
262
            '== The Rule IDs ==\n'
263
            "'xccdf_org.ssgproject.content_rule_package_abrt_removed\\b'\n"
264
            '== The not selected rule IDs ==\n'
265
            'xccdf_org.ssgproject.content_rule_package_nis_removed(Not selected)\n'
266
            'xccdf_org.ssgproject.content_rule_package_ntpdate_removed(Not selected)\n'
267
            'xccdf_org.ssgproject.content_rule_package_telnetd_removed(Not selected)\n'
268
            'xccdf_org.ssgproject.content_rule_package_gdm_removed(Not selected)\n'
269
            'xccdf_org.ssgproject.content_rule_package_setroubleshoot_removed(Not selected)\n'
270
            'xccdf_org.ssgproject.content_rule_package_mcstrans_removed(Not selected)\n'
271
            "You haven't got installed inquirer lib. Please copy id rule with you"
272
            " want use and put it in command\n")
273
274
275
def find_files(file_name, search_path):
276
    result = []
277
    for root, dir_, files in os.walk(search_path):
278
        for filename in files:
279
            if file_name in filename:
280
                result.append(os.path.abspath(os.path.join(root, filename)))
281
    return result
282