blob: ee4ab4a3aa54da2ba329b322ae90d6b6e7fa6e7a [file] [log] [blame]
ganesanb5502e3e2022-12-13 11:07:43 +00001*** Settings ***
2Documentation Module to test dcmi management controller functionality.
3Resource ../../lib/ipmi_client.robot
4Resource ../../lib/openbmc_ffdc.robot
5Resource ../../lib/bmc_network_utils.robot
6Resource ../../lib/boot_utils.robot
7Resource ../../lib/bmc_redfish_utils.robot
8Variables ../../data/ipmi_raw_cmd_table.py
9Variables ../../data/dcmi_raw_cmd_table.py
10Variables ../../data/ipmi_variable.py
11Library ../../lib/ipmi_utils.py
12Library ../../lib/utilities.py
13Library ../../lib/utils.py
14Library JSONLibrary
15
16*** Variables ***
17${hostname_file_path} /etc/hostname
18
19*** Test Cases ***
20Validate IPMI Response Length
21 [Documentation] Check ipmi response length.
22 [Tags] Validate_IPMI_Response_Length
23
24 ${rsp}= Get DCMI Management Controller Identifier String
25 @{ipmi_cmd_rsp_list}= Split String ${rsp}
26 # ipmi_cmd_rsp_list = ["00", "0a", "00", "01", "02", "03", "04", "05", "06", "07", "08", "09"]
27 # rsp_length = 10
28 # string_length = 0a
29 ${rsp_length}= Get Length ${ipmi_cmd_rsp_list[2:]}
30 ${string_length}= Get Response Length In Hex ${rsp_length}
31
32 # ipmi_cmd_rsp_list[1] = 0a
33 # string_length = 0a
34 # the above condition is equal.
35 # suppose if string_length and ipmi_cmd_rsp_lst[1] not matches then it will fails.
36 Should Be Equal As Strings ${ipmi_cmd_rsp_list[1]} ${string_length}
37 ... msg=Id string length in ipmi response is showing wrongly
38
39Test Hostname is Same With Management Controller Identifier String
40 [Documentation] Check hostname was verified with get management controller identfier string.
41 [Tags] Validate_Hostname_With_Get_DCMI_MCID_String
42
43 ${rsp}= Get DCMI Management Controller Identifier String
44 @{ipmi_cmd_rsp_list}= Split String ${rsp}
45 ${bmc_console_hostname_bytes_list}= Get Hostname From BMC Console
46
47 Lists Should Be Equal ${ipmi_cmd_rsp_list[2:]} ${bmc_console_hostname_bytes_list}
48 ... msg=response get from dcmi get mcid cmd and hostname from "cat /etc/os-release" cmd is not same.
49
50Test Get Management Controller Identifier String
51 [Documentation] Validate set and get mcid string.
52 [Tags] Set_And_Get_Management_Controller_Identifier_String
53 [Setup] Get Default MCID
54 [Teardown] Set Default MCID
55
56 # Set Hostname via DCMI Management Controller Identifier String Command.
57 ${cmd_rsp}= Set DCMI Management Controller Identifier String
58 @{cmd_rsp_list}= Split String ${cmd_rsp}
59 Run Keyword And Continue On Failure
60 ... Valid Value cmd_rsp_list[1] valid_values=['${number_of_bytes_to_write}']
61
62 ${rsp}= Get DCMI Management Controller Identifier String
63 @{ipmi_cmd_rsp_list}= Split String ${rsp}
64
65 # Verify number of bytes that was set and id string length are same.
66 ${string_length}= Get Response Length In Hex ${random_int}
67 Run Keyword And Continue On Failure
68 ... Should Be Equal As Strings ${ipmi_cmd_rsp_list[1]} ${string_length}
69 ... msg=Number of bytes that was set and id string length are not same.
70
71 # Verify ID String Length and data.
72 # ipmi_cmd_rsp_list = ["00", "0a", "00", "01", "02", "03", "04", "05", "06", "07", "08", "09"]
73 # rsp_length = 10
74 # string_length = 0a
75 # ipmi_cmd_rsp_list[1] = 0a
76 # ipmi_cmd_rsp_list[1] is equal to string_length
77 # the above condition is equal.
78 # suppose if string_length and ipmi_cmd_rsp_lst[1] not matches then it will fails.
79 ${rsp_length}= Get Length ${ipmi_cmd_rsp_list[2:]}
80 ${string_length}= Get Response Length In Hex ${rsp_length}
81 Run Keyword And Continue On Failure
82 ... Should Be Equal As Strings ${ipmi_cmd_rsp_list[1]} ${string_length}
83 ... msg=Id string length in ipmi response is showing wrongly
84
85 # Verify get dcmi management controller identifier string command response
86 # and the bytes used for Set DCMI MCID string.
87 ${set_dcmi_mcid_cmd}=
88 ... convert_prefix_hex_list_to_non_prefix_hex_list ${string_hex_list}
89 Run Keyword And Continue On Failure
90 ... Lists Should Be Equal ${ipmi_cmd_rsp_list[2:]} ${set_dcmi_mcid_cmd}
91 ... msg=Bytes given in dcmi set mcid command and string bytes got from dcmi get mcid command are not same
92
93 # Verify Hostname of cat /etc/hostname and get dcmi management controller identifier string command.
94 ${bytes_list}= Get Hostname From BMC Console
95 Run Keyword And Continue On Failure
96 ... Lists Should Be Equal ${ipmi_cmd_rsp_list[2:]} ${bytes_list}
97 ... msg=Bytes got from dcmi get mcid command and hostname from "cat /etc/os-release" command is not same.
98
99*** Keywords ***
100Get Default MCID
101 [Documentation] Get default mcid.
102
103 ${default_mcid}= Get DCMI Management Controller Identifier String
104 Set Test Variable ${default_mcid}
105
106Set Default MCID
107 [Documentation] Set default mcid.
108
109 @{ipmi_cmd_rsp_list}= Split String ${default_mcid}
110 ${number_of_bytes_to_write}= Set Variable ${ipmi_cmd_rsp_list[1]}
111 ${bytes_in_int}= Convert To Integer ${number_of_bytes_to_write} 16
112 ${bytes_to_write}= Evaluate ${bytes_in_int} + 1
113 ${no_of_bytes_to_write}= Get Response Length In Hex ${bytes_to_write}
114 @{tmp_lst}= Create List
115 FOR ${bytes} IN @{ipmi_cmd_rsp_list[2:]}
116 Append To List ${tmp_lst} 0x${bytes}
117 END
118 ${default_hex}= Catenate @{tmp_lst}
119
120 ${cmd}= Catenate ${DCMI_RAW_CMD['DCMI']['MANAGEMENT_CONTROLLER_IDENTIFIER_STRING']['SET']}
121 ... 0x${no_of_bytes_to_write} ${default_hex}
122 Run External IPMI Raw Command ${cmd}
123
124Get DCMI Management Controller Identifier String
125 [Documentation] Get DCMI MCID String.
126
127 ${mcid_get_cmd}= Catenate ${DCMI_RAW_CMD['DCMI']['MANAGEMENT_CONTROLLER_IDENTIFIER_STRING']['GET']}
128 ${resp}= Run External IPMI Raw Command ${mcid_get_cmd}
129
130 [Return] ${resp}
131
132Set DCMI Management Controller Identifier String
133 [Documentation] Set DCMI MCID String.
134
135 # 16 bytes maximum as per dcmi spec
136 ${random_int}= Evaluate random.randint(1, 15) modules=random
137 ${random_string}= Generate Random String ${random_int}
138 ${string_hex_list}= convert_name_into_bytes_with_prefix ${random_string}
139 ${random_hex}= Catenate @{string_hex_list}
140 ${number_of_random_string}= Evaluate ${random_int} + 1
141 ${number_of_bytes_to_write}= Get Response Length In Hex ${number_of_random_string}
142
143 ${mcid_set_cmd}= Catenate ${DCMI_RAW_CMD['DCMI']['MANAGEMENT_CONTROLLER_IDENTIFIER_STRING']['SET']}
144 ... 0x${number_of_bytes_to_write} ${random_hex} 0x00
145 ${resp}= Run External IPMI Raw Command ${mcid_set_cmd}
146
147 Set Test Variable ${string_hex_list}
148 Set Test Variable ${random_int}
149 Set Test Variable ${number_of_bytes_to_write}
150
151 [Return] ${resp}
152
153Get Hostname From BMC Console
154 [Documentation] Get hostname.
155
156 ${cmd}= Catenate cat ${hostname_file_path}
157 ${bmc_hostname}= BMC Execute Command ${cmd}
158 ${name}= Convert To List ${bmc_hostname}
159 ${hostname_bytes}= convert_name_into_bytes_without_prefix ${name[0]}
160
161 [Return] ${hostname_bytes}
162
163Get Response Length In Hex
164 [Documentation] Get response length in hex.
165 [Arguments] ${resp_length}
166
167 ${length}= Convert To Hex ${resp_length}
168 ${length_1}= Get Length ${length}
169 ${length_2}= Set Variable IF
170 ... '${length_1}' == '1' 0${length}
171 ... '${length_1}' != '1' ${length}
172 ${resp_length_3}= Convert To Lower Case ${length_2}
173
174 [Return] ${resp_length_3}