xref: /openbmc/openbmc-test-automation/extended/code_update/bmc_code_update.robot (revision e78a443136122b9bb8ed7f1e70af9044cbbc7f23)
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
8*e78a4431SMichael WalshLibrary           ../../lib/gen_robot_keyword.py
99f74d3afSCharles Paul HoferVariables         ../../data/variables.py
1077c6919bSSivas SRRResource          ../../lib/utils.robot
119f74d3afSCharles Paul HoferResource          ../../lib/boot_utils.robot
129f74d3afSCharles Paul HoferResource          code_update_utils.robot
139f74d3afSCharles Paul HoferResource          ../../lib/code_update_utils.robot
141eb85f57SGeorge KeishingResource          ../../lib/openbmc_ffdc.robot
151eb85f57SGeorge KeishingResource          ../../lib/dump_utils.robot
169f74d3afSCharles Paul Hofer
17d66c5dceSCharles Paul HoferSuite Setup       Suite Setup Execution
18d66c5dceSCharles Paul Hofer
19d66c5dceSCharles Paul HoferTest Teardown     Test Teardown Execution
209f74d3afSCharles Paul Hofer
2109712a1eSGeorge KeishingForce Tags        BMC_Code_Update
2209712a1eSGeorge Keishing
239f74d3afSCharles Paul Hofer*** Variables ***
249f74d3afSCharles Paul Hofer
259f74d3afSCharles Paul Hofer${QUIET}                          ${1}
269f74d3afSCharles Paul Hofer${IMAGE_FILE_PATH}                ${EMPTY}
27c1fa2bc9SCharles Paul Hofer${ALTERNATE_IMAGE_FILE_PATH}      ${EMPTY}
28b7842a59SCharles Paul Hofer${SKIP_UPDATE_IF_ACTIVE}          false
29d66c5dceSCharles Paul Hofer${dump_id}                        ${EMPTY}
30d66c5dceSCharles Paul Hofer${running_persistence_test}       ${FALSE}
31d66c5dceSCharles Paul Hofer${test_errlog_text}               AutoTestSimple
329f74d3afSCharles Paul Hofer
339f74d3afSCharles Paul Hofer*** Test Cases ***
349f74d3afSCharles Paul Hofer
3577c6919bSSivas SRRTest Basic BMC Performance Before BMC Code Update
3677c6919bSSivas SRR    [Documentation]  Check performance of memory, CPU & file system of BMC.
3777c6919bSSivas SRR    [Tags]  Test_Basic_BMC_Performance_Before_BMC_Code_Update
3877c6919bSSivas SRR
3977c6919bSSivas SRR    Open Connection And Log In
4077c6919bSSivas SRR    Check BMC Performance
4177c6919bSSivas SRR
42d66c5dceSCharles Paul HoferPrepare Persistent Data
43d66c5dceSCharles Paul Hofer    [Documentation]  Set data that should persist across the code update.
44d66c5dceSCharles Paul Hofer    [Tags]  Prepare_Persistent_Data
45d66c5dceSCharles Paul Hofer
46d66c5dceSCharles Paul Hofer    # Install the debug tarball.
47d66c5dceSCharles Paul Hofer    BMC Execute Command  rm -rf /tmp/tarball
48d66c5dceSCharles Paul Hofer    Install Debug Tarball On BMC  tarball_file_path=${DEBUG_TARBALL_PATH}
49d66c5dceSCharles Paul Hofer
50d66c5dceSCharles Paul Hofer    # Create a dummy error log and dump.
51d66c5dceSCharles Paul Hofer    BMC Execute Command  /tmp/tarball/bin/logging-test -c ${test_errlog_text}
52d66c5dceSCharles Paul Hofer    ${dump_id}=  Create User Initiated Dump
53d66c5dceSCharles Paul Hofer    Check Dump Existence  ${dump_id}
54d66c5dceSCharles Paul Hofer    Set Suite Variable  ${dump_id}
55d66c5dceSCharles Paul Hofer
56d66c5dceSCharles Paul Hofer    # Set persistent settings.
57d66c5dceSCharles Paul Hofer    ${autoreboot_dict}=  Create Dictionary  data=${0}
58d66c5dceSCharles Paul Hofer    Write Attribute  ${CONTROL_HOST_URI}auto_reboot  AutoReboot
59d66c5dceSCharles Paul Hofer    ...  data=${autoreboot_dict}
60d66c5dceSCharles Paul Hofer    ${onetime_dict}=  Create Dictionary  data=${0}
61d66c5dceSCharles Paul Hofer    Write Attribute  ${CONTROL_HOST_URI}boot/one_time  Enabled
62d66c5dceSCharles Paul Hofer    ...  data=${onetime_dict}
63d66c5dceSCharles Paul Hofer
64d66c5dceSCharles Paul Hofer    # Let the remaining test cases know we are doing a persistence test so we
65d66c5dceSCharles Paul Hofer    # do not delete logs.
66d66c5dceSCharles Paul Hofer    Set Suite Variable  ${running_persistence_test}  ${TRUE}
67d66c5dceSCharles Paul Hofer
68d66c5dceSCharles Paul Hofer
699f74d3afSCharles Paul HoferREST BMC Code Update
709f74d3afSCharles Paul Hofer    [Documentation]  Do a BMC code update by uploading image on BMC via REST.
719f74d3afSCharles Paul Hofer    [Tags]  REST_BMC_Code_Update
72d66c5dceSCharles Paul Hofer    [Teardown]  REST BMC Code Update Teardown
739f74d3afSCharles Paul Hofer
748c7ada42SSweta Potthuri    Run Keyword And Ignore Error  List Installed Images  BMC
758c7ada42SSweta Potthuri
7621845469SCharles Paul Hofer    Upload And Activate Image  ${IMAGE_FILE_PATH}
7721845469SCharles Paul Hofer    ...  skip_if_active=${SKIP_UPDATE_IF_ACTIVE}
789f74d3afSCharles Paul Hofer    OBMC Reboot (off)
79e43fb2f7SCharles Paul Hofer    Verify Running BMC Image  ${IMAGE_FILE_PATH}
809f74d3afSCharles Paul Hofer
819f74d3afSCharles Paul Hofer
82d66c5dceSCharles Paul HoferVerify Error Log Persistency
83d66c5dceSCharles Paul Hofer    [Documentation]  Check that the error log is still present after a
84d66c5dceSCharles Paul Hofer    ...              code update.
85d66c5dceSCharles Paul Hofer    [Tags]  Verify_Error_Log_Persistency
86d66c5dceSCharles Paul Hofer
87d66c5dceSCharles Paul Hofer    ${error_log_paths}=  Read Properties  ${BMC_LOGGING_URI}/list
88d66c5dceSCharles Paul Hofer    Log To Console  ${error_log_paths}
89d66c5dceSCharles Paul Hofer    ${test_error_message}=  Read Attribute  @{error_log_paths}[-1]  Message
90d66c5dceSCharles Paul Hofer    Should Be Equal  ${test_error_message}
91d66c5dceSCharles Paul Hofer    ...  example.xyz.openbmc_project.Example.Elog.${test_errlog_text}
92d66c5dceSCharles Paul Hofer    Delete Error Log Entry  @{error_log_paths}[-1]
93d66c5dceSCharles Paul Hofer
94d66c5dceSCharles Paul Hofer
95d66c5dceSCharles Paul HoferVerify BMC Dump Persistency
96d66c5dceSCharles Paul Hofer    [Documentation]  Check that the BMC dump present after a code update.
97d66c5dceSCharles Paul Hofer    [Tags]  Verify_BMC_Dump_Persistency
98d66c5dceSCharles Paul Hofer    [Teardown]  Set Suite Variable  ${running_persistence_test}  ${FALSE}
99d66c5dceSCharles Paul Hofer
100d66c5dceSCharles Paul Hofer    Check Dump Existence  ${dump_id}
101d66c5dceSCharles Paul Hofer    Delete BMC Dump  ${dump_id}
102d66c5dceSCharles Paul Hofer
103d66c5dceSCharles Paul Hofer
104d66c5dceSCharles Paul HoferVerify Settings Persistency
105d66c5dceSCharles Paul Hofer    [Documentation]  Verify that the settings from 'Prepare Persistent Data'
106d66c5dceSCharles Paul Hofer    ...              are still set correctly after the code update.
107d66c5dceSCharles Paul Hofer    [Tags]  Verify_Settings_Persistency
108d66c5dceSCharles Paul Hofer
109d66c5dceSCharles Paul Hofer    ${autoreboot_enabled}=  Read Attribute  ${CONTROL_HOST_URI}auto_reboot
110d66c5dceSCharles Paul Hofer    ...  AutoReboot
111d66c5dceSCharles Paul Hofer    Should Be Equal  ${autoreboot_enabled}  ${0}
112d66c5dceSCharles Paul Hofer    ${onetime_enabled}=  Read Attribute  ${CONTROL_HOST_URI}boot/one_time
113d66c5dceSCharles Paul Hofer    ...  Enabled
114d66c5dceSCharles Paul Hofer    Should Be Equal  ${onetime_enabled}  ${0}
115d66c5dceSCharles Paul Hofer
116d66c5dceSCharles Paul Hofer    # Set values back to their defaults
117d66c5dceSCharles Paul Hofer    ${autoreboot_dict}=  Create Dictionary  data=${1}
118d66c5dceSCharles Paul Hofer    Write Attribute  ${CONTROL_HOST_URI}auto_reboot  AutoReboot
119d66c5dceSCharles Paul Hofer    ...  data=${autoreboot_dict}
120d66c5dceSCharles Paul Hofer    ${onetime_dict}=  Create Dictionary  data=${1}
121d66c5dceSCharles Paul Hofer    Write Attribute  ${CONTROL_HOST_URI}boot/one_time  Enabled
122d66c5dceSCharles Paul Hofer    ...  data=${onetime_dict}
123d66c5dceSCharles Paul Hofer
124d66c5dceSCharles Paul Hofer
125c1fa2bc9SCharles Paul HoferUpload And Activate Multiple BMC Images
126c1fa2bc9SCharles Paul Hofer    [Documentation]  Upload another BMC image and verify that its state is
127c1fa2bc9SCharles Paul Hofer    ...              different from all others.
128c1fa2bc9SCharles Paul Hofer    [Tags]  Upload_And_Activate_Multiple_BMC_Images
129c1fa2bc9SCharles Paul Hofer    [Template]  Activate Image And Verify No Duplicate Priorities
130c1fa2bc9SCharles Paul Hofer    [Setup]  Upload And Activate Multiple BMC Images Setup
131c1fa2bc9SCharles Paul Hofer
132c1fa2bc9SCharles Paul Hofer    # Image File Path              Image Purpose
133c1fa2bc9SCharles Paul Hofer    ${ALTERNATE_IMAGE_FILE_PATH}   ${VERSION_PURPOSE_BMC}
134c1fa2bc9SCharles Paul Hofer
135c1fa2bc9SCharles Paul Hofer
13642f17468SCharles Paul HoferBMC Set Priority To Invalid Values
13742f17468SCharles Paul Hofer    [Documentation]  Attempt to set the priority of an image to an invalid
13842f17468SCharles Paul Hofer    ...              value and expect an error.
13942f17468SCharles Paul Hofer    [Tags]  BMC_Set_Priority_To_Invalid_Values
14042f17468SCharles Paul Hofer    [Template]  Set Priority To Invalid Value And Expect Error
14142f17468SCharles Paul Hofer
14242f17468SCharles Paul Hofer    # Version Type              Priority
14342f17468SCharles Paul Hofer    ${VERSION_PURPOSE_BMC}     ${-1}
14442f17468SCharles Paul Hofer    ${VERSION_PURPOSE_BMC}     ${256}
14542f17468SCharles Paul Hofer
14642f17468SCharles Paul Hofer
1479f74d3afSCharles Paul HoferDelete BMC Image
1489f74d3afSCharles Paul Hofer    [Documentation]  Delete a BMC image from the BMC flash chip.
1499f74d3afSCharles Paul Hofer    [Tags]  Delete_BMC_Image
1509f74d3afSCharles Paul Hofer
1519f74d3afSCharles Paul Hofer    ${software_object}=  Get Non Running BMC Software Object
1529f74d3afSCharles Paul Hofer    Delete Image And Verify  ${software_object}  ${VERSION_PURPOSE_BMC}
153c1fa2bc9SCharles Paul Hofer
154c1fa2bc9SCharles Paul Hofer
15597ecb270SGeorge KeishingBMC Image Priority Attribute Test
15697ecb270SGeorge Keishing    [Documentation]  Set "Priority" attribute.
15797ecb270SGeorge Keishing    [Tags]  BMC_Image_Priority_Attribute_Test
15897ecb270SGeorge Keishing    [Template]  Temporarily Set BMC Attribute
15997ecb270SGeorge Keishing
16097ecb270SGeorge Keishing    # Property        Value
16197ecb270SGeorge Keishing    Priority          ${0}
16297ecb270SGeorge Keishing    Priority          ${1}
16397ecb270SGeorge Keishing    Priority          ${127}
16497ecb270SGeorge Keishing    Priority          ${255}
16597ecb270SGeorge Keishing
16697ecb270SGeorge Keishing
167e8dc5253SCharles Paul HoferDelete All Non Running BMC Images
168e8dc5253SCharles Paul Hofer    [Documentation]  Delete all non running BMC images.
169e8dc5253SCharles Paul Hofer    [Tags]  Delete_All_Non_Running_BMC_Images
170e8dc5253SCharles Paul Hofer
171e8dc5253SCharles Paul Hofer    ${version_id}=  Upload And Activate Image  ${ALTERNATE_IMAGE_FILE_PATH}
1720889d43bSGeorge Keishing    ...  skip_if_active=true
173e8dc5253SCharles Paul Hofer    Delete All Non Running BMC Images
174e8dc5253SCharles Paul Hofer
175e8dc5253SCharles Paul Hofer    ${software_ids}=  Get Software Objects Id
176e8dc5253SCharles Paul Hofer    ...  version_type=${VERSION_PURPOSE_BMC}
177e8dc5253SCharles Paul Hofer    Should Not Contain  ${software_ids}  ${version_id}
178e8dc5253SCharles Paul Hofer
17977c6919bSSivas SRRTest Basic BMC Performance After Code Update
18077c6919bSSivas SRR    [Documentation]  Check performance of memory, CPU & file system of BMC.
18177c6919bSSivas SRR    [Tags]  Test_Basic_BMC_Performance_After_Code_Update
18277c6919bSSivas SRR
18377c6919bSSivas SRR    Open Connection And Log In
18477c6919bSSivas SRR    Check BMC Performance
18577c6919bSSivas SRR
186e8dc5253SCharles Paul Hofer
187c1fa2bc9SCharles Paul Hofer*** Keywords ***
188c1fa2bc9SCharles Paul Hofer
18997ecb270SGeorge KeishingTemporarily Set BMC Attribute
19097ecb270SGeorge Keishing    [Documentation]  Update the BMC attribute value.
19197ecb270SGeorge Keishing    [Arguments]  ${attribute_name}  ${attribute_value}
19297ecb270SGeorge Keishing
19397ecb270SGeorge Keishing    # Description of argument(s):
19497ecb270SGeorge Keishing    # attribute_name    BMC software attribute name (e.g. "Priority").
19597ecb270SGeorge Keishing    # attribute_value   Value to be written.
19697ecb270SGeorge Keishing
19797ecb270SGeorge Keishing    ${image_ids}=  Get Software Objects  ${VERSION_PURPOSE_BMC}
19897ecb270SGeorge Keishing    ${init_bmc_properties}=  Get Host Software Property  ${image_ids[0]}
19997ecb270SGeorge Keishing    ${initial_priority}=  Set Variable  ${init_bmc_properties["Priority"]}
20097ecb270SGeorge Keishing
20197ecb270SGeorge Keishing    Set Host Software Property  ${image_ids[0]}  ${attribute_name}
20297ecb270SGeorge Keishing    ...  ${attribute_value}
20397ecb270SGeorge Keishing
20497ecb270SGeorge Keishing    ${cur_bmc_properties}=  Get Host Software Property  ${image_ids[0]}
20597ecb270SGeorge Keishing    Should Be Equal As Integers  ${cur_bmc_properties["Priority"]}
20697ecb270SGeorge Keishing    ...  ${attribute_value}
20797ecb270SGeorge Keishing
20897ecb270SGeorge Keishing    # Revert to to initial value.
20997ecb270SGeorge Keishing    Set Host Software Property
21097ecb270SGeorge Keishing    ...  ${image_ids[0]}  ${attribute_name}  ${initial_priority}
21197ecb270SGeorge Keishing
21297ecb270SGeorge Keishing
213c1fa2bc9SCharles Paul HoferUpload And Activate Multiple BMC Images Setup
214c1fa2bc9SCharles Paul Hofer    [Documentation]  Check that the ALTERNATE_FILE_PATH variable is set.
215c1fa2bc9SCharles Paul Hofer
216c1fa2bc9SCharles Paul Hofer    Should Not Be Empty  ${ALTERNATE_IMAGE_FILE_PATH}
2171eb85f57SGeorge Keishing
218d66c5dceSCharles Paul Hofer
219d66c5dceSCharles Paul HoferREST BMC Code Update Teardown
220d66c5dceSCharles Paul Hofer    [Documentation]  Do code update test teardown.
221d66c5dceSCharles Paul Hofer
222d66c5dceSCharles Paul Hofer    FFDC On Test Case Fail
223d66c5dceSCharles Paul Hofer    Run Keyword If Test Failed  Fatal Error  msg=Code update failed.
224d66c5dceSCharles Paul Hofer
225d66c5dceSCharles Paul Hofer
226d66c5dceSCharles Paul HoferSuite Setup Execution
2271eb85f57SGeorge Keishing    [Documentation]  Do code update test case setup.
2281eb85f57SGeorge Keishing    # - Clean up all existing BMC dumps.
2291eb85f57SGeorge Keishing
230*e78a4431SMichael Walsh    Run Key  Delete All Dumps  ignore=1
231b926408eSCharles Paul Hofer    Run Keyword And Ignore Error  Smart Power Off
2320071549eSGeorge Keishing
233d66c5dceSCharles Paul HoferTest Teardown Execution
2340071549eSGeorge Keishing    [Documentation]  Do code update test case teardown.
2350071549eSGeorge Keishing    # 1. Collect FFDC if test case failed.
2360071549eSGeorge Keishing    # 2. Collect FFDC if test PASS but error log exists.
2370071549eSGeorge Keishing
238d66c5dceSCharles Paul Hofer    # Don't delete our logs if we want to persist them for tests.
239d66c5dceSCharles Paul Hofer    Return From Keyword If  ${running_persistence_test}
240d66c5dceSCharles Paul Hofer
2410071549eSGeorge Keishing    FFDC On Test Case Fail
2420071549eSGeorge Keishing    Run Keyword If  '${TEST_STATUS}' == 'PASS'  Check Error And Collect FFDC
24377c6919bSSivas SRR    Close All Connections
244