1*** Settings ***
2Documentation  Test IPMI FRU data.
3
4Resource               ../lib/ipmi_client.robot
5Resource               ../lib/openbmc_ffdc.robot
6Library                ../lib/ipmi_utils.py
7
8
9Suite Setup            Suite Setup Execution
10Suite Teardown         Suite Teardown Execution
11Test Teardown          Test Teardown Execution
12
13Force Tags             IPMI_FRU
14
15*** Variables ***
16
17&{ipmi_redfish_fru_field_map}  product_serial=SerialNumber  product_part_number=PartNumber
18
19*** Test Cases ***
20
21Test FRU Info Of Power Supplies
22    [Documentation]  Verify FRU info of power supply via IPMI and Redfish.
23    [Tags]  Test_FRU_Info_Of_Power_Supplies
24
25    # IPMI FRU info.
26    ${ipmi_fru_component_info}=  Get Component FRU Info  ${COMPONENT_NAME_OF_POWER_SUPPLY}
27    ...  ${fru_objs}
28
29    # Redfish FRU info.
30    ${redfish_power_details}=  Redfish.Get Members List
31    ...  /redfish/v1/Chassis/${CHASSIS_ID}/PowerSubsystem/PowerSupplies
32    ${redfish_power_dict}=  Create List
33    FOR  ${power_supply}  IN  @{redfish_power_details}
34        ${redfish_power_supply_reading}=  Redfish.Get Properties  ${power_supply}
35        Append To List  ${redfish_power_dict}  ${redfish_power_supply_reading}
36    END
37    Verify IPMI and Redfish subcomponents  ${redfish_power_dict}
38    ...  ${ipmi_fru_component_info}
39
40*** Keywords ***
41
42Verify IPMI and Redfish subcomponents
43    [Documentation]  Get IPMI And Redfish subcomponents of FRU and verify.
44    [Arguments]  ${redfish_fru_info}  ${ipmi_fru_info}
45
46    # Description of argument(s):
47    # ${ipmi_fru_info}       IPMI FRU component values.
48    # ${redfish_fru_info}    Redfish FRU component values.
49
50    ${sub_component_count}=  Get Length  ${redfish_fru_info}
51
52    # Fetch each subcomponent value of IPMI and Redfish and compare.
53    FOR  ${sub_component_index}  IN RANGE  0  ${sub_component_count}
54      ${ipmi_fru_sub_component}=
55      ...  Get From List  ${ipmi_fru_info}  ${sub_component_index}
56      ${redfish_fru_sub_component}=
57      ...  Get From List  ${redfish_fru_info}  ${sub_component_index}
58      Compare IPMI And Redfish FRU Component  ${ipmi_fru_sub_component}
59      ...  ${redfish_fru_sub_component}
60    END
61
62
63Compare IPMI And Redfish FRU Component
64    [Documentation]  Compare IPMI And Redfish FRU Component data objects.
65    [Arguments]  ${ipmi_fru_component_obj}  ${redfish_fru_component_obj}
66
67    # Description of argument(s):
68    # ${ipmi_fru_component_obj}  IPMI FRU component data in dictionary.
69    # Example:
70    # FRU Device Description : powersupply0 (ID 75)
71    # Board Mfg Date        : Sun Dec 31 18:00:00 1995
72    # Board Product         : powersupply0
73    # Board Serial          : 71G303
74    # Board Part Number     : 01KL471
75    # ${redfish_fru_component_obj}  Redfish FRU component data in dictionary.
76    # Example:
77    # "Name": "powersupply0",
78    # "PartNumber": "01KL471",
79    # "PowerInputWatts": 114.0,
80    # "SerialNumber": "71G303",
81
82    # Get key_map from ipmi_redfish_fru_field_map.
83    ${key_map}=  Get Dictionary Items   ${ipmi_redfish_fru_field_map}
84
85    FOR    ${key}    ${value}    IN    @{key_map}
86      Exit For Loop IF    "${value}" == "${EMPTY}"
87      FOR  ${ipmi_fru_component}  IN  ${ipmi_fru_component_obj}
88        FOR  ${redfish_fru_component}  IN  ${redfish_fru_component_obj}
89          Run Keyword If  '${ipmi_fru_component['product_name']}' == '${redfish_fru_component['Name']}'
90          ...  Should Contain  ${redfish_fru_component_obj['${value}']}
91          ...  ${ipmi_fru_component_obj['${key}']}
92          ...  msg=Comparison failed.
93        END
94      END
95    END
96
97
98Suite Setup Execution
99    [Documentation]  Do test setup initialization.
100
101    ${status}  ${fru_objs}=  Run Keyword And Ignore Error  Get Fru Info
102    Log To Console  FRU: ${fru_objs}
103    Set Suite Variable  ${fru_objs}
104    Redfish.Login
105
106
107Suite Teardown Execution
108    [Documentation]  Do the post suite teardown.
109
110    Redfish.Logout
111
112
113Test Teardown Execution
114    [Documentation]  Do the post test teardown.
115
116    FFDC On Test Case Fail
117