xref: /openbmc/openbmc-test-automation/extended/code_update/host_code_update.robot (revision 72373f8826917e78d1df53bbb1bdff25de1ad449)
19f74d3afSCharles Paul Hofer*** Settings ***
29f74d3afSCharles Paul HoferDocumentation     Update the PNOR code on a target BMC.
39f74d3afSCharles Paul Hofer...               Execution Method:
49f74d3afSCharles Paul Hofer...               python -m robot -v OPENBMC_HOST:<hostname>
59f74d3afSCharles Paul Hofer...               -v DELETE_OLD_PNOR_IMAGES:<"true" or "false">
6a5673166SCharles Paul Hofer...               -v IMAGE_FILE_PATH:<path/*.tar>
7a5673166SCharles Paul Hofer...               -v ALTERNATE_IMAGE_FILE_PATH:<path/*.tar>
8a5673166SCharles Paul Hofer...               host_code_update.robot
99f74d3afSCharles Paul Hofer...
109f74d3afSCharles Paul Hofer...               Code update method BMC
119f74d3afSCharles Paul Hofer...               Update work flow sequence:
129f74d3afSCharles Paul Hofer...                 - Upload image via REST
139f74d3afSCharles Paul Hofer...                 - Verify that the file exists on the BMC
149f74d3afSCharles Paul Hofer...                 - Check that software "Activation" is set to "Ready"
159f74d3afSCharles Paul Hofer...                 - Set "Requested Activation" to "Active"
169f74d3afSCharles Paul Hofer...                 - Wait for code update to complete
179f74d3afSCharles Paul Hofer...                 - Verify the new version
189f74d3afSCharles Paul Hofer
199f74d3afSCharles Paul HoferLibrary           ../../lib/bmc_ssh_utils.py
209f74d3afSCharles Paul HoferLibrary           ../../lib/code_update_utils.py
219f74d3afSCharles Paul HoferVariables         ../../data/variables.py
229f74d3afSCharles Paul HoferResource          ../../lib/boot_utils.robot
239f74d3afSCharles Paul HoferResource          code_update_utils.robot
249f74d3afSCharles Paul HoferResource          ../../lib/code_update_utils.robot
251eb85f57SGeorge KeishingResource          ../../lib/openbmc_ffdc.robot
269f74d3afSCharles Paul HoferResource          ../../lib/state_manager.robot
271eb85f57SGeorge KeishingResource          ../../lib/dump_utils.robot
289f74d3afSCharles Paul Hofer
290071549eSGeorge KeishingTest Teardown     Code Update Test Teardown
309f74d3afSCharles Paul Hofer
3109712a1eSGeorge KeishingForce Tags        Host_Code_Update
3209712a1eSGeorge Keishing
339f74d3afSCharles Paul Hofer*** Variables ***
349f74d3afSCharles Paul Hofer
359f74d3afSCharles Paul Hofer${QUIET}                          ${1}
369f74d3afSCharles Paul Hofer${IMAGE_FILE_PATH}                ${EMPTY}
379f74d3afSCharles Paul Hofer${DELETE_OLD_PNOR_IMAGES}         false
3851b54c08SCharles Paul Hofer${DELETE_OLD_GUARD_FILE}          false
39c1fa2bc9SCharles Paul Hofer${ALTERNATE_IMAGE_FILE_PATH}      ${EMPTY}
409f74d3afSCharles Paul Hofer
419f74d3afSCharles Paul Hofer*** Test Cases ***
429f74d3afSCharles Paul Hofer
439f74d3afSCharles Paul HoferREST Host Code Update
449f74d3afSCharles Paul Hofer    [Documentation]  Do a PNOR code update by uploading image on BMC via REST.
450071549eSGeorge Keishing    # 1. Delete error logs if there is any.
460071549eSGeorge Keishing    # 1. Do code update.
470071549eSGeorge Keishing    # 2. Do post update the following:
480071549eSGeorge Keishing    #    - Collect FFDC if error log exist and delete error logs.
499f74d3afSCharles Paul Hofer    [Tags]  REST_Host_Code_Update
509f74d3afSCharles Paul Hofer    [Setup]  Code Update Setup
519f74d3afSCharles Paul Hofer
529f74d3afSCharles Paul Hofer    Upload And Activate Image  ${IMAGE_FILE_PATH}
539f74d3afSCharles Paul Hofer    OBMC Reboot (off)
549f74d3afSCharles Paul Hofer
559f74d3afSCharles Paul Hofer
569f74d3afSCharles Paul HoferPost Update Boot To OS
579f74d3afSCharles Paul Hofer    [Documentation]  Boot the host OS
589f74d3afSCharles Paul Hofer    [Tags]  Post_Update_Boot_To_OS
590c4a87d0SCharles Paul Hofer    [Setup]  Start SOL Console Logging
60da6bace8SGeorge Keishing    [Teardown]  Run Keywords  Stop SOL Console Logging
61da6bace8SGeorge Keishing    ...         AND  Code Update Test Teardown
629f74d3afSCharles Paul Hofer
639f74d3afSCharles Paul Hofer    Run Keyword If  '${PREV_TEST_STATUS}' == 'FAIL'
649f74d3afSCharles Paul Hofer    ...  Fail  Code update failed. No need to boot to OS.
650071549eSGeorge Keishing    Delete Error Logs
669f74d3afSCharles Paul Hofer    REST Power On
67e43fb2f7SCharles Paul Hofer    Verify Running Host Image  ${IMAGE_FILE_PATH}
689f74d3afSCharles Paul Hofer
699f74d3afSCharles Paul Hofer
707c6e7520SCharles Paul HoferREST Host Code Update While OS Is Running
717c6e7520SCharles Paul Hofer    [Documentation]  Do a PNOR code update while the host is running.
727c6e7520SCharles Paul Hofer    [Tags]  REST_Host_Code_Update_While_OS_Is_Running
734e8c09b1SCharles Paul Hofer    [Teardown]  Run Keywords  REST Power Off  stack_mode=skip
744e8c09b1SCharles Paul Hofer    ...         AND  Code Update Test Teardown
757c6e7520SCharles Paul Hofer
767c6e7520SCharles Paul Hofer    Run Keyword If  '${PREV_TEST_STATUS}' == 'FAIL'
777c6e7520SCharles Paul Hofer    ...  Fail  Cannot boot the OS.
787c6e7520SCharles Paul Hofer
797c6e7520SCharles Paul Hofer    REST Power On  stack_mode=skip
80*72373f88SGeorge Keishing    Upload And Activate Image
81*72373f88SGeorge Keishing    ...  ${ALTERNATE_IMAGE_FILE_PATH}  skip_if_active=true
827c6e7520SCharles Paul Hofer    REST Power On  stack_mode=normal
837c6e7520SCharles Paul Hofer    Verify Running Host Image  ${ALTERNATE_IMAGE_FILE_PATH}
847c6e7520SCharles Paul Hofer
859f74d3afSCharles Paul HoferHost Image Priority Attribute Test
869f74d3afSCharles Paul Hofer    [Documentation]  Set "Priority" attribute.
879f74d3afSCharles Paul Hofer    [Tags]  Host_Image_Priority_Attribute_Test
889f74d3afSCharles Paul Hofer    [Template]  Temporarily Set PNOR Attribute
899f74d3afSCharles Paul Hofer
909f74d3afSCharles Paul Hofer    # Property        Value
919f74d3afSCharles Paul Hofer    Priority          ${0}
929f74d3afSCharles Paul Hofer    Priority          ${1}
939f74d3afSCharles Paul Hofer    Priority          ${127}
9497ecb270SGeorge Keishing    Priority          ${255}
959f74d3afSCharles Paul Hofer
969f74d3afSCharles Paul Hofer
9742f17468SCharles Paul HoferHost Set Priority To Invalid Values
9842f17468SCharles Paul Hofer    [Documentation]  Attempt to set the priority of an image to an invalid
9942f17468SCharles Paul Hofer    ...              value and expect an error.
10042f17468SCharles Paul Hofer    [Tags]  Host_Set_Priority_To_Invalid_Values
10142f17468SCharles Paul Hofer    [Template]  Set Priority To Invalid Value And Expect Error
10242f17468SCharles Paul Hofer
10342f17468SCharles Paul Hofer    # Version Type              Priority
10442f17468SCharles Paul Hofer    ${VERSION_PURPOSE_HOST}    ${-1}
10542f17468SCharles Paul Hofer    ${VERSION_PURPOSE_HOST}    ${256}
10642f17468SCharles Paul Hofer
10742f17468SCharles Paul Hofer
1089f74d3afSCharles Paul HoferSet RequestedActivation To None
1099f74d3afSCharles Paul Hofer    [Documentation]  Set the RequestedActivation of the image to None and
1109f74d3afSCharles Paul Hofer    ...              verify that it is in fact set to None.
1119f74d3afSCharles Paul Hofer    [Tags]  Set_RequestedActivation_To_None
1129f74d3afSCharles Paul Hofer
1139f74d3afSCharles Paul Hofer    ${software_objects}=  Get Software Objects
1149f74d3afSCharles Paul Hofer    Set Host Software Property  @{software_objects}[0]  RequestedActivation
1159f74d3afSCharles Paul Hofer    ...  ${REQUESTED_NONE}
1169f74d3afSCharles Paul Hofer    ${software_properties}=  Get Host Software Property  @{software_objects}[0]
1179f74d3afSCharles Paul Hofer    Should Be Equal As Strings  &{software_properties}[RequestedActivation]
1189f74d3afSCharles Paul Hofer    ...  ${REQUESTED_NONE}
1199f74d3afSCharles Paul Hofer
1209f74d3afSCharles Paul Hofer
1219f74d3afSCharles Paul HoferSet RequestedActivation And Activation To Invalid Value
1229f74d3afSCharles Paul Hofer    [Documentation]  Set the RequestedActivation and Activation propreties of
1239f74d3afSCharles Paul Hofer    ...              the image to an invalid value and verify that it was not
1249f74d3afSCharles Paul Hofer    ...              changed.
1259f74d3afSCharles Paul Hofer    [Template]  Set Property To Invalid Value And Verify No Change
1269f74d3afSCharles Paul Hofer    [Tags]  Set_RequestedActivation_And_Activation_To_Invalid_Value
1279f74d3afSCharles Paul Hofer
1289f74d3afSCharles Paul Hofer    # Property              Version Type
1299f74d3afSCharles Paul Hofer    RequestedActivation     ${VERSION_PURPOSE_HOST}
1309f74d3afSCharles Paul Hofer    Activation              ${VERSION_PURPOSE_HOST}
1319f74d3afSCharles Paul Hofer
1329f74d3afSCharles Paul Hofer
133c1fa2bc9SCharles Paul HoferUpload And Activate Multiple Host Images
134c1fa2bc9SCharles Paul Hofer    [Documentation]  Upload another PNOR image and verify that its state is
135c1fa2bc9SCharles Paul Hofer    ...              different from all others.
136c1fa2bc9SCharles Paul Hofer    [Tags]  Upload_And_Activate_Multiple_Host_Images
137c1fa2bc9SCharles Paul Hofer    [Template]  Activate Image And Verify No Duplicate Priorities
138c1fa2bc9SCharles Paul Hofer    [Setup]  Upload And Activate Multiple BMC Images Setup
139c1fa2bc9SCharles Paul Hofer
140c1fa2bc9SCharles Paul Hofer    # Image File Path              Image Purpose
141c1fa2bc9SCharles Paul Hofer    ${ALTERNATE_IMAGE_FILE_PATH}   ${VERSION_PURPOSE_HOST}
142c1fa2bc9SCharles Paul Hofer
143c1fa2bc9SCharles Paul Hofer
144a5673166SCharles Paul HoferSet Same Priority For Multiple Host Images
145a5673166SCharles Paul Hofer    [Documentation]  Attempt to set the priority to be the same for two PNOR
146a5673166SCharles Paul Hofer    ...              images and verify that the priorities are not the same.
147a5673166SCharles Paul Hofer    [Tags]  Set_Same_Priority_For_Multiple_Host_Images
148a5673166SCharles Paul Hofer
149a5673166SCharles Paul Hofer    Run Keyword If  '${PREV_TEST_STATUS}' == 'FAIL'
150a5673166SCharles Paul Hofer    ...  Fail  Activation of alternate image failed. Cannot set priority.
151a5673166SCharles Paul Hofer    Set Same Priority For Multiple Images  ${VERSION_PURPOSE_HOST}
152a5673166SCharles Paul Hofer
153a5673166SCharles Paul Hofer
1549f74d3afSCharles Paul HoferDelete Host Image
1559f74d3afSCharles Paul Hofer    [Documentation]  Delete a PNOR image from the BMC and PNOR flash chip.
1569f74d3afSCharles Paul Hofer    [Tags]  Delete_Host_Image
1579f74d3afSCharles Paul Hofer    [Setup]  Initiate Host PowerOff
1589f74d3afSCharles Paul Hofer
1599f74d3afSCharles Paul Hofer    ${software_objects}=  Get Software Objects
1609f74d3afSCharles Paul Hofer    ...  version_type=${VERSION_PURPOSE_HOST}
1619f74d3afSCharles Paul Hofer    ${num_images}=  Get Length  ${software_objects}
1629f74d3afSCharles Paul Hofer    Should Be True  0 < ${num_images}
1639f74d3afSCharles Paul Hofer    ...  msg=There are no PNOR images on the BMC to delete.
1649f74d3afSCharles Paul Hofer    Delete Image And Verify  @{software_objects}[0]  ${VERSION_PURPOSE_HOST}
1659f74d3afSCharles Paul Hofer
1669f74d3afSCharles Paul Hofer
1679f74d3afSCharles Paul Hofer*** Keywords ***
1689f74d3afSCharles Paul Hofer
1699f74d3afSCharles Paul HoferTemporarily Set PNOR Attribute
1709f74d3afSCharles Paul Hofer    [Documentation]  Update the PNOR attribute value.
1719f74d3afSCharles Paul Hofer    [Arguments]  ${attribute_name}  ${attribute_value}
1729f74d3afSCharles Paul Hofer
1739f74d3afSCharles Paul Hofer    # Description of argument(s):
1749f74d3afSCharles Paul Hofer    # attribute_name    Host software attribute name (e.g. "Priority").
1759f74d3afSCharles Paul Hofer    # attribute_value   Value to be written.
1769f74d3afSCharles Paul Hofer
1779f74d3afSCharles Paul Hofer    ${image_ids}=  Get Software Objects
1789f74d3afSCharles Paul Hofer    ${init_host_properties}=  Get Host Software Property  ${image_ids[0]}
1799f74d3afSCharles Paul Hofer    ${initial_priority}=  Set Variable  ${init_host_properties["Priority"]}
1809f74d3afSCharles Paul Hofer
1819f74d3afSCharles Paul Hofer    Set Host Software Property  ${image_ids[0]}  ${attribute_name}
1829f74d3afSCharles Paul Hofer    ...  ${attribute_value}
1839f74d3afSCharles Paul Hofer
1849f74d3afSCharles Paul Hofer    ${cur_host_properties}=  Get Host Software Property  ${image_ids[0]}
1859f74d3afSCharles Paul Hofer    Should Be Equal As Integers  ${cur_host_properties["Priority"]}
1869f74d3afSCharles Paul Hofer    ...  ${attribute_value}
1879f74d3afSCharles Paul Hofer
1889f74d3afSCharles Paul Hofer    # Revert to to initial value.
1899f74d3afSCharles Paul Hofer    Set Host Software Property
1909f74d3afSCharles Paul Hofer    ...  ${image_ids[0]}  ${attribute_name}  ${initial_priority}
1919f74d3afSCharles Paul Hofer
1929f74d3afSCharles Paul Hofer
1939f74d3afSCharles Paul HoferCode Update Setup
1949f74d3afSCharles Paul Hofer    [Documentation]  Do code update test case setup.
1951eb85f57SGeorge Keishing    # - Clean up all existing BMC dumps.
1961eb85f57SGeorge Keishing    # - Clean up all currently install PNOR images.
1979f74d3afSCharles Paul Hofer
198b926408eSCharles Paul Hofer    Run Keyword And Ignore Error  Smart Power Off
1991eb85f57SGeorge Keishing    Delete All Dumps
2000071549eSGeorge Keishing    Delete Error Logs
2019f74d3afSCharles Paul Hofer    Run Keyword If  'true' == '${DELETE_OLD_PNOR_IMAGES}'
2029f74d3afSCharles Paul Hofer    ...  Delete All PNOR Images
20351b54c08SCharles Paul Hofer    Run Keyword If  'true' == '${DELETE_OLD_GUARD_FILE}'  BMC Execute Command
20451b54c08SCharles Paul Hofer    ...  rm -f /var/lib/phosphor-software-manager/pnor/prsv/GUARD
2059f74d3afSCharles Paul Hofer
2069f74d3afSCharles Paul Hofer
207c1fa2bc9SCharles Paul HoferUpload And Activate Multiple BMC Images Setup
208c1fa2bc9SCharles Paul Hofer    [Documentation]  Check that the ALTERNATE_FILE_PATH variable is set.
209c1fa2bc9SCharles Paul Hofer
210c1fa2bc9SCharles Paul Hofer    Should Not Be Empty  ${ALTERNATE_IMAGE_FILE_PATH}
2114e8c09b1SCharles Paul Hofer    Delete All PNOR Images
212*72373f88SGeorge Keishing    Upload And Activate Image  ${IMAGE_FILE_PATH}  skip_if_active=true
213c1fa2bc9SCharles Paul Hofer
2149f74d3afSCharles Paul HoferGet PNOR Extended Version
2159f74d3afSCharles Paul Hofer    [Documentation]  Return the PNOR extended version.
2169f74d3afSCharles Paul Hofer    [Arguments]  ${manifest_path}
2179f74d3afSCharles Paul Hofer
2189f74d3afSCharles Paul Hofer    # Description of argument(s):
2199f74d3afSCharles Paul Hofer    # manifest_path  Path of the MANIFEST file
2209f74d3afSCharles Paul Hofer    #                (e.g. "/tmp/images/abc123/MANIFEST").
2219f74d3afSCharles Paul Hofer
2229f74d3afSCharles Paul Hofer    ${version}= BMC Execute Command
2239f74d3afSCharles Paul Hofer    ...  grep extended_version= ${manifest_path}
2249f74d3afSCharles Paul Hofer    [return] ${version.split(",")}
2250071549eSGeorge Keishing
2260071549eSGeorge Keishing
2270071549eSGeorge KeishingCode Update Test Teardown
2280071549eSGeorge Keishing    [Documentation]  Do code update test case teardown.
2290071549eSGeorge Keishing    # 1. Collect FFDC if test case failed.
2300071549eSGeorge Keishing    # 2. Collect FFDC if test PASS but error log exists.
2310071549eSGeorge Keishing
2320071549eSGeorge Keishing    FFDC On Test Case Fail
2330071549eSGeorge Keishing    Run Keyword If  '${TEST_STATUS}' == 'PASS'  Check Error And Collect FFDC
234