| *** Settings *** |
| Documentation Test power supply telemetry. |
| |
| Resource ../lib/openbmc_ffdc.robot |
| Resource ../lib/open_power_utils.robot |
| Resource ../lib/boot_utils.robot |
| Resource ../lib/logging_utils.robot |
| |
| Test Teardown FFDC On Test Case Fail |
| |
| *** Variables *** |
| |
| # ----------------------------------- |
| # Output Current and Wattage Limits |
| # ----------------------------------- |
| # * 200 VAC (200 - 208 VAC) ... 2104W |
| # * 230 VAC (207 - 253 VAC) ... 2226W |
| # * 277 VAC (249 - 305 VAC) ... 2226W |
| # ----------------------------------- |
| |
| # With a loaded HTX work-load the wattage is typically within half of the upper |
| # limit. If the power drawn goes beyond the upper power limit, this test will |
| # fail. |
| ${upper_power_limit} ${2104} |
| ${lower_power_limit} ${100} |
| ${power_data_collection_interval} ${30} |
| |
| # Every n seconds, the system collects the following for each power supply |
| # (e.g. ps0, ps1, etc): |
| # - The average power being drawn over the interval. |
| # - The maximum power drawn over the interval. |
| # At any given time, such readings can be obtained from the system. |
| # The lists shown below are examples of such data |
| # --------------------------------------------------------------------- |
| # /org/open_power/sensors/aggregation/per_30s/ps0_input_power/average |
| # [20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 225, 290, 255, 207, 124, 20] |
| # (max, min) (290, 20) |
| |
| # /org/open_power/sensors/aggregation/per_30s/ps1_input_power/average |
| # [19, 19, 20, 20, 19, 20, 20, 20, 20, 20, 69, 321, 286, 265, 228, 104] |
| # (max, min) (321, 19) |
| |
| # /org/open_power/sensors/aggregation/per_30s/ps0_input_power/maximum |
| # [20, 20, 20, 22, 22, 22, 22, 20, 22, 22, 338, 346, 308, 258, 172, 20] |
| # (max, min) (346, 20) |
| |
| # /org/open_power/sensors/aggregation/per_30s/ps1_input_power/maximum |
| # [24, 26, 26, 26, 26, 26, 26, 26, 26, 26, 322, 364, 338, 308, 258, 240] |
| # (max, min) (364, 24) |
| # --------------------------------------------------------------------- |
| |
| # To collect 3 iteration of sampling data. |
| ${LOOP_COUNT} ${3} |
| |
| |
| *** Test Cases *** |
| |
| Power Supply Test When Host Off |
| [Documentation] Check that power consumption is within limits when host |
| ... is off. |
| [Tags] Power_Supply_Test_When_Host_Off |
| |
| REST Power Off stack_mode=skip |
| ${power_sensor_path}= Get Sensors Aggregation URL List |
| ... /org/open_power/sensors/ |
| |
| Check Power Telemetry When Host Off ${power_sensor_path} |
| |
| |
| Power Supply Test When Host On |
| [Documentation] Check that power consumption is within limits when host |
| ... is on. |
| [Tags] Power_Supply_Test_When_Host_On |
| |
| REST Power On |
| ${power_sensor_path}= Get Sensors Aggregation URL List |
| ... /org/open_power/sensors/ |
| |
| Repeat Keyword ${LOOP_COUNT} times |
| ... Check Power Telemetry When Host On ${power_sensor_path} |
| |
| |
| Power Supply Error Logging Test At Runtime |
| [Documentation] Check that power supply error is logged when one of the |
| ... power supply inputs is unplugged. |
| [Tags] Power_Supply_Error_Logging_Test_At_Runtime |
| [Teardown] Run Keywords FFDC On Test Case Fail AND |
| ... Set Power Supply Present ${1} |
| |
| REST Power On stack_mode=skip |
| |
| Set Power Supply Present ${0} |
| |
| Wait Until Keyword Succeeds 30 sec 10 sec |
| ... Logging Entry Should Exist |
| ... xyz.openbmc_project.Inventory.Error.NotPresent |
| |
| *** Keywords *** |
| |
| Check Power Telemetry When Host On |
| [Documentation] Check that power consumption is within limits when host |
| ... is on. |
| [Arguments] ${power_paths} |
| |
| # Description of argument(s): |
| # power_paths A list of power paths (example list element |
| # "/org/open_power/sensors/aggregation/per_30s/ps0_input_power/average"). |
| |
| Reset 30s Aggregation Power Readings |
| # sleep for 3 minutes to get 6-7 readings. |
| Sleep 3m |
| |
| # Check for "average" aggregation. |
| FOR ${power_path} IN @{power_paths[0]} |
| ${averages}= Get Sensors Aggregation Data ${power_path} |
| ${max} ${min}= Evaluate (max(@{averages}), min(@{averages})) |
| Should Be True ${max} < ${upper_power_limit} |
| ... msg=Wattage ${max} crossed ${upper_power_limit}. |
| Should Be True ${min} >= ${lower_power_limit} |
| ... msg=Wattage ${min} below ${lower_power_limit}. |
| END |
| |
| # Check for "maximum" aggregation. |
| FOR ${power_path} IN @{power_paths[1]} |
| ${maximums}= Get Sensors Aggregation Data ${power_path} |
| ${max} ${min}= Evaluate (max(@{maximums}), min(@{maximums})) |
| Should Be True ${max} < ${upper_power_limit} |
| ... msg=Wattage ${max} crossed ${upper_power_limit}. |
| Should Be True ${min} >= ${lower_power_limit} |
| ... msg=Wattage ${min} below ${lower_power_limit}. |
| END |
| |
| # Every 30 seconds the power wattage data is updated. |
| Sleep ${power_data_collection_interval}s |
| |
| |
| Check Power Telemetry When Host Off |
| [Documentation] Check that power consumption is within limits when host |
| ... is off. |
| [Arguments] ${power_paths} |
| |
| # Description of argument(s): |
| # power_paths A list of power paths (example list element |
| # "/org/open_power/sensors/aggregation/per_30s/ps0_input_power/average"). |
| |
| # Every 30 seconds the power wattage data is updated. |
| Sleep ${power_data_collection_interval}s |
| |
| # Check for "average" aggregation. |
| FOR ${power_path} IN @{power_paths[0]} |
| ${averages}= Get Sensors Aggregation Data ${power_path} |
| Should Be True ${averages[0]} < ${lower_power_limit} |
| ... msg=Wattage ${averages[0]} more than ${lower_power_limit}. |
| END |
| |
| # Check for "maximum" aggregation. |
| FOR ${power_path} IN @{power_paths[1]} |
| ${maximums}= Get Sensors Aggregation Data ${power_path} |
| Should Be True ${maximums[0]} < ${lower_power_limit} |
| ... msg=Wattage ${maximums[0]} more than ${lower_power_limit}. |
| END |
| |
| |
| Reset 30s Aggregation Power Readings |
| [Documentation] Reset 30s Aggregation Power Readings to ensure readings |
| ... are collected after Power Supplies are done powering up. |
| |
| BMC Execute Command /bin/systemctl restart power-supply-monitor@0.service |
| BMC Execute Command /bin/systemctl restart power-supply-monitor@1.service |
| # wait for services to restart. |
| Sleep 10s |
| |
| |
| Set Power Supply Present |
| [Documentation] Clear error log and set power present field. |
| [Arguments] ${power_present_setting} |
| |
| # Description of argument(s): |
| # power_present_setting Enable or disable power present field (e.g."0/1"). |
| |
| ${data}= Create Dictionary data=${power_present_setting} |
| Write Attribute |
| ... ${HOST_INVENTORY_URI}system/chassis/motherboard/powersupply0 |
| ... Present data=${data} |