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 "ALWAYS_POWER_OFF"
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  ${ALWAYS_POWER_OFF}
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    Run Keyword And Ignore Error  Remove Journald Logs
73
74*** Keywords ***
75
76BMC Online Test
77    [Documentation]   BMC ping, SSH, REST connection Test
78
79    ${l_status}=   Run Keyword and Return Status
80    ...   Verify Ping and REST Authentication
81    Run Keyword If  '${l_status}' == '${False}'
82    ...   Fail  msg=System not in ideal state to continue [ERROR]
83
84
85Update Policy Setting
86    [Documentation]   Update the given restore policy
87    [Arguments]   ${policy}
88
89    ${valueDict}=     create dictionary  data=${policy}
90    Write Attribute    ${HOST_SETTING}    power_policy   data=${valueDict}
91    ${currentPolicy}=  Read Attribute     ${HOST_SETTING}   power_policy
92    Should Be Equal    ${currentPolicy}   ${policy}
93
94
95Trigger Warm Reset via Reboot
96    [Documentation]    Execute reboot command on the remote BMC and
97    ...                returns immediately. This keyword "Start Command"
98    ...                returns nothing and does not wait for the command
99    ...                execution to be finished.
100    Open Connection And Log In
101
102    Start Command   /sbin/reboot
103
104
105Powercycle System Via PDU
106    [Documentation]   AC cycle the system via PDU
107
108    Validate Parameters
109    PDU Power Cycle
110    Check If BMC is Up   5 min    10 sec
111
112
113Validate Parameters
114    Should Not Be Empty   ${PDU_IP}
115    Should Not Be Empty   ${PDU_TYPE}
116    Should Not Be Empty   ${PDU_SLOT_NO}
117    Should Not Be Empty   ${PDU_USERNAME}
118    Should Not Be Empty   ${PDU_PASSWORD}
119