| *** 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 |