xref: /openbmc/openbmc-test-automation/extended/code_update/bmc_code_update.robot (revision d66c5dce3125bfa10efa5b5324ddd07f5e24ee2f)
19f74d3afSCharles Paul Hofer*** Settings ***
29f74d3afSCharles Paul HoferDocumentation     Update the BMC code on a target BMC.
39f74d3afSCharles Paul Hofer...               Execution Method:
49f74d3afSCharles Paul Hofer...               python -m robot -v OPENBMC_HOST:<hostname>
59f74d3afSCharles Paul Hofer...               -v IMAGE_FILE_PATH:<path/*.tar>  bmc_code_update.robot
69f74d3afSCharles Paul Hofer
79f74d3afSCharles Paul HoferLibrary           ../../lib/code_update_utils.py
89f74d3afSCharles Paul HoferVariables         ../../data/variables.py
99f74d3afSCharles Paul HoferResource          ../../lib/boot_utils.robot
109f74d3afSCharles Paul HoferResource          code_update_utils.robot
119f74d3afSCharles Paul HoferResource          ../../lib/code_update_utils.robot
121eb85f57SGeorge KeishingResource          ../../lib/openbmc_ffdc.robot
131eb85f57SGeorge KeishingResource          ../../lib/dump_utils.robot
149f74d3afSCharles Paul Hofer
15*d66c5dceSCharles Paul HoferSuite Setup       Suite Setup Execution
16*d66c5dceSCharles Paul Hofer
17*d66c5dceSCharles Paul HoferTest Teardown     Test Teardown Execution
189f74d3afSCharles Paul Hofer
1909712a1eSGeorge KeishingForce Tags        BMC_Code_Update
2009712a1eSGeorge Keishing
219f74d3afSCharles Paul Hofer*** Variables ***
229f74d3afSCharles Paul Hofer
239f74d3afSCharles Paul Hofer${QUIET}                          ${1}
249f74d3afSCharles Paul Hofer${IMAGE_FILE_PATH}                ${EMPTY}
25c1fa2bc9SCharles Paul Hofer${ALTERNATE_IMAGE_FILE_PATH}      ${EMPTY}
26b7842a59SCharles Paul Hofer${SKIP_UPDATE_IF_ACTIVE}          false
27*d66c5dceSCharles Paul Hofer${dump_id}                        ${EMPTY}
28*d66c5dceSCharles Paul Hofer${running_persistence_test}       ${FALSE}
29*d66c5dceSCharles Paul Hofer${test_errlog_text}               AutoTestSimple
309f74d3afSCharles Paul Hofer
319f74d3afSCharles Paul Hofer*** Test Cases ***
329f74d3afSCharles Paul Hofer
33*d66c5dceSCharles Paul HoferPrepare Persistent Data
34*d66c5dceSCharles Paul Hofer    [Documentation]  Set data that should persist across the code update.
35*d66c5dceSCharles Paul Hofer    [Tags]  Prepare_Persistent_Data
36*d66c5dceSCharles Paul Hofer
37*d66c5dceSCharles Paul Hofer    # Install the debug tarball.
38*d66c5dceSCharles Paul Hofer    BMC Execute Command  rm -rf /tmp/tarball
39*d66c5dceSCharles Paul Hofer    Install Debug Tarball On BMC  tarball_file_path=${DEBUG_TARBALL_PATH}
40*d66c5dceSCharles Paul Hofer
41*d66c5dceSCharles Paul Hofer    # Create a dummy error log and dump.
42*d66c5dceSCharles Paul Hofer    BMC Execute Command  /tmp/tarball/bin/logging-test -c ${test_errlog_text}
43*d66c5dceSCharles Paul Hofer    ${dump_id}=  Create User Initiated Dump
44*d66c5dceSCharles Paul Hofer    Check Dump Existence  ${dump_id}
45*d66c5dceSCharles Paul Hofer    Set Suite Variable  ${dump_id}
46*d66c5dceSCharles Paul Hofer
47*d66c5dceSCharles Paul Hofer    # Set persistent settings.
48*d66c5dceSCharles Paul Hofer    ${autoreboot_dict}=  Create Dictionary  data=${0}
49*d66c5dceSCharles Paul Hofer    Write Attribute  ${CONTROL_HOST_URI}auto_reboot  AutoReboot
50*d66c5dceSCharles Paul Hofer    ...  data=${autoreboot_dict}
51*d66c5dceSCharles Paul Hofer    ${onetime_dict}=  Create Dictionary  data=${0}
52*d66c5dceSCharles Paul Hofer    Write Attribute  ${CONTROL_HOST_URI}boot/one_time  Enabled
53*d66c5dceSCharles Paul Hofer    ...  data=${onetime_dict}
54*d66c5dceSCharles Paul Hofer
55*d66c5dceSCharles Paul Hofer    # Let the remaining test cases know we are doing a persistence test so we
56*d66c5dceSCharles Paul Hofer    # do not delete logs.
57*d66c5dceSCharles Paul Hofer    Set Suite Variable  ${running_persistence_test}  ${TRUE}
58*d66c5dceSCharles Paul Hofer
59*d66c5dceSCharles Paul Hofer
609f74d3afSCharles Paul HoferREST BMC Code Update
619f74d3afSCharles Paul Hofer    [Documentation]  Do a BMC code update by uploading image on BMC via REST.
629f74d3afSCharles Paul Hofer    [Tags]  REST_BMC_Code_Update
63*d66c5dceSCharles Paul Hofer    [Teardown]  REST BMC Code Update Teardown
649f74d3afSCharles Paul Hofer
6521845469SCharles Paul Hofer    Upload And Activate Image  ${IMAGE_FILE_PATH}
6621845469SCharles Paul Hofer    ...  skip_if_active=${SKIP_UPDATE_IF_ACTIVE}
679f74d3afSCharles Paul Hofer    OBMC Reboot (off)
68e43fb2f7SCharles Paul Hofer    Verify Running BMC Image  ${IMAGE_FILE_PATH}
699f74d3afSCharles Paul Hofer
709f74d3afSCharles Paul Hofer
71*d66c5dceSCharles Paul HoferVerify Error Log Persistency
72*d66c5dceSCharles Paul Hofer    [Documentation]  Check that the error log is still present after a
73*d66c5dceSCharles Paul Hofer    ...              code update.
74*d66c5dceSCharles Paul Hofer    [Tags]  Verify_Error_Log_Persistency
75*d66c5dceSCharles Paul Hofer
76*d66c5dceSCharles Paul Hofer    ${error_log_paths}=  Read Properties  ${BMC_LOGGING_URI}/list
77*d66c5dceSCharles Paul Hofer    Log To Console  ${error_log_paths}
78*d66c5dceSCharles Paul Hofer    ${test_error_message}=  Read Attribute  @{error_log_paths}[-1]  Message
79*d66c5dceSCharles Paul Hofer    Should Be Equal  ${test_error_message}
80*d66c5dceSCharles Paul Hofer    ...  example.xyz.openbmc_project.Example.Elog.${test_errlog_text}
81*d66c5dceSCharles Paul Hofer    Delete Error Log Entry  @{error_log_paths}[-1]
82*d66c5dceSCharles Paul Hofer
83*d66c5dceSCharles Paul Hofer
84*d66c5dceSCharles Paul HoferVerify BMC Dump Persistency
85*d66c5dceSCharles Paul Hofer    [Documentation]  Check that the BMC dump present after a code update.
86*d66c5dceSCharles Paul Hofer    [Tags]  Verify_BMC_Dump_Persistency
87*d66c5dceSCharles Paul Hofer    [Teardown]  Set Suite Variable  ${running_persistence_test}  ${FALSE}
88*d66c5dceSCharles Paul Hofer
89*d66c5dceSCharles Paul Hofer    Check Dump Existence  ${dump_id}
90*d66c5dceSCharles Paul Hofer    Delete BMC Dump  ${dump_id}
91*d66c5dceSCharles Paul Hofer
92*d66c5dceSCharles Paul Hofer
93*d66c5dceSCharles Paul HoferVerify Settings Persistency
94*d66c5dceSCharles Paul Hofer    [Documentation]  Verify that the settings from 'Prepare Persistent Data'
95*d66c5dceSCharles Paul Hofer    ...              are still set correctly after the code update.
96*d66c5dceSCharles Paul Hofer    [Tags]  Verify_Settings_Persistency
97*d66c5dceSCharles Paul Hofer
98*d66c5dceSCharles Paul Hofer    ${autoreboot_enabled}=  Read Attribute  ${CONTROL_HOST_URI}auto_reboot
99*d66c5dceSCharles Paul Hofer    ...  AutoReboot
100*d66c5dceSCharles Paul Hofer    Should Be Equal  ${autoreboot_enabled}  ${0}
101*d66c5dceSCharles Paul Hofer    ${onetime_enabled}=  Read Attribute  ${CONTROL_HOST_URI}boot/one_time
102*d66c5dceSCharles Paul Hofer    ...  Enabled
103*d66c5dceSCharles Paul Hofer    Should Be Equal  ${onetime_enabled}  ${0}
104*d66c5dceSCharles Paul Hofer
105*d66c5dceSCharles Paul Hofer    # Set values back to their defaults
106*d66c5dceSCharles Paul Hofer    ${autoreboot_dict}=  Create Dictionary  data=${1}
107*d66c5dceSCharles Paul Hofer    Write Attribute  ${CONTROL_HOST_URI}auto_reboot  AutoReboot
108*d66c5dceSCharles Paul Hofer    ...  data=${autoreboot_dict}
109*d66c5dceSCharles Paul Hofer    ${onetime_dict}=  Create Dictionary  data=${1}
110*d66c5dceSCharles Paul Hofer    Write Attribute  ${CONTROL_HOST_URI}boot/one_time  Enabled
111*d66c5dceSCharles Paul Hofer    ...  data=${onetime_dict}
112*d66c5dceSCharles Paul Hofer
113*d66c5dceSCharles Paul Hofer
114c1fa2bc9SCharles Paul HoferUpload And Activate Multiple BMC Images
115c1fa2bc9SCharles Paul Hofer    [Documentation]  Upload another BMC image and verify that its state is
116c1fa2bc9SCharles Paul Hofer    ...              different from all others.
117c1fa2bc9SCharles Paul Hofer    [Tags]  Upload_And_Activate_Multiple_BMC_Images
118c1fa2bc9SCharles Paul Hofer    [Template]  Activate Image And Verify No Duplicate Priorities
119c1fa2bc9SCharles Paul Hofer    [Setup]  Upload And Activate Multiple BMC Images Setup
120c1fa2bc9SCharles Paul Hofer
121c1fa2bc9SCharles Paul Hofer    # Image File Path              Image Purpose
122c1fa2bc9SCharles Paul Hofer    ${ALTERNATE_IMAGE_FILE_PATH}   ${VERSION_PURPOSE_BMC}
123c1fa2bc9SCharles Paul Hofer
124c1fa2bc9SCharles Paul Hofer
12542f17468SCharles Paul HoferBMC Set Priority To Invalid Values
12642f17468SCharles Paul Hofer    [Documentation]  Attempt to set the priority of an image to an invalid
12742f17468SCharles Paul Hofer    ...              value and expect an error.
12842f17468SCharles Paul Hofer    [Tags]  BMC_Set_Priority_To_Invalid_Values
12942f17468SCharles Paul Hofer    [Template]  Set Priority To Invalid Value And Expect Error
13042f17468SCharles Paul Hofer
13142f17468SCharles Paul Hofer    # Version Type              Priority
13242f17468SCharles Paul Hofer    ${VERSION_PURPOSE_BMC}     ${-1}
13342f17468SCharles Paul Hofer    ${VERSION_PURPOSE_BMC}     ${256}
13442f17468SCharles Paul Hofer
13542f17468SCharles Paul Hofer
1369f74d3afSCharles Paul HoferDelete BMC Image
1379f74d3afSCharles Paul Hofer    [Documentation]  Delete a BMC image from the BMC flash chip.
1389f74d3afSCharles Paul Hofer    [Tags]  Delete_BMC_Image
1399f74d3afSCharles Paul Hofer
1409f74d3afSCharles Paul Hofer    ${software_object}=  Get Non Running BMC Software Object
1419f74d3afSCharles Paul Hofer    Delete Image And Verify  ${software_object}  ${VERSION_PURPOSE_BMC}
142c1fa2bc9SCharles Paul Hofer
143c1fa2bc9SCharles Paul Hofer
14497ecb270SGeorge KeishingBMC Image Priority Attribute Test
14597ecb270SGeorge Keishing    [Documentation]  Set "Priority" attribute.
14697ecb270SGeorge Keishing    [Tags]  BMC_Image_Priority_Attribute_Test
14797ecb270SGeorge Keishing    [Template]  Temporarily Set BMC Attribute
14897ecb270SGeorge Keishing
14997ecb270SGeorge Keishing    # Property        Value
15097ecb270SGeorge Keishing    Priority          ${0}
15197ecb270SGeorge Keishing    Priority          ${1}
15297ecb270SGeorge Keishing    Priority          ${127}
15397ecb270SGeorge Keishing    Priority          ${255}
15497ecb270SGeorge Keishing
15597ecb270SGeorge Keishing
156e8dc5253SCharles Paul HoferDelete All Non Running BMC Images
157e8dc5253SCharles Paul Hofer    [Documentation]  Delete all non running BMC images.
158e8dc5253SCharles Paul Hofer    [Tags]  Delete_All_Non_Running_BMC_Images
159e8dc5253SCharles Paul Hofer
160e8dc5253SCharles Paul Hofer    ${version_id}=  Upload And Activate Image  ${ALTERNATE_IMAGE_FILE_PATH}
161e8dc5253SCharles Paul Hofer    Delete All Non Running BMC Images
162e8dc5253SCharles Paul Hofer
163e8dc5253SCharles Paul Hofer    ${software_ids}=  Get Software Objects Id
164e8dc5253SCharles Paul Hofer    ...  version_type=${VERSION_PURPOSE_BMC}
165e8dc5253SCharles Paul Hofer    Should Not Contain  ${software_ids}  ${version_id}
166e8dc5253SCharles Paul Hofer
167e8dc5253SCharles Paul Hofer
168c1fa2bc9SCharles Paul Hofer*** Keywords ***
169c1fa2bc9SCharles Paul Hofer
17097ecb270SGeorge KeishingTemporarily Set BMC Attribute
17197ecb270SGeorge Keishing    [Documentation]  Update the BMC attribute value.
17297ecb270SGeorge Keishing    [Arguments]  ${attribute_name}  ${attribute_value}
17397ecb270SGeorge Keishing
17497ecb270SGeorge Keishing    # Description of argument(s):
17597ecb270SGeorge Keishing    # attribute_name    BMC software attribute name (e.g. "Priority").
17697ecb270SGeorge Keishing    # attribute_value   Value to be written.
17797ecb270SGeorge Keishing
17897ecb270SGeorge Keishing    ${image_ids}=  Get Software Objects  ${VERSION_PURPOSE_BMC}
17997ecb270SGeorge Keishing    ${init_bmc_properties}=  Get Host Software Property  ${image_ids[0]}
18097ecb270SGeorge Keishing    ${initial_priority}=  Set Variable  ${init_bmc_properties["Priority"]}
18197ecb270SGeorge Keishing
18297ecb270SGeorge Keishing    Set Host Software Property  ${image_ids[0]}  ${attribute_name}
18397ecb270SGeorge Keishing    ...  ${attribute_value}
18497ecb270SGeorge Keishing
18597ecb270SGeorge Keishing    ${cur_bmc_properties}=  Get Host Software Property  ${image_ids[0]}
18697ecb270SGeorge Keishing    Should Be Equal As Integers  ${cur_bmc_properties["Priority"]}
18797ecb270SGeorge Keishing    ...  ${attribute_value}
18897ecb270SGeorge Keishing
18997ecb270SGeorge Keishing    # Revert to to initial value.
19097ecb270SGeorge Keishing    Set Host Software Property
19197ecb270SGeorge Keishing    ...  ${image_ids[0]}  ${attribute_name}  ${initial_priority}
19297ecb270SGeorge Keishing
19397ecb270SGeorge Keishing
194c1fa2bc9SCharles Paul HoferUpload And Activate Multiple BMC Images Setup
195c1fa2bc9SCharles Paul Hofer    [Documentation]  Check that the ALTERNATE_FILE_PATH variable is set.
196c1fa2bc9SCharles Paul Hofer
197c1fa2bc9SCharles Paul Hofer    Should Not Be Empty  ${ALTERNATE_IMAGE_FILE_PATH}
1981eb85f57SGeorge Keishing
199*d66c5dceSCharles Paul Hofer
200*d66c5dceSCharles Paul HoferREST BMC Code Update Teardown
201*d66c5dceSCharles Paul Hofer    [Documentation]  Do code update test teardown.
202*d66c5dceSCharles Paul Hofer
203*d66c5dceSCharles Paul Hofer    FFDC On Test Case Fail
204*d66c5dceSCharles Paul Hofer    Run Keyword If Test Failed  Fatal Error  msg=Code update failed.
205*d66c5dceSCharles Paul Hofer
206*d66c5dceSCharles Paul Hofer
207*d66c5dceSCharles Paul HoferSuite Setup Execution
2081eb85f57SGeorge Keishing    [Documentation]  Do code update test case setup.
2091eb85f57SGeorge Keishing    # - Clean up all existing BMC dumps.
2101eb85f57SGeorge Keishing
2111eb85f57SGeorge Keishing    Delete All Dumps
212b926408eSCharles Paul Hofer    Run Keyword And Ignore Error  Smart Power Off
2130071549eSGeorge Keishing
214*d66c5dceSCharles Paul HoferTest Teardown Execution
2150071549eSGeorge Keishing    [Documentation]  Do code update test case teardown.
2160071549eSGeorge Keishing    # 1. Collect FFDC if test case failed.
2170071549eSGeorge Keishing    # 2. Collect FFDC if test PASS but error log exists.
2180071549eSGeorge Keishing
219*d66c5dceSCharles Paul Hofer    # Don't delete our logs if we want to persist them for tests.
220*d66c5dceSCharles Paul Hofer    Return From Keyword If  ${running_persistence_test}
221*d66c5dceSCharles Paul Hofer
2220071549eSGeorge Keishing    FFDC On Test Case Fail
2230071549eSGeorge Keishing    Run Keyword If  '${TEST_STATUS}' == 'PASS'  Check Error And Collect FFDC
224