blob: f83de19aff75a41c26e7c3dbe4921e74e8478148 [file] [log] [blame]
*** 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/state/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/state/host0 xyz.openbmc_project.State.ScheduledHostTransition ScheduledTime t
${CMD_GET_TPO_TIME} busctl get-property xyz.openbmc_project.State.ScheduledHostTransition
... /xyz/openbmc_project/state/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
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}