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