xref: /openbmc/openbmc-test-automation/ipmi/dcmi/test_dcmi_get_temperature_reading.robot (revision 34f0bf0b310c618d04934c5738b10ab4ffcb2f2d)
1*** Settings ***
2
3Documentation    Module to test dcmi get temperature reading functionality.
4Resource         ../../lib/ipmi_client.robot
5Resource         ../../lib/openbmc_ffdc.robot
6Resource         ../../lib/bmc_network_utils.robot
7Resource         ../../lib/boot_utils.robot
8Variables        ../../data/ipmi_raw_cmd_table.py
9Variables        ../../data/dcmi_raw_cmd_table.py
10Variables        ../../data/ipmi_variable.py
11Library          ../../lib/bmc_network_utils.py
12Library          ../../lib/ipmi_utils.py
13Library          ../../lib/utilities.py
14Library          JSONLibrary
15
16Suite Setup  Suite Setup Execution
17
18Test Tags       DCMI_Get_Temperature_Reading
19
20*** Variables ***
21
22${config_file_name}             dcmi_sensors.json
23${dcmi_sensors_info_json_file}  /usr/share/ipmi-providers/${config_file_name}
24${client_config_file_path}      ${EXEC_DIR}/${config_file_name}
25&{dcmi_sensor_uri}
26
27*** Test Cases ***
28
29Verify Get Temperature Reading Command For Inlet Temperature Sensor
30    [Documentation]  Verify IPMI Get Temperature Reading command for inlet temperature sensor.
31    [Tags]  Verify_Get_Temperature_Reading_Command_For_Inlet_Temperature_Sensor
32
33    ${cmd}=  Catenate  ${DCMI_RAW_CMD['DCMI']['GET_TEMPERATURE_READING'][0]}
34    ...  ${DCMI_RAW_CMD['DCMI']['GET_TEMPERATURE_READING'][1]} 0x00 0x00
35    ${ipmi_resp}=  Run IPMI Command  ${cmd}
36    Verify Reading With IPMI  ${ipmi_resp}  ${1}  inlet
37    # Verify Temperature Reading With Dbus URI  ${ipmi_resp}  inlet  ${1}
38
39Verify Get Temperature Reading Command For CPU 0 Temperature Sensor
40    [Documentation]  Verify IPMI Get Temperature Reading command for cpu0 temperature sensor.
41    [Tags]  Verify_Get_Temperature_Reading_Command_For_CPU_0_Temperature_Sensor
42
43    ${cmd}=  Catenate  ${DCMI_RAW_CMD['DCMI']['GET_TEMPERATURE_READING'][0]}
44    ...  ${DCMI_RAW_CMD['DCMI']['GET_TEMPERATURE_READING'][2]} 0x00 0x00
45    ${ipmi_resp}=  Run IPMI Command  ${cmd}
46    Verify Reading With IPMI  ${ipmi_resp}  ${1}  cpu
47    # Verify Temperature Reading With Dbus URI  ${ipmi_resp}  cpu  ${1}
48
49Verify Get Temperature Reading Command For CPU 1 Temperature Sensor
50    [Documentation]  Verify IPMI Get Temperature Reading command for cpu1 temperature sensor.
51    [Tags]  Verify_Get_Temperature_Reading_Command_For_CPU_1_Temperature_Sensor
52
53    ${cmd}=  Catenate  ${DCMI_RAW_CMD['DCMI']['GET_TEMPERATURE_READING'][0]}
54    ...  ${DCMI_RAW_CMD['DCMI']['GET_TEMPERATURE_READING'][2]} 0x00 0x00
55    ${ipmi_resp}=  Run IPMI Command  ${cmd}
56    Verify Reading With IPMI  ${ipmi_resp}  ${2}  cpu
57    # Verify Temperature Reading With Dbus URI  ${ipmi_resp}  cpu  ${2}
58
59Verify Get Temperature Reading Command For Baseboard Temperature Sensor
60    [Documentation]  Verify IPMI Get Temperature Reading command for baseboard temperature sensor.
61    [Tags]  Verify_Get_Temperature_Reading_Command_For_Baseboard_Temperature_Sensor
62
63    ${cmd}=  Catenate  ${DCMI_RAW_CMD['DCMI']['GET_TEMPERATURE_READING'][0]}
64    ...  ${DCMI_RAW_CMD['DCMI']['GET_TEMPERATURE_READING'][3]} 0x00 0x00
65    ${ipmi_resp}=  Run IPMI Command  ${cmd}
66    Verify Reading With IPMI  ${ipmi_resp}  ${1}  baseboard
67    # Verify Temperature Reading With Dbus URI  ${ipmi_resp}  baseboard  ${1}
68
69*** Keywords ***
70Suite Setup Execution
71    [Documentation]  Get dcmi sensors uri from config file.
72
73    IPMI Power On  stack_mode=skip  quiet=1
74
75    # Get this file to client machine /usr/share/ipmi-providers/dcmi_sensors.json
76    scp.Open Connection
77    ...  ${OPENBMC_HOST}  username=${OPENBMC_USERNAME}  password=${OPENBMC_PASSWORD}  port=${SSH_PORT}
78    scp.Get File  ${dcmi_sensors_info_json_file}  ${EXEC_DIR}
79    scp.Close Connection
80
81    ${config_file}=  OperatingSystem.Get File  ${client_config_file_path}
82    ${config_file_response}=  Evaluate  json.loads('''${config_file}''')  json
83
84    ${remove_configuration_file}=  Catenate  rm -rf ${client_config_file_path}
85    ${rc}  ${output}=  Shell Cmd  ${remove_configuration_file}
86
87    FOR  ${key}  ${value}  IN  &{config_file_response}
88      &{tmp}=  Create Dictionary
89      FOR  ${response}  IN  @{value}
90        ${sensor_dbus}=  Get From Dictionary  ${response}  dbus
91        ${instance}=  Get From Dictionary  ${response}  instance
92        Set To Dictionary  ${tmp}  ${instance}  ${sensor_dbus}
93      END
94      Set To Dictionary  ${dcmi_sensor_uri}  ${key}  ${tmp}
95    END
96
97Verify Temperature Reading With Dbus URI
98    [Documentation]  Verify temperature from ipmi response and json file.
99    [Arguments]  ${ipmi_resp}  ${key}  ${instance}
100
101    # Description of argument(s):
102    # ipmi_resp         IPMI command response.
103    # key               Entity ID description i.e inlet, cpu, baseboard.
104    # instance          instance number 1, 2, ..
105
106    ${dbus_uris}=  Get From Dictionary  ${dcmi_sensor_uri}  ${key}
107    ${dbus_uri}=  Get From Dictionary  ${dbus_uris}  ${instance}
108
109    ${get_reading_value}=  Set Variable If
110    ...  '${instance}' == '1'  ${3}
111    ...  '${instance}' == '2'  ${5}
112
113    ${ipmi_resp_list}=  Split String  ${ipmi_resp}
114    ${temperature_reading}=  Get From List  ${ipmi_resp_list}  ${get_reading_value}
115    ${temp_reading}=  Convert To Integer  ${temperature_reading}  16
116    ${busctl_cmd}=  Catenate  busctl introspect xyz.openbmc_project.HwmonTempSensor ${dbus_uri}
117    ${busctl_cmd_resp}=  BMC Execute Command  ${busctl_cmd}
118    ${current_temp_value_from_dbus}=  Get Regexp Matches  ${busctl_cmd_resp[0]}
119    ...  \\.Value\\s+property\\s+d\\s+(\\S+)\\s  1
120
121    ${min_value}=  Evaluate  ${temp_reading} - 1
122    ${max_value}=  Evaluate  ${temp_reading} + 1
123
124Check Reading Value In D-Bus
125    [Documentation]  Verify temperature from ipmi response and json file.
126    [Arguments]  ${key}  ${instance}  ${dcmi_reading_value}
127
128    # Description of argument(s):
129    # key                 Entity ID description i.e inlet, cpu, baseboard.
130    # instance            instance number 1, 2, ..
131    # dcmi_reading_value  DCMI reading value.
132
133    ${dbus_uris}=  Get From Dictionary  ${dcmi_sensor_uri}  ${key}
134    ${dbus_uri}=  Get From Dictionary  ${dbus_uris}  ${instance}
135
136    ${busctl_cmd}=  Catenate  busctl introspect xyz.openbmc_project.HwmonTempSensor ${dbus_uri}
137    ${busctl_cmd_resp}=  BMC Execute Command  ${busctl_cmd}
138    ${current_temp_value_from_dbus}=  Get Regexp Matches  ${busctl_cmd_resp[0]}
139    ...  \\.Value\\s+property\\s+d\\s+(\\S+)\\s  1
140
141    IF  '${current_temp_value_from_dbus[0]}' == 'nan' and '${dcmi_reading_value}' == '0'
142        Fail  msg=sensor reading value is not present.
143    END
144
145    IF  '${current_temp_value_from_dbus[0]}' != 'nan' and '${dcmi_reading_value}' == '0'
146        Fail  msg=sensor reading value is showing as 0 in dcmi get temperature raw command.
147    END
148
149    ${dbus_reading_value}=  Set Variable  .${current_temp_value_from_dbus[0].split(".")[1].strip()}
150    ${status}=  Run Keyword And Return Status  Should Be True  ${dbus_reading_value} > .499
151
152    IF  ${status} == False
153        Fail  msg=sensor reading value is showing wrongly in dcmi get temperature raw command.
154    END
155
156    ${dbus_reading_value}=  Set Variable  ${current_temp_value_from_dbus[0].split(".")[0].strip()}
157    Should Be Equal  ${dcmi_reading_value}  ${dbus_reading_value}
158    ...  msg=sensor reading value is showing wrongly in dcmi get temperature raw command.
159
160Verify Reading With IPMI
161    [Documentation]  Verify temperature reading with ipmi command.
162    [Arguments]  ${ipmi_resp}  ${instance}  ${key}
163
164    # Description of argument(s):
165    # ipmi_resp         IPMI command response.
166    # instance          instance number 1, 2, ..
167    # key               Entity ID description i.e inlet, cpu, baseboard.
168
169    ${get_reading_value}=  Set Variable If
170    ...  '${instance}' == '1'  ${3}
171    ...  '${instance}' == '2'  ${5}
172
173    ${ipmi_resp_list}=  Split String  ${ipmi_resp}
174    ${temperature_reading}=  Get From List  ${ipmi_resp_list}  ${get_reading_value}
175    ${dcmi_reading}=  Convert To Integer  ${temperature_reading}  16
176    IF  '${dcmi_reading}' == '0'
177        Check Reading Value In D-Bus  ${key}  ${instance}  ${dcmi_reading}
178    END
179    ${dcmi_temp_reading}=  Convert To String  ${dcmi_reading}
180    ${ipmi_sensor_cmd_resp}=  Get IPMI Sensor Reading  ${key}  ${instance}
181    ${ipmi_sensor_cmd_resp_list}=  Split String  ${ipmi_sensor_cmd_resp}  |
182    ${ipmi_temp_reading}=  Set Variable  ${ipmi_sensor_cmd_resp_list[1].strip().split(".")[0]}
183    ${reading_status}=  Run Keyword And Return Status  Should Be Equal
184    ...  ${dcmi_temp_reading}  ${ipmi_temp_reading}
185    IF  ${reading_status} == False
186        Check Reading Value In D-Bus  ${key}  ${instance}  ${dcmi_temp_reading}
187    END
188
189Get IPMI Sensor Reading
190    [Documentation]  Return ipmi sensor reading.
191    [Arguments]  ${key}  ${instance}
192
193    # Description of argument(s):
194    # instance          Entity ID description i.e inlet, cpu, baseboard.
195    # index             Selecting the corresponding sensor dbus uri from list.
196
197    ${dbus_uris}=  Get From Dictionary  ${dcmi_sensor_uri}  ${key}
198    ${dbus_uri}=  Get From Dictionary  ${dbus_uris}  ${instance}
199    ${sensor_name}=  Set Variable  ${dbus_uri.split('/')[-1]}
200
201    ${sensor_format}=  Run IPMI Standard Command  sensor
202    ${sensor_name_status}=  Run Keyword And Return Status  Should Contain
203    ...  ${sensor_format}  _
204
205    ${replaced_str}=  Replace String  ${sensor_name}  _  ${SPACE}
206    ${sensor_name}=  Set Variable If  ${sensor_name_status} == True
207    ...  ${sensor_name_dbus}
208    ...  ${replaced_str}
209
210    ${ret}=  Run External IPMI Standard Command  sensor | grep -i "${sensor_name}"
211
212    RETURN  ${ret}
213