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
19Resource          ../lib/dump_utils.robot
20
21*** Variables ***
22${HOST_SETTING}      /org/openbmc/settings/host0
23
24*** Test Cases ***
25
26Get To Stable State
27    [Documentation]  BMC cleanup drive to stable state
28    ...              1. PDU powercycle if specified
29    ...              1. Ping Test
30    ...              2. SSH Connection session Test
31    ...              3. REST Connection session Test
32    ...              4. Reboot BMC if REST Test failed
33    ...              5. Get BMC in Ready state if its not in this state
34    ...              6. Get Host in Off state if its not in this state
35    ...              7. Update restore policy
36    ...              8. Verify and Update MAC address.
37    [Tags]  Get_To_Stable_State
38
39    Run Keyword And Ignore Error  Powercycle System Via PDU
40
41    Wait For Host To Ping  ${OPENBMC_HOST}  2 mins
42    Run Keyword And Ignore Error
43    ...  Open Connection And Log In  host=${OPENBMC_HOST}
44
45    Wait Until Keyword Succeeds
46    ...  1 min  30 sec  Initialize OpenBMC
47
48    ${ready_status}=  Run Keyword And Return Status  Is BMC Ready
49    Run Keyword If  '${ready_status}' == '${False}'  Put BMC State  Ready
50
51    ${host_off_status}=  Run Keyword And Return Status  Is Host Off
52    Run Keyword If  '${host_off_status}' == '${False}'  Initiate Host PowerOff
53
54    Prune Journal Log
55
56    Run Keyword And Ignore Error  Set BMC Power Policy  ${RESTORE_LAST_STATE}
57
58    # TODO: Enable MAC AES check latter.
59    # Reference : openbmc/openbmc-test-automation#998
60    #Run Keyword If  '${MAC_ADDRESS}' != '${EMPTY}'
61    #...  Check And Reset MAC
62
63    # TODO: Add new UBI File system cleanup.
64    # Reference : openbmc/openbmc-test-automation#998
65    #${rc}=  Execute Command  find ${CLEANUP_DIR_PATH}
66    #...  return_stdout=False  return_rc=True
67    #Run Keyword If  '${CLEANUP_DIR_PATH}' != '${EMPTY}' and ${rc} == 0
68    #...  Cleanup Dir
69
70    Run Keyword And Ignore Error  Delete All Error Logs
71    Run Keyword And Ignore Error  Delete All Dumps
72
73*** Keywords ***
74
75BMC Online Test
76    [Documentation]   BMC ping, SSH, REST connection Test
77
78    ${l_status}=   Run Keyword and Return Status
79    ...   Verify Ping and REST Authentication
80    Run Keyword If  '${l_status}' == '${False}'
81    ...   Fail  msg=System not in ideal state to continue [ERROR]
82
83
84Update Policy Setting
85    [Documentation]   Update the given restore policy
86    [Arguments]   ${policy}
87
88    ${valueDict}=     create dictionary  data=${policy}
89    Write Attribute    ${HOST_SETTING}    power_policy   data=${valueDict}
90    ${currentPolicy}=  Read Attribute     ${HOST_SETTING}   power_policy
91    Should Be Equal    ${currentPolicy}   ${policy}
92
93
94Trigger Warm Reset via Reboot
95    [Documentation]    Execute reboot command on the remote BMC and
96    ...                returns immediately. This keyword "Start Command"
97    ...                returns nothing and does not wait for the command
98    ...                execution to be finished.
99    Open Connection And Log In
100
101    Start Command   /sbin/reboot
102
103
104Powercycle System Via PDU
105    [Documentation]   AC cycle the system via PDU
106
107    Validate Parameters
108    PDU Power Cycle
109    Check If BMC is Up   5 min    10 sec
110
111
112Validate Parameters
113    Should Not Be Empty   ${PDU_IP}
114    Should Not Be Empty   ${PDU_TYPE}
115    Should Not Be Empty   ${PDU_SLOT_NO}
116    Should Not Be Empty   ${PDU_USERNAME}
117    Should Not Be Empty   ${PDU_PASSWORD}
118