Passed
Push — master ( 087b33...31b5c2 )
by Matěj
06:21 queued 12s
created

test_arf_to_json   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 47
dl 0
loc 88
rs 10
c 0
b 0
f 0
wmc 8

7 Functions

Rating   Name   Duplication   Size   Complexity  
A try_expection_for_prepare_graph() 0 5 2
A test_prepare_json() 0 11 1
A get_client_arf_to_json_with_define_dest() 0 6 1
A get_client_arf_to_json() 0 3 1
A test_prepare_graph_with_non_existent_rule() 0 4 1
A test_prepare_graph_with_not_selected_rule() 0 4 1
A test_prepare_json_and_save_in_defined_destination() 0 7 1
1
import pytest
2
import tempfile
3
import os
4
import uuid
5
6
7
from oval_graph.arf_to_json import ArfToJson
8
import tests.any_test_help
9
10
11
def get_client_arf_to_json(src, rule):
12
    return ArfToJson(
13
        [tests.any_test_help.get_src(src), rule])
14
15
16
def get_client_arf_to_json_with_define_dest(src, rule):
17
    return ArfToJson(["--out",
18
                      tests.any_test_help.get_src(os.path.join(tempfile.gettempdir(),
19
                                                               str(uuid.uuid4()))),
20
                      tests.any_test_help.get_src(src),
21
                      rule])
22
23
24
def try_expection_for_prepare_graph(src, rule, err):
25
    client = get_client_arf_to_json(src, rule)
26
    rules = {'rules': [rule]}
27
    with pytest.raises(Exception, match=err):
28
        assert client.prepare_data(rules)
29
30
31
def test_prepare_graph_with_non_existent_rule():
32
    src = 'test_data/ssg-fedora-ds-arf.xml'
33
    rule = 'non-existent_rule'
34
    try_expection_for_prepare_graph(src, rule, '404')
35
36
37
def test_prepare_graph_with_not_selected_rule():
38
    src = 'test_data/ssg-fedora-ds-arf.xml'
39
    rule = 'xccdf_org.ssgproject.content_rule_package_nis_removed'
40
    try_expection_for_prepare_graph(src, rule, 'not selected')
41
42
43
def test_prepare_json(capsys):
44
    src = 'test_data/ssg-fedora-ds-arf.xml'
45
    rule = 'xccdf_org.ssgproject.content_rule_package_abrt_removed'
46
    client = get_client_arf_to_json(src, rule)
47
    rules = {'rules': [rule]}
48
    results_src = client.prepare_data(rules)
49
    assert not results_src
50
    captured = capsys.readouterr()
51
    print(repr(captured.out))
52
    assert captured.out == (
53
        '{\n'
54
        '    "node_id": "xccdf_org.ssgproject.content_rule_package_abrt_removed",\n'
55
        '    "type": "operator",\n'
56
        '    "value": "and",\n'
57
        '    "negation": false,\n'
58
        '    "comment": "Package abrt Removed",\n'
59
        '    "child": [\n'
60
        '        {\n'
61
        '            "node_id": "oval:ssg-package_abrt_removed:def:1",\n'
62
        '            "type": "operator",\n'
63
        '            "value": "and",\n'
64
        '            "negation": false,\n'
65
        '            "comment": null,\n'
66
        '            "child": [\n'
67
        '                {\n'
68
        '                    "node_id": "oval:ssg-test_package_abrt_removed:tst:1",\n'
69
        '                    "type": "value",\n'
70
        '                    "value": "false",\n'
71
        '                    "negation": false,\n'
72
        '                    "comment": "package abrt is removed",\n'
73
        '                    "child": null\n'
74
        '                }\n'
75
        '            ]\n'
76
        '        }\n'
77
        '    ]\n'
78
        '}\n')
79
80
81
def test_prepare_json_and_save_in_defined_destination():
82
    src = 'test_data/ssg-fedora-ds-arf.xml'
83
    rule = 'xccdf_org.ssgproject.content_rule_package_abrt_removed'
84
    client = get_client_arf_to_json_with_define_dest(src, rule)
85
    rules = {'rules': [rule]}
86
    results_src = client.prepare_data(rules)
87
    tests.any_test_help.compare_results_json(results_src[0])
88