1*** Settings *** 2Documentation Module to test In band firmware update. 3 4Resource ../../lib/ipmi_client.robot 5Resource ../../lib/openbmc_ffdc.robot 6Resource ../../lib/connection_client.robot 7Resource ../../lib/code_update_utils.robot 8 9Suite Setup Suite Setup Execution 10 11Test Tags IPMI_Flash 12 13*** Variables *** 14 15${image-bios} image-bios 16${image-bios-sig} image-bios.sig 17${image-bmc} image-bmc 18${image-bmc-sig} image-bmc.sig 19${BAD_IMG} tmp.bin 20${BAD_SIG} tmp.sig 21${lpcshm_address} ${0} 22 23*** Test Cases *** 24 25Test BIOS Firmware Update 26 [Documentation] Test BIOS firmware update over IPMI. 27 [Tags] Test_BIOS_Firmware_Update 28 29 Wait For Host To Ping ${OS_HOST} 3 mins 30 31 Get LPC SHM Address 32 Update BIOS Firmware ${IMAGE_HOST_FILE_PATH_0} 33 Verify BIOS Version ${IMAGE_HOST_FILE_PATH_0} 34 BMC Execute Command 35 ... systemctl restart phosphor-ipmi-host.service 36 Sleep 10s 37 Get LPC SHM Address 38 Update BIOS Firmware ${IMAGE_HOST_FILE_PATH_1} 39 Verify BIOS Version ${IMAGE_HOST_FILE_PATH_1} 40 BMC Execute Command 41 ... systemctl restart phosphor-ipmi-host.service 42 Sleep 10s 43 44Test Invalid BIOS Firmware Update 45 [Documentation] Test Invalid BIOS firmware update over IPMI. 46 [Tags] Test_Invalid_BIOS_Firmware_Update 47 48 Run Keyword Wait For Host To Ping ${OS_HOST} 3 mins 49 Get LPC SHM Address 50 51 ${cmd}= Catenate ${HOST_WORK_DIR}/burn_my_bmc --command update --interface ipmilpc 52 ... --image ${HOST_WORK_DIR}/${BAD_IMG} --sig ${HOST_WORK_DIR}/${BAD_SIG} --type bios 53 ... --address 0x${lpcshmaddress} --length 0xFFC 54 55 ${output} ${stderr} ${rc}= OS Execute Command ${cmd} ignore_err=1 56 Should Contain ${stderr} Verification failed 57 58Test BMC Firmware Update 59 [Documentation] Test BMC firmware update over IPMI. 60 [Tags] Test_BMC_Firmware_Update 61 62 Run Keyword Wait For Host To Ping ${OS_HOST} 3 mins 63 Get LPC SHM Address 64 Update BMC Firmware ${IMAGE_BMC_FILE_PATH_0} 65 Verify BMC Version ${IMAGE_BMC_FILE_PATH_0} 66 Sleep 10s 67 Update BMC Firmware ${IMAGE_BMC_FILE_PATH_1} 68 Verify BMC Version ${IMAGE_BMC_FILE_PATH_1} 69 70Test Invalid BMC Firmware Update 71 [Documentation] Test Invalid BMC firmware update over IPMI. 72 [Tags] Test_Invalid_BMC_Firmware_Update 73 74 Run Keyword Wait For Host To Ping ${OS_HOST} 3 mins 75 Get LPC SHM Address 76 77 ${cmd}= Catenate ${HOST_WORK_DIR}/burn_my_bmc --command update --interface ipmilpc 78 ... --image ${HOST_WORK_DIR}/${BAD_IMG} --sig ${HOST_WORK_DIR}/${BAD_SIG} --type image 79 ... --address 0x${lpcshmaddress} --length 0xFFC 80 81 ${output} ${stderr} ${rc}= OS Execute Command ${cmd} ignore_err=1 82 Should Contain ${stderr} Verification failed 83 84 85*** Keywords *** 86 87Suite Setup Execution 88 [Documentation] Suite Setup Execution. 89 90 ${os_state}= Get Host State Attribute OperatingSystemState 91 Rprint Vars os_state 92 IF '${OS_BOOT_COMPLETE}' != '${os_state}' Redfish Power On 93 94 # generate bad image for test 95 ${cmd}= Catenate dd if=/dev/urandom of=${HOST_WORK_DIR}/${BAD_IMG} bs=1K count=4 96 OS Execute Command ${cmd} ignore_err=1 97 ${cmd}= Catenate dd if=/dev/urandom of=${HOST_WORK_DIR}/${BAD_SIG} bs=1 count=128 98 OS Execute Command ${cmd} ignore_err=1 99 100 101Get LPC SHM Address 102 [Documentation] Get Mapped Address of LPC hare Memory. 103 104 # select SHM logic device 105 OS Execute Command outb 0x4e 0x07 106 OS Execute Command outb 0x4f 0x0f 107 108 OS Execute Command outb 0x4e 0xf4 109 ${output} ${stderr} ${rc}= OS Execute Command inb 0x4f 110 ${output}= Evaluate ${output} + 4 111 ${b0}= Convert To Hex ${output} length=2 112 113 OS Execute Command outb 0x4e 0xf5 114 ${output} ${stderr} ${rc}= OS Execute Command inb 0x4f 115 ${b1}= Convert To Hex ${output} length=2 116 117 OS Execute Command outb 0x4e 0xf6 118 ${output} ${stderr} ${rc}= OS Execute Command inb 0x4f 119 ${b2}= Convert To Hex ${output} length=2 120 121 OS Execute Command outb 0x4e 0xf7 122 ${output} ${stderr} ${rc}= OS Execute Command inb 0x4f 123 ${b3}= Convert To Hex ${output} length=2 124 125 Set Global Variable ${lpcshm_address} ${b3}${b2}${b1}${b0} 126 Rprint Vars lpcshm_address 127 128BIOS Update Status Should Be 129 [Documentation] Check the Update Process is Activating. 130 [Arguments] ${state} 131 132 # Description of argument(s): 133 # state The state of update process. 134 135 ${cmd}= Catenate systemctl show --property=ActiveState --property=LoadState 136 ... --property=Result phosphor-ipmi-flash-bios-update.service 137 ${output} ${stderr} ${rc}= BMC Execute Command ${cmd} 138 139 Should Contain ${output} ${state} case_insensitive=True 140 141Verify BIOS Version 142 [Documentation] Verify BIOS Version. 143 [Arguments] ${image_file_path} 144 145 # Description of argument(s): 146 # image_file_path Path to the image tarball. 147 148 ${image_version}= Get Version Tar ${image_file_path} 149 Rprint Vars image_version 150 151 ${BIOS_Version}= Get BIOS Version 152 Rprint Vars BIOS_Version 153 Should Be Equal ${BIOS_Version} ${image_version} 154 155Verify BMC Version 156 [Documentation] Verify that the version on the BMC is the same as the 157 ... version in the given image via Redfish. 158 [Arguments] ${image_file_path} 159 160 # Description of argument(s): 161 # image_file_path Path to the image tarball. 162 163 # Extract the version from the image tarball on our local system. 164 ${image_version}= Get Version Tar ${image_file_path} 165 Rprint Vars image_version 166 Redfish.Login 167 ${bmc_version}= Redfish Get BMC Version 168 Rprint Vars bmc_version 169 170 Valid Value bmc_version valid_values=['${image_version}'] 171 172Update BIOS Firmware 173 [Documentation] Update BIOS Firmware. 174 [Arguments] ${image_file_path} 175 176 # Description of argument(s): 177 # image_file_path Path to the image tarball. 178 179 OperatingSystem.File Should Exist ${image_file_path} 180 181 Run Keyword Wait For Host To Ping ${OS_HOST} 3 mins 182 183 scp.Open connection ${OS_HOST} username=${OS_USERNAME} 184 ... password=${OS_PASSWORD} 185 scp.Put File ${image_file_path} ${HOST_WORK_DIR}/${image_file_path} 186 187 ${cmd}= Catenate tar -xf ${HOST_WORK_DIR}/${image_file_path} -C ${HOST_WORK_DIR} 188 ${output} ${stderr} ${rc}= OS Execute Command ${cmd} 189 190 ${cmd}= Catenate ${HOST_WORK_DIR}/burn_my_bmc --command update --interface ipmilpc 191 ... --image ${HOST_WORK_DIR}/${image-bios} --sig ${HOST_WORK_DIR}/${image-bios-sig} --type bios 192 ... --address 0x${lpcshm_address} --length 0xFFC 193 194 OS Execute Command ${cmd} fork=1 195 196 Wait Until Keyword Succeeds 5 mins 10 secs 197 ... BIOS Update Status Should Be ActiveState=activating 198 199 Wait Until Keyword Succeeds 20 mins 30 secs 200 ... BIOS Update Status Should Be ActiveState=inactive 201 202 ${cmd}= Catenate systemctl show --property=Result 203 ... phosphor-ipmi-flash-bios-update.service 204 ${output} ${stderr} ${rc}= BMC Execute Command ${cmd} 205 Should Contain ${output} Result=success 206 207 Run Keyword Wait For Host To Ping ${OS_HOST} 5 mins 208 209Update BMC Firmware 210 [Documentation] Update BIOS Firmware. 211 [Arguments] ${image_file_path} 212 213 # Description of argument(s): 214 # image_file_path Path to the image tarball. 215 216 OperatingSystem.File Should Exist ${image_file_path} 217 218 Run Keyword Wait For Host To Ping ${OS_HOST} 3 mins 219 220 scp.Open connection ${OS_HOST} username=${OS_USERNAME} 221 ... password=${OS_PASSWORD} 222 scp.Put File ${image_file_path} ${HOST_WORK_DIR}/${image_file_path} 223 224 ${cmd}= Catenate tar -xf ${HOST_WORK_DIR}/${image_file_path} -C ${HOST_WORK_DIR} 225 ${output} ${stderr} ${rc}= OS Execute Command ${cmd} 226 227 ${cmd}= Catenate ${HOST_WORK_DIR}/burn_my_bmc --command update --interface ipmilpc 228 ... --image ${HOST_WORK_DIR}/${image-bmc} --sig ${HOST_WORK_DIR}/${image-bmc-sig} --type image 229 ... --address 0x${lpcshm_address} --length 0xFFC --ignore-update 230 231 ${output} ${stderr} ${rc}= OS Execute Command ${cmd} ignore_err=1 232 Should Not Contain ${stderr} Exception received 233 234 Sleep 10s 235 Check If BMC Is Up 20 min 20 sec 236 Wait For BMC Ready 237