1*** Settings ***
2Documentation     This module will take whatever action is necessary
3...               to bring the BMC to a stable, standby state.  For our
4...               purposes, a stable state is defined as:
5...                  - BMC is communicating
6...                   (pinging, sshing and REST commands working)
7...                  - Power state is 0 (off)
8...                  - BMC state is "Ready"
9...                  - HOST state is "Off"
10...                  - Boot policy is "RESTORE_LAST_STATE"
11...               Power cycle system via PDU if specified
12...               Prune archived journal logs
13
14Resource          ../lib/utils.robot
15Resource          ../lib/pdu/pdu.robot
16Resource          ../lib/state_manager.robot
17Resource          ../lib/bmc_network_utils.robot
18Resource          ../lib/bmc_cleanup.robot
19
20*** Variables ***
21${HOST_SETTING}      /org/openbmc/settings/host0
22
23*** Test Cases ***
24
25Get To Stable State
26    [Documentation]  BMC cleanup drive to stable state
27    ...              1. PDU powercycle if specified
28    ...              1. Ping Test
29    ...              2. SSH Connection session Test
30    ...              3. REST Connection session Test
31    ...              4. Reboot BMC if REST Test failed
32    ...              5. Get BMC in Ready state if its not in this state
33    ...              6. Get Host in Off state if its not in this state
34    ...              7. Update restore policy
35    ...              8. Verify and Update MAC address.
36    [Tags]  Get_To_Stable_State
37
38    Run Keyword And Ignore Error  Powercycle System Via PDU
39
40    Wait For Host To Ping  ${OPENBMC_HOST}  2 mins
41    Run Keyword And Ignore Error
42    ...  Open Connection And Log In  host=${OPENBMC_HOST}
43
44    Wait Until Keyword Succeeds
45    ...  1 min  30 sec  Initialize OpenBMC
46
47    ${ready_status}=  Run Keyword And Return Status  Is BMC Ready
48    Run Keyword If  '${ready_status}' == '${False}'  Put BMC State  Ready
49
50    ${host_off_status}=  Run Keyword And Return Status  Is Host Off
51    Run Keyword If  '${host_off_status}' == '${False}'  Initiate Host PowerOff
52
53    Prune Journal Log
54
55    Run Keyword And Ignore Error  Update Policy Setting  RESTORE_LAST_STATE
56
57    Run Keyword If  '${MAC_ADDRESS}' != '${EMPTY}'
58    ...  Check And Reset MAC
59
60    Run Keyword If  '${CLEANUP_DIR_PATH}' != '${EMPTY}'
61    ...  Cleanup Dir
62
63
64*** Keywords ***
65
66Reboot and Wait for BMC Online
67    [Documentation]    Reboot BMC and wait for it to come online
68    ...                and boot to standby
69
70    Trigger Warm Reset via Reboot
71    Wait Until Keyword Succeeds
72    ...    5 min   10 sec    BMC Online Test
73
74    Wait For BMC Standby
75
76
77BMC Online Test
78    [Documentation]   BMC ping, SSH, REST connection Test
79
80    ${l_status}=   Run Keyword and Return Status
81    ...   Verify Ping and REST Authentication
82    Run Keyword If  '${l_status}' == '${False}'
83    ...   Fail  msg=System not in ideal state to continue [ERROR]
84
85
86Wait For BMC Standby
87    [Documentation]   Wait Until BMC standby post BMC reboot
88
89    @{states}=   Create List   BMC_READY   HOST_POWERED_OFF
90    Wait Until Keyword Succeeds
91    ...    10 min   10 sec   Verify BMC State   ${states}
92
93
94Get BMC State and Expect Standby
95    [Documentation]   Get BMC state and should be at standby
96
97    @{states}=     Create List   BMC_READY   HOST_POWERED_OFF
98    ${bmc_state}=  Get BMC State Deprecated
99    Should Contain  ${states}   ${bmc_state}
100
101
102Update Policy Setting
103    [Documentation]   Update the given restore policy
104    [Arguments]   ${policy}
105
106    ${valueDict}=     create dictionary  data=${policy}
107    Write Attribute    ${HOST_SETTING}    power_policy   data=${valueDict}
108    ${currentPolicy}=  Read Attribute     ${HOST_SETTING}   power_policy
109    Should Be Equal    ${currentPolicy}   ${policy}
110
111
112Trigger Warm Reset via Reboot
113    [Documentation]    Execute reboot command on the remote BMC and
114    ...                returns immediately. This keyword "Start Command"
115    ...                returns nothing and does not wait for the command
116    ...                execution to be finished.
117    Open Connection And Log In
118
119    Start Command   /sbin/reboot
120
121
122Powercycle System Via PDU
123    [Documentation]   AC cycle the system via PDU
124
125    Validate Parameters
126    PDU Power Cycle
127    Check If BMC is Up   5 min    10 sec
128
129
130Validate Parameters
131    Should Not Be Empty   ${PDU_IP}
132    Should Not Be Empty   ${PDU_TYPE}
133    Should Not Be Empty   ${PDU_SLOT_NO}
134    Should Not Be Empty   ${PDU_USERNAME}
135    Should Not Be Empty   ${PDU_PASSWORD}
136