xref: /openbmc/openbmc-test-automation/extended/code_update/host_code_update.robot (revision e43fb2f773a76a1083c47ceac20f0a638e5be567)
1*** Settings ***
2Documentation     Update the PNOR code on a target BMC.
3...               Execution Method:
4...               python -m robot -v OPENBMC_HOST:<hostname>
5...               -v DELETE_OLD_PNOR_IMAGES:<"true" or "false">
6...               -v IMAGE_FILE_PATH:<path/*.tar>
7...               -v ALTERNATE_IMAGE_FILE_PATH:<path/*.tar>
8...               host_code_update.robot
9...
10...               Code update method BMC
11...               Update work flow sequence:
12...                 - Upload image via REST
13...                 - Verify that the file exists on the BMC
14...                 - Check that software "Activation" is set to "Ready"
15...                 - Set "Requested Activation" to "Active"
16...                 - Wait for code update to complete
17...                 - Verify the new version
18
19Library           ../../lib/bmc_ssh_utils.py
20Library           ../../lib/code_update_utils.py
21Variables         ../../data/variables.py
22Resource          ../../lib/boot_utils.robot
23Resource          code_update_utils.robot
24Resource          ../../lib/code_update_utils.robot
25Resource          ../../lib/openbmc_ffdc.robot
26Resource          ../../lib/state_manager.robot
27Resource          ../../lib/dump_utils.robot
28
29Test Teardown     Code Update Test Teardown
30
31*** Variables ***
32
33${QUIET}                          ${1}
34${IMAGE_FILE_PATH}                ${EMPTY}
35${DELETE_OLD_PNOR_IMAGES}         false
36${DELETE_OLD_GUARD_FILE}          false
37${ALTERNATE_IMAGE_FILE_PATH}      ${EMPTY}
38
39*** Test Cases ***
40
41REST Host Code Update
42    [Documentation]  Do a PNOR code update by uploading image on BMC via REST.
43    # 1. Delete error logs if there is any.
44    # 1. Do code update.
45    # 2. Do post update the following:
46    #    - Collect FFDC if error log exist and delete error logs.
47    [Tags]  REST_Host_Code_Update
48    [Setup]  Code Update Setup
49
50    Upload And Activate Image  ${IMAGE_FILE_PATH}
51    OBMC Reboot (off)
52
53
54Post Update Boot To OS
55    [Documentation]  Boot the host OS
56    [Tags]  Post_Update_Boot_To_OS
57    [Teardown]  Run Keywords  Stop SOL Console Logging
58    ...         AND  Code Update Test Teardown
59
60    Run Keyword If  '${PREV_TEST_STATUS}' == 'FAIL'
61    ...  Fail  Code update failed. No need to boot to OS.
62    Start SOL Console Logging
63    Delete Error Logs
64    REST Power On
65    Verify Running Host Image  ${IMAGE_FILE_PATH}
66
67
68Host Image Priority Attribute Test
69    [Documentation]  Set "Priority" attribute.
70    [Tags]  Host_Image_Priority_Attribute_Test
71    [Template]  Temporarily Set PNOR Attribute
72
73    # Property        Value
74    Priority          ${0}
75    Priority          ${1}
76    Priority          ${127}
77    Priority          ${255}
78
79
80Host Set Priority To Invalid Values
81    [Documentation]  Attempt to set the priority of an image to an invalid
82    ...              value and expect an error.
83    [Tags]  Host_Set_Priority_To_Invalid_Values
84    [Template]  Set Priority To Invalid Value And Expect Error
85
86    # Version Type              Priority
87    ${VERSION_PURPOSE_HOST}    ${-1}
88    ${VERSION_PURPOSE_HOST}    ${256}
89
90
91Set RequestedActivation To None
92    [Documentation]  Set the RequestedActivation of the image to None and
93    ...              verify that it is in fact set to None.
94    [Tags]  Set_RequestedActivation_To_None
95
96    ${software_objects}=  Get Software Objects
97    Set Host Software Property  @{software_objects}[0]  RequestedActivation
98    ...  ${REQUESTED_NONE}
99    ${software_properties}=  Get Host Software Property  @{software_objects}[0]
100    Should Be Equal As Strings  &{software_properties}[RequestedActivation]
101    ...  ${REQUESTED_NONE}
102
103
104Set RequestedActivation And Activation To Invalid Value
105    [Documentation]  Set the RequestedActivation and Activation propreties of
106    ...              the image to an invalid value and verify that it was not
107    ...              changed.
108    [Template]  Set Property To Invalid Value And Verify No Change
109    [Tags]  Set_RequestedActivation_And_Activation_To_Invalid_Value
110
111    # Property              Version Type
112    RequestedActivation     ${VERSION_PURPOSE_HOST}
113    Activation              ${VERSION_PURPOSE_HOST}
114
115
116Upload And Activate Multiple Host Images
117    [Documentation]  Upload another PNOR image and verify that its state is
118    ...              different from all others.
119    [Tags]  Upload_And_Activate_Multiple_Host_Images
120    [Template]  Activate Image And Verify No Duplicate Priorities
121    [Setup]  Upload And Activate Multiple BMC Images Setup
122
123    # Image File Path              Image Purpose
124    ${ALTERNATE_IMAGE_FILE_PATH}   ${VERSION_PURPOSE_HOST}
125
126
127Set Same Priority For Multiple Host Images
128    [Documentation]  Attempt to set the priority to be the same for two PNOR
129    ...              images and verify that the priorities are not the same.
130    [Tags]  Set_Same_Priority_For_Multiple_Host_Images
131
132    Run Keyword If  '${PREV_TEST_STATUS}' == 'FAIL'
133    ...  Fail  Activation of alternate image failed. Cannot set priority.
134    Set Same Priority For Multiple Images  ${VERSION_PURPOSE_HOST}
135
136
137Delete Host Image
138    [Documentation]  Delete a PNOR image from the BMC and PNOR flash chip.
139    [Tags]  Delete_Host_Image
140    [Setup]  Initiate Host PowerOff
141
142    ${software_objects}=  Get Software Objects
143    ...  version_type=${VERSION_PURPOSE_HOST}
144    ${num_images}=  Get Length  ${software_objects}
145    Should Be True  0 < ${num_images}
146    ...  msg=There are no PNOR images on the BMC to delete.
147    Delete Image And Verify  @{software_objects}[0]  ${VERSION_PURPOSE_HOST}
148
149
150*** Keywords ***
151
152Temporarily Set PNOR Attribute
153    [Documentation]  Update the PNOR attribute value.
154    [Arguments]  ${attribute_name}  ${attribute_value}
155
156    # Description of argument(s):
157    # attribute_name    Host software attribute name (e.g. "Priority").
158    # attribute_value   Value to be written.
159
160    ${image_ids}=  Get Software Objects
161    ${init_host_properties}=  Get Host Software Property  ${image_ids[0]}
162    ${initial_priority}=  Set Variable  ${init_host_properties["Priority"]}
163
164    Set Host Software Property  ${image_ids[0]}  ${attribute_name}
165    ...  ${attribute_value}
166
167    ${cur_host_properties}=  Get Host Software Property  ${image_ids[0]}
168    Should Be Equal As Integers  ${cur_host_properties["Priority"]}
169    ...  ${attribute_value}
170
171    # Revert to to initial value.
172    Set Host Software Property
173    ...  ${image_ids[0]}  ${attribute_name}  ${initial_priority}
174
175
176Code Update Setup
177    [Documentation]  Do code update test case setup.
178    # - Clean up all existing BMC dumps.
179    # - Clean up all currently install PNOR images.
180
181    Initiate Host PowerOff
182    Delete All Dumps
183    Delete Error Logs
184    Run Keyword If  'true' == '${DELETE_OLD_PNOR_IMAGES}'
185    ...  Delete All PNOR Images
186    Run Keyword If  'true' == '${DELETE_OLD_GUARD_FILE}'  BMC Execute Command
187    ...  rm -f /var/lib/phosphor-software-manager/pnor/prsv/GUARD
188
189
190Upload And Activate Multiple BMC Images Setup
191    [Documentation]  Check that the ALTERNATE_FILE_PATH variable is set.
192
193    Should Not Be Empty  ${ALTERNATE_IMAGE_FILE_PATH}
194
195
196Get PNOR Extended Version
197    [Documentation]  Return the PNOR extended version.
198    [Arguments]  ${manifest_path}
199
200    # Description of argument(s):
201    # manifest_path  Path of the MANIFEST file
202    #                (e.g. "/tmp/images/abc123/MANIFEST").
203
204    ${version}= BMC Execute Command
205    ...  grep extended_version= ${manifest_path}
206    [return] ${version.split(",")}
207
208
209Code Update Test Teardown
210    [Documentation]  Do code update test case teardown.
211    # 1. Collect FFDC if test case failed.
212    # 2. Collect FFDC if test PASS but error log exists.
213
214    FFDC On Test Case Fail
215    Run Keyword If  '${TEST_STATUS}' == 'PASS'  Check Error And Collect FFDC
216