blob: d94f5aecb85b05ad46fb4b6f2e92b04e5952442f [file] [log] [blame]
Joy Onyerikwu268ed4e2018-02-07 12:33:39 -06001*** Settings ***
2Documentation Update internal storage devices uCode for solid-state drives
3... (SSDs) and hard disk drives (HDDs).
4# TEST REQUIREMENTS:
5# 1. Firmware file must be suffixed with an underscore, followed by the size
6# range it supports in terabytes, e.g: if IBM_5100_MJ06.bin supports 960 GB to
7# 1.92TB then change the file name to IBM_5100_MJ06_.96-1.92T.bin
8# 2. uCode files on OS should be in root/SSD_HDDucode and
9# supported extensions are ".lod" (for HDDs) and ".bin" (for SSDS).
10
11# TEST PARAMETERS:
12# OPENBMC_HOST The BMC host name or IP address.
13# OPENBMC_PASSWORD The BMC password.
14# OPENBMC_USERNAME The BMC user name.
15# OS_HOST The OS host name or IP address.
16# OS_USERNAME . The OS Host user name.
17# OS_PASSWORD . The OS Host password.
18
19Resource ../syslib/utils_os.robot
20Library ../lib/utils_files.py
21Library ../lib/firmware_utils.py
22Library ../lib/bmc_ssh_utils.py
23
24Test Setup Test Setup Execution
25Test Teardown FFDC On Test Case Fail
26
27
28*** Variables ***
29
30
31*** Test Cases ***
32
33Perform Update On Hard Disks
34 [Documentation] Perform update on hard disks.
35 [Tags] Perform_Update_On_Hard_Disks
36 Update Hard Disk ${sdb_info} sdb
37 Update Hard Disk ${sda_info} sda
38
39
40Reboot OS And Verify uCode Update
41 [Documentation] Reboot the OS and verify that the update was successful.
42 [Tags] Reboot_OS_And_Verify_uCode_Update
43 Host Reboot
44 &{sdb_post_update}= Get Hard Disk Info /dev/sdb
45 &{sda_post_update}= Get Hard Disk Info /dev/sda
46 Should Not Be Equal ${sda_info['firmware_revision']} ${sda_post_update['firmware_revision']}
47 ... msg=Failed sda uCode update - firmware revision values was unchanged.
48 Log sda uCode update complete.
49 Should Not Be Equal ${sdb_info['firmware_revision']} ${sdb_post_update['firmware_revision']}
50 ... msg=Failed sdb uCode update - firmware revision values was unchanged.
51 Log sdb uCode update complete.
52
53
54*** Keywords ***
55
56Test Setup Execution
57 [Documentation] Get info for hard disks and set suite variables.
58 &{sdb_info}= Get Hard Disk Info /dev/sdb
59 &{sda_info}= Get Hard Disk Info /dev/sda
60 Log ${sdb_info}
61 Log ${sda_info}
62 Set Suite Variable &{sdb_info}
63 Set Suite Variable &{sda_info}
64
65
66Update Hard Disk
67 [Documentation] Update hard disk.
68 [Arguments] ${hard_disk_info} ${device_name}
69
70 # Description of argument(s):
71 # hard_disk_info A dictionary of firwmare information for the device
72 # which can be obtained via a call to
73 # 'Get Hard Disk Info'.
74
75 # name The name of the hard disk, e.g: sdb, sda.
76
77 ${ucode_dir_name}= Set Variable SSD_HDDucode
78 ${ext}= Set Variable If
79 ... "${hard_disk_info['ro']}" == "0" bin
80 ... "${hard_disk_info['ro']}" == "1" lod
81 ${file_names} ${stderr} ${rc}= OS Execute Command
82 ... cd /${OS_USERNAME}/${ucode_dir_name}/ && ls *.${ext}
83 ${file_list}= Split String ${file_names}
84 ${ucode_file}= Find uCode File
85 ... ${file_list} ${hard_disk_info['size'][:-1]}
86 ${disk_update}= Catenate hdparm --yes-i-know-what-i-am-doing
87 ... --please-destroy-my-drive --fwdownload
88 ... /${OS_USERNAME}/${ucode_dir_name}/${ucode_file} /dev/${device_name}
89 OS Execute Command ${disk_update}
90
91Find uCode File
92 [Documentation] Return uCode file that corresponds to device size.
93 [Arguments] ${file_names} ${device_size}
94
95 # Description of argument(s):
96 # file_list A list of available ucode file.
97 # size The size of the hard disk.
98 # For example, given the following input:
99 #
100 # file_list:
101 # file_list[0]: IBM_5100_MJ06_.96-1.92T.bin
102 # file_list[1]: IBM_5100_MK06_2-3.84T.bin
103 # device_size: 1.8T
104 # This keyword will return "IBM_5100_MJ06_.96-1.92T.bin".
105
106 :FOR ${file_name} IN @{file_names}
107 \ ${range_string}= Remove String Using Regexp ${file_name} .*_ T.*
108 \ ${range}= Split String ${range_string} -
109 \ Return From Keyword If
110 ... "${device_size}" >= "${range[0]}" and "${device_size}" <= "${range[1]}"
111 ... ${file_name}
112
113 Fail msg=Failed to find uCode file in list: ${file_names}.
114 [Return] ${file_name}