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 21Library ../../lib/gen_robot_keyword.py 22Variables ../../data/variables.py 23Resource ../../lib/boot_utils.robot 24Resource code_update_utils.robot 25Resource ../../lib/code_update_utils.robot 26Resource ../../lib/openbmc_ffdc.robot 27Resource ../../lib/state_manager.robot 28Resource ../../lib/dump_utils.robot 29 30Test Teardown Code Update Test Teardown 31 32Force Tags Host_Code_Update 33 34*** Variables *** 35 36${QUIET} ${1} 37${IMAGE_FILE_PATH} ${EMPTY} 38${DELETE_OLD_PNOR_IMAGES} false 39${DELETE_OLD_GUARD_FILE} false 40${ALTERNATE_IMAGE_FILE_PATH} ${EMPTY} 41 42*** Test Cases *** 43 44REST Host Code Update 45 [Documentation] Do a PNOR code update by uploading image on BMC via REST. 46 # 1. Delete error logs if there is any. 47 # 1. Do code update. 48 # 2. Do post update the following: 49 # - Collect FFDC if error log exist and delete error logs. 50 [Tags] REST_Host_Code_Update 51 [Setup] Code Update Setup 52 53 Run Keyword And Ignore Error List Installed Images Host 54 55 Upload And Activate Image ${IMAGE_FILE_PATH} 56 OBMC Reboot (off) 57 58 59Post Update Boot To OS 60 [Documentation] Boot the host OS 61 [Tags] Post_Update_Boot_To_OS 62 [Setup] Start SOL Console Logging 63 [Teardown] Run Keywords Stop SOL Console Logging 64 ... AND Code Update Test Teardown 65 66 Run Keyword If '${PREV_TEST_STATUS}' == 'FAIL' 67 ... Fail Code update failed. No need to boot to OS. 68 Delete Error Logs 69 REST Power On 70 Verify Running Host Image ${IMAGE_FILE_PATH} 71 72 73REST Host Code Update While OS Is Running 74 [Documentation] Do a PNOR code update while the host is running. 75 [Tags] REST_Host_Code_Update_While_OS_Is_Running 76 [Teardown] Run Keywords REST Power Off stack_mode=skip 77 ... AND Code Update Test Teardown 78 79 Run Keyword If '${PREV_TEST_STATUS}' == 'FAIL' 80 ... Fail Cannot boot the OS. 81 82 REST Power On stack_mode=skip 83 Upload And Activate Image 84 ... ${ALTERNATE_IMAGE_FILE_PATH} skip_if_active=true 85 REST Power On stack_mode=normal 86 Verify Running Host Image ${ALTERNATE_IMAGE_FILE_PATH} 87 88Host Image Priority Attribute Test 89 [Documentation] Set "Priority" attribute. 90 [Tags] Host_Image_Priority_Attribute_Test 91 [Template] Temporarily Set PNOR Attribute 92 93 # Property Value 94 Priority ${0} 95 Priority ${1} 96 Priority ${127} 97 Priority ${255} 98 99 100Host Set Priority To Invalid Values 101 [Documentation] Attempt to set the priority of an image to an invalid 102 ... value and expect an error. 103 [Tags] Host_Set_Priority_To_Invalid_Values 104 [Template] Set Priority To Invalid Value And Expect Error 105 106 # Version Type Priority 107 ${VERSION_PURPOSE_HOST} ${-1} 108 ${VERSION_PURPOSE_HOST} ${256} 109 110 111Set RequestedActivation To None 112 [Documentation] Set the RequestedActivation of the image to None and 113 ... verify that it is in fact set to None. 114 [Tags] Set_RequestedActivation_To_None 115 116 ${software_objects}= Get Software Objects 117 Set Host Software Property @{software_objects}[0] RequestedActivation 118 ... ${REQUESTED_NONE} 119 ${software_properties}= Get Host Software Property @{software_objects}[0] 120 Should Be Equal As Strings &{software_properties}[RequestedActivation] 121 ... ${REQUESTED_NONE} 122 123 124Set RequestedActivation And Activation To Invalid Value 125 [Documentation] Set the RequestedActivation and Activation propreties of 126 ... the image to an invalid value and verify that it was not 127 ... changed. 128 [Template] Set Property To Invalid Value And Verify No Change 129 [Tags] Set_RequestedActivation_And_Activation_To_Invalid_Value 130 131 # Property Version Type 132 RequestedActivation ${VERSION_PURPOSE_HOST} 133 Activation ${VERSION_PURPOSE_HOST} 134 135 136Upload And Activate Multiple Host Images 137 [Documentation] Upload another PNOR image and verify that its state is 138 ... different from all others. 139 [Tags] Upload_And_Activate_Multiple_Host_Images 140 [Template] Activate Image And Verify No Duplicate Priorities 141 [Setup] Upload And Activate Multiple BMC Images Setup 142 143 # Image File Path Image Purpose 144 ${ALTERNATE_IMAGE_FILE_PATH} ${VERSION_PURPOSE_HOST} 145 146 147Set Same Priority For Multiple Host Images 148 [Documentation] Attempt to set the priority to be the same for two PNOR 149 ... images and verify that the priorities are not the same. 150 [Tags] Set_Same_Priority_For_Multiple_Host_Images 151 152 Run Keyword If '${PREV_TEST_STATUS}' == 'FAIL' 153 ... Fail Activation of alternate image failed. Cannot set priority. 154 Set Same Priority For Multiple Images ${VERSION_PURPOSE_HOST} 155 156 157Delete Host Image 158 [Documentation] Delete a PNOR image from the BMC and PNOR flash chip. 159 [Tags] Delete_Host_Image 160 [Setup] Initiate Host PowerOff 161 162 ${software_objects}= Get Software Objects 163 ... version_type=${VERSION_PURPOSE_HOST} 164 ${num_images}= Get Length ${software_objects} 165 Should Be True 0 < ${num_images} 166 ... msg=There are no PNOR images on the BMC to delete. 167 Delete Image And Verify @{software_objects}[0] ${VERSION_PURPOSE_HOST} 168 169 170Verify Host Update When Host Reboot During Activation In Progress 171 [Documentation] Attempt to reboot the host while an image is activating. 172 [Tags] Verify_Host_Update_When_Host_Reboot_During_Activation_In_Progress 173 174 Upload And Activate Image ${IMAGE_FILE_PATH} 175 REST Power On 176 Delete Error Logs 177 178 ${version_id}= Upload And Activate Image ${ALTERNATE_IMAGE_FILE_PATH} 179 ... wait=${0} 180 181 ${resp}= OpenBMC Get Request ${SOFTWARE_VERSION_URI}${version_id} 182 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK} 183 184 # Reboot Host during activation. 185 Host Reboot 186 187 Wait For Activation State Change ${version_id} ${ACTIVATING} 188 189 # New image priority should be 0. 190 ${new_host_properties}= 191 ... Get Host Software Property ${SOFTWARE_VERSION_URI}${version_id} 192 Should Be Equal As Integers ${new_host_properties["Priority"]} ${0} 193 194 # Reboot host to boot up with the new host image version. 195 Host Reboot 196 Verify Running Host Image ${ALTERNATE_IMAGE_FILE_PATH} 197 198 199*** Keywords *** 200 201Temporarily Set PNOR Attribute 202 [Documentation] Update the PNOR attribute value. 203 [Arguments] ${attribute_name} ${attribute_value} 204 205 # Description of argument(s): 206 # attribute_name Host software attribute name (e.g. "Priority"). 207 # attribute_value Value to be written. 208 209 ${image_ids}= Get Software Objects 210 ${init_host_properties}= Get Host Software Property ${image_ids[0]} 211 ${initial_priority}= Set Variable ${init_host_properties["Priority"]} 212 213 Set Host Software Property ${image_ids[0]} ${attribute_name} 214 ... ${attribute_value} 215 216 ${cur_host_properties}= Get Host Software Property ${image_ids[0]} 217 Should Be Equal As Integers ${cur_host_properties["Priority"]} 218 ... ${attribute_value} 219 220 # Revert to to initial value. 221 Set Host Software Property 222 ... ${image_ids[0]} ${attribute_name} ${initial_priority} 223 224 225Code Update Setup 226 [Documentation] Do code update test case setup. 227 # - Clean up all existing BMC dumps. 228 # - Clean up all currently install PNOR images. 229 230 Run Keyword And Ignore Error Smart Power Off 231 Run Key Delete All Dumps ignore=1 232 Run Key Delete Error Logs ignore=1 233 Run Keyword If 'true' == '${DELETE_OLD_PNOR_IMAGES}' 234 ... Delete All PNOR Images 235 Run Keyword If 'true' == '${DELETE_OLD_GUARD_FILE}' BMC Execute Command 236 ... rm -f /var/lib/phosphor-software-manager/pnor/prsv/GUARD 237 238 239Upload And Activate Multiple BMC Images Setup 240 [Documentation] Check that the ALTERNATE_FILE_PATH variable is set. 241 242 Should Not Be Empty ${ALTERNATE_IMAGE_FILE_PATH} 243 Delete All PNOR Images 244 Upload And Activate Image ${IMAGE_FILE_PATH} skip_if_active=true 245 246Get PNOR Extended Version 247 [Documentation] Return the PNOR extended version. 248 [Arguments] ${manifest_path} 249 250 # Description of argument(s): 251 # manifest_path Path of the MANIFEST file 252 # (e.g. "/tmp/images/abc123/MANIFEST"). 253 254 ${version}= BMC Execute Command 255 ... grep extended_version= ${manifest_path} 256 [return] ${version.split(",")} 257 258 259Code Update Test Teardown 260 [Documentation] Do code update test case teardown. 261 # 1. Collect FFDC if test case failed. 262 # 2. Collect FFDC if test PASS but error log exists. 263 264 FFDC On Test Case Fail 265 Run Keyword If '${TEST_STATUS}' == 'PASS' Check Error And Collect FFDC 266