| *** Settings *** |
| Documentation This suite tests Timed Power On(TPO) feature via busctl command |
| ... and verify the power status of the system. |
| ... |
| ... System can be scheduled to Power ON at a specified time by using this feature. |
| |
| |
| Resource ../lib/boot_utils.robot |
| Resource ../lib/openbmc_ffdc.robot |
| Resource ../lib/bmc_redfish_resource.robot |
| |
| |
| Suite Setup Redfish.Login |
| Suite Teardown Redfish.Logout |
| Test Setup Test Setup Execution |
| Test Teardown Test Teardown Execution |
| |
| |
| *** Variables **** |
| |
| ${CMD_ENABLE_TPO} busctl set-property xyz.openbmc_project.State.ScheduledHostTransition |
| ... /xyz/openbmc_project/scheduled/host0 xyz.openbmc_project.State.ScheduledHostTransition |
| ... ScheduledTransition s "xyz.openbmc_project.State.Host.Transition.On" |
| |
| ${CMD_SET_TPO_TIME} busctl set-property xyz.openbmc_project.State.ScheduledHostTransition |
| ... /xyz/openbmc_project/scheduled/host0 xyz.openbmc_project.State.ScheduledHostTransition ScheduledTime t |
| |
| ${CMD_GET_TPO_TIME} busctl get-property xyz.openbmc_project.State.ScheduledHostTransition |
| ... /xyz/openbmc_project/scheduled/host0 xyz.openbmc_project.State.ScheduledHostTransition ScheduledTime |
| |
| # Time in seconds. |
| ${TIMER_POWER_ON} 100 |
| |
| # All current versions of the following distributions: |
| # - Red Hat Enterprise Linux |
| # - SUSE Linux Enterprise Server |
| # Tested on RHEL 8.4. |
| |
| # Shut down the system and schedule it to restart in 1 hour. |
| # User can input -v HOST_TIMER_POWER_ON:h24 ( e.g. 24 hours ) |
| ${HOST_TIMER_POWER_ON} h1 |
| ${HOST_TIMED_POWER_ON_REQUEST} set_poweron_time -d ${HOST_TIMER_POWER_ON} -s |
| |
| *** Test Cases *** |
| |
| Test Timed Powered On Via BMC |
| [Documentation] Set time to power on host attribute ScheduledTime and expect |
| ... the system to boot on scheduled time. |
| [Tags] Test_Timed_Powered_On_Via_BMC |
| |
| # Make sure the host is powered off. |
| Redfish Power Off stack_mode=skip |
| |
| # Set Host transition to ON to enable TPO. |
| BMC Execute Command ${CMD_ENABLE_TPO} |
| |
| ${tpo_set_value}= Set Timer For Power ON |
| ${new_tpo_value}= Get Time Power ON Value |
| |
| Should Be Equal ${new_tpo_value} ${tpo_set_value} |
| ... msg=TPO time set mismatched. |
| |
| # Check if the system BootProgress state changed. If changed, it implies the |
| # system is powering on. Though we have set system to power on in 100 seconds |
| # since, the system boot sometime to change. |
| Wait Until Keyword Succeeds 10 min 20 sec Is Boot Progress Changed |
| |
| Log To Console BMC Scheduled Time Power on success. |
| |
| |
| Test Timed Powered On Via Host OS |
| [Documentation] Set time to power on host via service aids tool set_poweron_time |
| ... and expect the system to boot on scheduled time. |
| [Tags] Test_Timed_Powered_On_Via_Host_OS |
| |
| # Make sure the host is powered on and booted to host OS partition. |
| Redfish Power On |
| |
| ${stdout} ${stderr} ${rc}= OS Execute Command which set_poweron_time ignore_err=${0} |
| # Skip the test if the tool does not exist or error getting the tool. |
| Skip If ${rc} != ${0} INFO: ${stdout} Skip the test since the tool does not. Install and re-run. |
| |
| # Set Host transition to ON to enable TPO. |
| ${stdout} ${stderr} ${rc}= OS Execute Command ${HOST_TIMED_POWER_ON_REQUEST} ignore_err=${0} |
| |
| # Wait for host to Power off. |
| Wait Until Keyword Succeeds 45 min 30 sec Is BMC Standby |
| |
| Log To Console Power Off completed. |
| |
| # Note: The verification could more precise by checking date and set time. |
| |
| # Check if the system BootProgress state changed. If changed, it implies the |
| # system is powering on after user timer set and delta time to update BootProgress |
| # state by the state manager. |
| # ${HOST_TIMER_POWER_ON} is in <m/h/d/><time> format |
| # Example: h1 , logic to convert x[1:] -> 1 and x[:1] ->h to robot format 1 h. |
| |
| Log To Console Waiting for system to power on. |
| Wait Until Keyword Succeeds ${HOST_TIMER_POWER_ON[1:]} ${HOST_TIMER_POWER_ON[:1]} 30 sec |
| ... Is Boot Progress Changed |
| |
| Log To Console Host Scheduled Time Power on success. |
| |
| |
| *** Keywords *** |
| |
| Test Setup Execution |
| [Documentation] Do test case setup tasks. |
| |
| Redfish.Login |
| Set Power Policy For TPO Automatic |
| |
| |
| Set Power Policy For TPO |
| [Documentation] Change 'server power policy' option to automatic. |
| [Arguments] ${power_policy_mode} |
| |
| # Description of argument(s): |
| # power_policy_mode BIOS attribute value. E.g. "Stay On", "Automatic". |
| |
| Redfish.Patch /redfish/v1/Systems/${SYSTEM_ID}/Bios/Settings |
| ... body={"Attributes":{"pvm_system_power_off_policy": "${power_policy_mode}"}} |
| ... valid_status_codes=[${HTTP_OK}] |
| |
| |
| Test Teardown Execution |
| [Documentation] Do the test teardown |
| |
| FFDC On Test Case Fail |
| |
| |
| Set Timer For Power ON |
| [Documentation] Set the time for power ON with given value. |
| |
| ${current_bmc_time}= BMC Execute Command date +%s |
| ${time_set}= Evaluate ${current_bmc_time[0]} + ${TIMER_POWER_ON} |
| BMC Execute Command ${CMD_SET_TPO_TIME} ${time_set} |
| |
| RETURN ${time_set} |
| |
| |
| Get Time Power ON Value |
| [Documentation] Returns time power ON value. |
| |
| ${timer_value}= BMC Execute Command ${CMD_GET_TPO_TIME} |
| @{return_value}= Split String ${timer_value[0]} |
| ${return_value}= Evaluate ${return_value}[1] |
| |
| # BMC command returns integer value. |
| RETURN ${return_value} |