1*** Settings ***
2Documentation   This suite tests Timed Power On(TPO) feature via busctl command
3...             and verify the power status of the system.
4...
5...             System can be scheduled to Power ON at a specified time by using this feature.
6
7
8Resource        ../lib/boot_utils.robot
9Resource        ../lib/openbmc_ffdc.robot
10Resource        ../lib/bmc_redfish_resource.robot
11
12
13Suite Setup     Redfish.Login
14Suite Teardown  Redfish.Logout
15Test Setup      Test Setup Execution
16Test Teardown   Test Teardown Execution
17
18
19*** Variables ****
20
21${CMD_ENABLE_TPO}      busctl set-property xyz.openbmc_project.State.ScheduledHostTransition
22...   /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.ScheduledHostTransition
23...   ScheduledTransition s "xyz.openbmc_project.State.Host.Transition.On"
24
25${CMD_SET_TPO_TIME}    busctl set-property xyz.openbmc_project.State.ScheduledHostTransition
26...  /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.ScheduledHostTransition ScheduledTime t
27
28${CMD_GET_TPO_TIME}    busctl get-property xyz.openbmc_project.State.ScheduledHostTransition
29...  /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.ScheduledHostTransition ScheduledTime
30
31# Time in seconds.
32${TIMER_POWER_ON}      100
33
34# All current versions of the following distributions:
35#  - Red Hat Enterprise Linux
36#  - SUSE Linux Enterprise Server
37# Tested on RHEL 8.4.
38
39# Shut down the system and schedule it to restart in 1 hour.
40# User can input -v HOST_TIMER_POWER_ON:h24  ( e.g. 24 hours )
41${HOST_TIMER_POWER_ON}            h1
42${HOST_TIMED_POWER_ON_REQUEST}    set_poweron_time -d ${HOST_TIMER_POWER_ON} -s
43
44*** Test Cases ***
45
46Test Timed Powered On Via BMC
47    [Documentation]  Set time to power on host attribute ScheduledTime and expect
48    ...              the system to boot on scheduled time.
49    [Tags]  Test_Timed_Powered_On_Via_BMC
50
51    # Make sure the host is powered off.
52    Redfish Power Off  stack_mode=skip
53
54    # Set Host transition to ON to enable TPO.
55    BMC Execute Command  ${CMD_ENABLE_TPO}
56
57    ${tpo_set_value}=  Set Timer For Power ON
58    ${new_tpo_value}=  Get Time Power ON Value
59
60    Should Be Equal  ${new_tpo_value}  ${tpo_set_value}
61    ...  msg=TPO time set mismatched.
62
63    # Check if the system BootProgress state changed. If changed, it implies the
64    # system is powering on. Though we have set system to power on in 100 seconds
65    # since, the system boot sometime to change.
66    Wait Until Keyword Succeeds  10 min  20 sec  Is Boot Progress Changed
67
68    Log To Console   BMC Scheduled Time Power on success.
69
70
71Test Timed Powered On Via Host OS
72    [Documentation]  Set time to power on host via service aids tool set_poweron_time
73    ...              and expect the system to boot on scheduled time.
74    [Tags]  Test_Timed_Powered_On_Via_Host_OS
75
76    # Make sure the host is powered on and booted to host OS partition.
77    Redfish Power On
78
79    ${stdout}  ${stderr}  ${rc}=  OS Execute Command  which set_poweron_time  ignore_err=${0}
80    # Skip the test if the tool does not exist or error getting the tool.
81    Skip If  ${rc} != ${0}  INFO: ${stdout} Skip the test since the tool does not. Install and re-run.
82
83    # Set Host transition to ON to enable TPO.
84    ${stdout}  ${stderr}  ${rc}=  OS Execute Command  ${HOST_TIMED_POWER_ON_REQUEST}  ignore_err=${0}
85
86    # Wait for host to Power off.
87    Wait Until Keyword Succeeds  45 min  30 sec  Is BMC Standby
88
89    Log To Console  Power Off completed.
90
91    # Note: The verification could more precise by checking date and set time.
92
93    # Check if the system BootProgress state changed. If changed, it implies the
94    # system is powering on after user timer set and delta time to update BootProgress
95    # state by the state manager.
96    # ${HOST_TIMER_POWER_ON} is in <m/h/d/><time> format
97    # Example:  h1 , logic to convert  x[1:] -> 1 and x[:1] ->h  to robot format 1 h.
98
99    Log To Console  Waiting for system to power on.
100    Wait Until Keyword Succeeds  ${HOST_TIMER_POWER_ON[1:]} ${HOST_TIMER_POWER_ON[:1]}  30 sec
101    ...  Is Boot Progress Changed
102
103    Log To Console   Host Scheduled Time Power on success.
104
105
106*** Keywords ***
107
108Test Setup Execution
109    [Documentation]  Do test case setup tasks.
110
111    Redfish.Login
112
113
114Test Teardown Execution
115    [Documentation]  Do the test teardown
116
117    FFDC On Test Case Fail
118
119
120Set Timer For Power ON
121    [Documentation]  Set the time for power ON with given value.
122
123    ${current_bmc_time}=  BMC Execute Command  date +%s
124    ${time_set}=  Evaluate  ${current_bmc_time[0]} + ${TIMER_POWER_ON}
125    BMC Execute Command  ${CMD_SET_TPO_TIME} ${time_set}
126
127    [Return]  ${time_set}
128
129
130Get Time Power ON Value
131    [Documentation]  Returns time power ON value.
132
133    ${timer_value}=  BMC Execute Command  ${CMD_GET_TPO_TIME}
134    @{return_value}=  Split String  ${timer_value[0]}
135    ${return_value}=  Evaluate  ${return_value}[1]
136
137    # BMC command returns integer value.
138    [Return]  ${return_value}
139