aboutsummaryrefslogtreecommitdiffstats
path: root/hdv/redfish/test/test_hdv_redfish.py
blob: 078f2b78b0afb3849e40109e1720c67897ca191b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import json
import yaml
import pytest
import hdv.redfish.log_utils
from hdv.redfish.http_handler import UrllibHttpHandler
from hdv.redfish.hdv_redfish import create_real_url, execute_final_url, parse_test_result, parse_data

sample_case = {}
mock_server = {}
with open("test/sample_test_cases.yml", "r") as sample_test_file:
    sample_case = yaml.load(sample_test_file.read(), Loader=yaml.FullLoader)

with open("test/mock_server.json", "r") as mock_server_file:
    mock_server = json.load(mock_server_file)


@pytest.fixture(autouse=True)
def mock_response(monkeypatch):

    def mock_get(*args, **kwargs):
        return mock_server[args[0]]

    monkeypatch.setattr(hdv.redfish.hdv_redfish, "execute_get_url", mock_get)


@pytest.mark.parametrize("sampleCase, expected_list", [
    (sample_case[0], ["/redfish/v1/Systems/437XR1138R2"]),
    (sample_case[1], ["/redfish/v1/Chassis/1U"]),
    (sample_case[2], ["/redfish/v1/Systems/437XR1138R2/Processors"]),
    (sample_case[3], ["/redfish/v1/Systems/437XR1138R2/Processors/CPU1",
                      "/redfish/v1/Systems/437XR1138R2/Processors/CPU2",
                      "/redfish/v1/Systems/437XR1138R2/Processors/FPGA1"])
])
def test_create_real_url(sampleCase, expected_list):
    url, key_flag_dict = sampleCase["url"], sampleCase["key_flag_dict"]
    bmc_ip = ""
    depends_id = {}
    http_handler = UrllibHttpHandler()
    url_list = create_real_url(url, depends_id, None, key_flag_dict, http_handler, bmc_ip)

    assert expected_list == url_list


@pytest.mark.parametrize("sampleCase", sample_case)
def test_execute_final_url(sampleCase):
    method, url, req_body, key_flag_dict \
        = sampleCase["method"], sampleCase["url"], sampleCase["request_body"], sampleCase["key_flag_dict"]
    bmc_ip = ""
    depends_id = {}
    http_handler = UrllibHttpHandler()
    config_file = {}
    rsp_list = execute_final_url(config_file, depends_id,
                                 http_handler, method, url, req_body, key_flag_dict, bmc_ip)
    assert mock_server[url] == rsp_list


@pytest.mark.parametrize("sampleCase, expected_return_value_list", [
                        (sample_case[0], [{'return_code': 'Success', 'AssetTag': 'Success'}]),
                        (sample_case[1], [{'return_code': 'Success', "Oem": {"Mainboard":{"BoardName": "Success"}}}]),
                        (sample_case[2], [{'return_code': 'Success', "Members@odata.count": "Success" }]),
                        (sample_case[3], [{'return_code': 'Success', 'Manufacturer': 'Success', "MaxSpeedMHz": "Failure, expect value: 2300, return value: 3700", "ProcessorArchitecture": "Success"},
                                          {'return_code': 'Success', 'Manufacturer': "Failure, expect value: Intel(R) Corporation, return value: Can't find key Manufacturer in return value", "MaxSpeedMHz": "Failure, expect value: 2300, return value: Can't find key MaxSpeedMHz in return value", "ProcessorArchitecture": "Failure, expect value: ['x86', 'IA-64', 'ARM', 'MIPS', 'OEM'], return value: Can't find key ProcessorArchitecture in return value"},
                                          {'return_code': 'Success', 'Manufacturer': 'Success', "MaxSpeedMHz": "Failure, expect value: 2300, return value: Can't find key MaxSpeedMHz in return value", "ProcessorArchitecture": "Success"}])
])
def test_parse_result(sampleCase, expected_return_value_list):
    final_rst={}
    method, url, req_body, expected_code, expected_value, tc_name, key_flag_dict \
        = sampleCase["method"], sampleCase["url"], sampleCase["request_body"], \
        sampleCase["expected_code"], sampleCase["expected_result"], sampleCase["case_name"], sampleCase["key_flag_dict"]
    bmc_ip = ""
    depends_id = {}
    http_handler = UrllibHttpHandler()
    config_file = {}
    rsp_list = execute_final_url(config_file, depends_id,
                                 http_handler, method, url, req_body, key_flag_dict, bmc_ip)

    return_value_list, return_code_list, final_rst, flag = \
        parse_test_result(expected_value, expected_code, rsp_list, final_rst)

    assert return_code_list == [200] * len(return_code_list)

    assert return_value_list == expected_return_value_list


@pytest.mark.parametrize("sampleCase, expected_act_pairs_list", [
                        (sample_case[0], [{'AssetTag': ("CM_cc@1234", "CM_cc@1234")}]),
                        (sample_case[1], [{'Oem': {'Mainboard': {'BoardName': ('RS33M2C9S', 'RS33M2C9S')}}}]),
                        (sample_case[2], [{'Members@odata.count': (3, 3)}]),
                        (sample_case[3], [{'Manufacturer': ('Intel(R) Corporation', 'Intel(R) Corporation'), 'MaxSpeedMHz': (2300, 3700), 'ProcessorArchitecture': (['x86', 'IA-64', 'ARM', 'MIPS', 'OEM'], 'x86')},
                                          {'Manufacturer': ('Intel(R) Corporation', "Can't find key Manufacturer in return value"), 'MaxSpeedMHz': (2300, "Can't find key MaxSpeedMHz in return value"), 'ProcessorArchitecture': (['x86', 'IA-64', 'ARM', 'MIPS', 'OEM'], "Can't find key ProcessorArchitecture in return value")},
                                          {'Manufacturer': ('Intel(R) Corporation', 'Intel(R) Corporation'), 'MaxSpeedMHz': (2300, "Can't find key MaxSpeedMHz in return value"), 'ProcessorArchitecture': (['x86', 'IA-64', 'ARM', 'MIPS', 'OEM'], 'OEM')}])
])
def test_parse_data(sampleCase, expected_act_pairs_list):
    method, url, req_body, expected_code, expected_value, tc_name, key_flag_dict \
        = sampleCase["method"], sampleCase["url"], sampleCase["request_body"], \
        sampleCase["expected_code"], sampleCase["expected_result"], sampleCase["case_name"], sampleCase["key_flag_dict"]
    bmc_ip = ""
    depends_id = {}
    http_handler = UrllibHttpHandler()
    config_file = {}
    rsp_list = execute_final_url(config_file, depends_id,
                                 http_handler, method, url, req_body, key_flag_dict, bmc_ip)

    for i in range (0,len(rsp_list)):
        rsp = rsp_list[i]
        return_value = rsp["return_value"]
        expected_act_pairs = expected_act_pairs_list[i]
        exp_act_pairs = {}
        for key, value in expected_value.items():
            if key in return_value:
                exp_act_pairs[key] = parse_data(value, return_value[key])
            elif key == 'count':
                pass
            else:
                exp_act_pairs[key] = \
                    (value, "Can't find key {} in return value".format(key))
        assert exp_act_pairs == expected_act_pairs