|  | *** Settings *** | 
|  | Documentation       Get the system power supply readings and power mode settings. | 
|  |  | 
|  | Resource            ../../lib/bmc_redfish_resource.robot | 
|  | Resource            ../../lib/bmc_redfish_utils.robot | 
|  | Resource            ../../lib/openbmc_ffdc.robot | 
|  | Library             ../../lib/gen_robot_valid.py | 
|  |  | 
|  | Suite Setup         Suite Setup Execution | 
|  | Suite Teardown      Suite Teardown Execution | 
|  | Test Setup          Printn | 
|  | Test Teardown       Test Teardown Execution | 
|  |  | 
|  | *** Variables *** | 
|  |  | 
|  | # Power Mode Settings | 
|  | @{VALID_POWER_MODES}    Static  PowerSaving  MaximumPerformance | 
|  |  | 
|  |  | 
|  | *** Test Cases *** | 
|  |  | 
|  | Verify Current Power Mode Setting | 
|  | [Documentation]  Verify the current power mode setting. | 
|  | [Tags]  Verify_Current_Power_Mode_Setting | 
|  |  | 
|  | # Example: | 
|  | # /redfish/v1/Systems/system | 
|  | # | 
|  | # "PartNumber": "", | 
|  | # "PowerMode": "MaximumPerformance", | 
|  | # "PowerMode@Redfish.AllowableValues": [ | 
|  | #    "Static", | 
|  | #    "MaximumPerformance", | 
|  | #    "PowerSaving" | 
|  | # ], | 
|  |  | 
|  | ${current_power_mode}=  Redfish.Get Attribute  ${SYSTEM_BASE_URI}  PowerMode | 
|  | Rprint Vars  current_power_mode | 
|  |  | 
|  | Valid Value  current_power_mode  valid_values=${VALID_POWER_MODES} | 
|  |  | 
|  |  | 
|  | Verify Allowable Power Mode Settings | 
|  | [Documentation]  Verify the allowable power mode settings. | 
|  | [Tags]  Verify_Allowable_Power_Mode_Settings | 
|  |  | 
|  | ${allowed_power_modes}=  Redfish.Get Attribute  ${SYSTEM_BASE_URI}  PowerMode@Redfish.AllowableValues | 
|  | Rprint Vars  allowed_power_modes | 
|  |  | 
|  | Valid List  allowed_power_modes  valid_values=${VALID_POWER_MODES} | 
|  |  | 
|  |  | 
|  | Verify Allowable Power Mode Settings Switch At Runtime | 
|  | [Documentation]  Check the allowable power modes are set successfully at runtime. | 
|  | [Tags]  Verify_Allowable_Power_Mode_Settings_Switch_At_Runtime | 
|  | [Template]  Set and Verify Power Mode Switches | 
|  |  | 
|  | # power_mode_type | 
|  | Static | 
|  | PowerSaving | 
|  | MaximumPerformance | 
|  |  | 
|  |  | 
|  | Verify State Of PowerSubsystem PowerSupplies | 
|  | [Documentation]  Verify the state of the system's powersupplies is ok and enabled. | 
|  | [Tags]  Verify_State_Of_PowerSubsystem_PowerSupplies | 
|  |  | 
|  | ${total_num_supplies}=  Get Total Number Of PowerSupplies | 
|  | Rprint Vars  total_num_supplies | 
|  |  | 
|  | ${resp}=  Redfish.Get  ${REDFISH_CHASSIS_URI}/${CHASSIS_ID}/PowerSubsystem/PowerSupplies | 
|  | FOR  ${entry}  IN RANGE  0  ${total_num_supplies} | 
|  | ${resp_resource}=  Redfish.Get  ${resp.dict["Members"][${entry}]["@odata.id"]} | 
|  | # Example: | 
|  | # "Status": { | 
|  | #     "Health": "OK", | 
|  | #     "State": "Enabled" | 
|  | # }, | 
|  | Should Be Equal As Strings  ${resp_resource.dict["Status"]["Health"]}  OK | 
|  | Should Be Equal As Strings  ${resp_resource.dict["Status"]["State"]}  Enabled | 
|  | END | 
|  |  | 
|  |  | 
|  | Verify PowerSubsystem Efficiency Percent For All PowerSupplies | 
|  | [Documentation]  Verify the efficiency percent for all powersupplies. | 
|  | [Tags]  Verify_PowerSubsystem_Efficiency_Percent_For_All_PowerSupplies | 
|  |  | 
|  | ${total_num_supplies}=  Get Total Number Of PowerSupplies | 
|  | Rprint Vars  total_num_supplies | 
|  |  | 
|  | # Example output: | 
|  | # - Executing: get('/redfish/v1/Chassis/chassis/PowerSubsystem/PowerSupplies/powersupply0') | 
|  | # resp_resource: | 
|  | #   [0]: | 
|  | #     [EfficiencyPercent]:                          90 | 
|  | # - Executing: get('/redfish/v1/Chassis/chassis/PowerSubsystem/PowerSupplies/powersupply1') | 
|  | # resp_resource: | 
|  | #   [0]: | 
|  | #     [EfficiencyPercent]:                          90 | 
|  |  | 
|  | ${resp}=  Redfish.Get  ${REDFISH_CHASSIS_URI}/${CHASSIS_ID}/PowerSubsystem/PowerSupplies | 
|  | FOR  ${entry}  IN RANGE  0  ${total_num_supplies} | 
|  | ${resp_resource}=  Redfish.Get Attribute | 
|  | ...  ${resp.dict["Members"][${entry}]["@odata.id"]}  EfficiencyRatings | 
|  | Rprint Vars  resp_resource | 
|  | ${efficiency_percentages}=  Nested Get  EfficiencyPercent  ${resp_resource} | 
|  | Valid List  efficiency_percentages  [90] | 
|  | END | 
|  |  | 
|  |  | 
|  |  | 
|  | *** Keywords *** | 
|  |  | 
|  | Get Total Number Of PowerSupplies | 
|  | [Documentation]  Return total number of powersupplies. | 
|  | ${total_num_powersupplies}=  Redfish.Get Attribute | 
|  | ...  ${REDFISH_CHASSIS_URI}/${CHASSIS_ID}/PowerSubsystem/PowerSupplies  Members@odata.count | 
|  |  | 
|  | # Entries "Members@odata.count": 4, | 
|  | # {'@odata.id': '/redfish/v1/Chassis/chassis/PowerSubsystem/PowerSupplies/powersupply0'} | 
|  | # {'@odata.id': '/redfish/v1/Chassis/chassis/PowerSubsystem/PowerSupplies/powersupply1'} | 
|  | # {'@odata.id': '/redfish/v1/Chassis/chassis/PowerSubsystem/PowerSupplies/powersupply2'} | 
|  | # {'@odata.id': '/redfish/v1/Chassis/chassis/PowerSubsystem/PowerSupplies/powersupply3'} | 
|  | RETURN  ${total_num_powersupplies} | 
|  |  | 
|  |  | 
|  | Set and Verify Power Mode Switches | 
|  | [Documentation]  Verify the power mode switches successfully at standby or runtime. | 
|  | [Arguments]  ${power_mode} | 
|  |  | 
|  | # Description of Arguments(s): | 
|  | # power_mode       Read the allowable power modes (e.g. "Static") | 
|  |  | 
|  | Redfish.Login | 
|  |  | 
|  | Redfish.patch  ${SYSTEM_BASE_URI} | 
|  | ...  body={"PowerMode":"${power_mode}"}  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}] | 
|  | ${current_power_mode}=  Redfish.Get Attribute  ${SYSTEM_BASE_URI}  PowerMode | 
|  | Should Be Equal As Strings  ${power_mode}  ${current_power_mode} | 
|  | ...  msg=The thermal mode does not match the current fan mode. | 
|  | Rprint Vars  current_power_mode | 
|  |  | 
|  |  | 
|  | Suite Teardown Execution | 
|  | [Documentation]  Do the post suite teardown. | 
|  |  | 
|  | Redfish.Logout | 
|  |  | 
|  |  | 
|  | Suite Setup Execution | 
|  | [Documentation]  Do test case setup tasks. | 
|  |  | 
|  | Printn | 
|  | Redfish.Login | 
|  |  | 
|  |  | 
|  | Test Teardown Execution | 
|  | [Documentation]  Do the post test teardown. | 
|  |  | 
|  | FFDC On Test Case Fail |