1*** Settings ***
2Documentation   Power cycle loop. This is to test where network service
3...             becomes unavailable during AC-Cycle stress test.
4
5Resource        ../lib/rest_client.robot
6Resource        ../lib/pdu/pdu.robot
7Resource        ../lib/utils.robot
8Resource        ../lib/openbmc_ffdc.robot
9Resource        ../lib/state_manager.robot
10Resource        ../lib/boot_utils.robot
11Resource        ../lib/code_update_utils.robot
12Library         ../lib/bmc_ssh_utils.py
13
14Test Teardown   Test Teardown Execution
15Suite Setup     Suite Setup Execution
16
17*** Variables ***
18${LOOP_COUNT}          ${50}
19${CHECK_FOR_ERRORS}    ${1}
20
21# Error strings to check from journald.
22${ERROR_REGEX}     SEGV|core-dump|FAILURE|Failed to start
23
24*** Test Cases ***
25
26Run Multiple Power Cycle
27    [Documentation]  Execute multiple power cycles.
28    [Setup]  Validate Parameters
29    [Tags]  Run_Multiple_Power_Cycle
30
31    # By default run test for 50 loops, else user input iteration.
32    # Fails immediately if any of the execution rounds fail and
33    # check if BMC is still pinging and FFDC is collected.
34    Repeat Keyword  ${LOOP_COUNT} times  Power Cycle System Via PDU
35
36
37Run Multiple BMC Reset Via Redfish
38    [Documentation]  Execute multiple reboots via REST.
39    [Tags]  Run_Multiple_BMC_Reset_Via_Redfish
40
41    # By default run test for 50 loops, else user input iteration.
42    # Fails immediately if any of the execution rounds fail and
43    # check if BMC is still pinging and FFDC is collected.
44    Repeat Keyword  ${LOOP_COUNT} times  BMC Redfish Reset Cycle
45
46
47Run Multiple BMC Reset Via Reboot
48    [Documentation]  Execute multiple reboots via "reboot" command.
49    [Tags]  Run_Multiple_BMC_Reset_Via_Reboot
50
51    # By default run test for 50 loops, else user input iteration.
52    # Fails immediately if any of the execution rounds fail and
53    # check if BMC is still pinging and FFDC is collected.
54    Repeat Keyword  ${LOOP_COUNT} times  BMC Reboot Cycle
55
56
57*** Keywords ***
58
59Power Cycle System Via PDU
60    [Documentation]  Power cycle system and wait for BMC to reach Ready state.
61
62    PDU Power Cycle
63    Check If BMC Is Up  5 min  10 sec
64
65    Wait Until Keyword Succeeds  10 min  10 sec  Is BMC Ready
66    Verify BMC RTC And UTC Time Drift
67
68
69BMC Redfish Reset Cycle
70    [Documentation]  Reset BMC via Redfish and verify required states.
71
72    Redfish OBMC Reboot (off)
73
74    ${bmc_version}=  Get BMC Version
75    Valid Value  bmc_version  valid_values=['${initial_bmc_version}']
76
77    Run Keyword If  '${CHECK_FOR_ERRORS}' == '${1}'
78    ...  Check For Regex In Journald  ${ERROR_REGEX}  error_check=${0}  boot=-b
79
80    Verify BMC RTC And UTC Time Drift
81
82
83BMC Reboot Cycle
84    [Documentation]  Reboot BMC and wait for ready state.
85
86    OBMC Reboot (off)  stack_mode=normal
87    ${bmc_version}=  Get BMC Version
88    Valid Value  bmc_version  ["${initial_bmc_version}"]
89    Verify BMC RTC And UTC Time Drift
90    Check For Regex In Journald  ${ERROR_REGEX}  error_check=${0}  boot=-b
91    ${boot_side}=  Get BMC Flash Chip Boot Side
92    Valid Value  boot_side  ['0']
93
94
95Test Teardown Execution
96    [Documentation]  Do test case tear-down.
97    Ping Host  ${OPENBMC_HOST}
98    FFDC On Test Case Fail
99
100
101Validate Parameters
102    [Documentation]  Validate PDU parameters.
103    Should Not Be Empty   ${PDU_IP}
104    Should Not Be Empty   ${PDU_TYPE}
105    Should Not Be Empty   ${PDU_SLOT_NO}
106    Should Not Be Empty   ${PDU_USERNAME}
107    Should Not Be Empty   ${PDU_PASSWORD}
108
109
110Suite Setup Execution
111    [Documentation]  Do suite setup.
112
113    ${bmc_version}=  Get BMC Version
114    Set Suite Variable  ${initial_bmc_version}  ${bmc_version}
115