1*** Settings ***
2
3Documentation    Module to test PLDM BIOS attribute types.
4
5Library          Collections
6Library          String
7Library          ../lib/pldm_utils.py
8Variables        ../data/pldm_variables.py
9Resource         ../lib/openbmc_ffdc.robot
10
11Test Setup       Printn
12Test Teardown    FFDC On Test Case Fail
13Suite Setup      PLDM BIOS Attribute Suite Setup
14Suite Teardown   PLDM BIOS Attribute Suite Cleanup
15
16
17*** Variables ***
18
19${bios_original_data}       ${EMPTY}
20${attr_table_data}     ${EMPTY}
21
22
23*** Test Cases ***
24
25Verify Get BIOS Attribute With Invalid Attribute Name
26
27    [Documentation]  Verify get BIOS attribute with invalid attribute name.
28    [Tags]  Verify_Get_BIOS_Attribute_With_Invalid_Attribute_Name
29
30    ${random_attr}=  Generate Random String  8  [LETTERS][NUMBERS]
31    ${pldm_output}=  pldmtool  bios GetBIOSAttributeCurrentValueByHandle -a ${random_attr}
32
33    # Example output:
34    #
35    # pldmtool bios GetBIOSAttributeCurrentValueByHandle -a hjkhkj
36    # Can not find the attribute hjkhkj
37    #
38
39    Should Contain  ${pldm_output}  Can not find the attribute
40
41
42Verify Set BIOS Attribute With Invalid Attribute Name
43
44    [Documentation]  Verify set BIOS attribute with invalid attribute name.
45    [Tags]  Verify_Set_BIOS_Attribute_With_Invalid_Attribute_Name
46
47    ${random_str}=  Generate Random String  8  [LETTERS][NUMBERS]
48    ${pldm_output}=  pldmtool  bios SetBIOSAttributeCurrentValue -a ${random_str} -d ${random_str}
49
50    # Example output:
51    #
52    # pldmtool bios SetBIOSAttributeCurrentValue -a hjkhkj -d 0
53    # Could not find attribute :hjkhkj
54    #
55
56    Should Contain  ${pldm_output}  Could not find attribute
57
58
59Verify Set Invalid Optional Value For BIOS Enumeration Attribute Type
60
61    [Documentation]  Verify set invalid optional value for BIOS enumeration attribute type.
62    [Tags]  Verify_Set_Invalid_Optional_Value_For_BIOS_Enumeration_Attribute_Type
63
64    ${attr_val_data}=  GetBIOSEnumAttributeOptionalValues  ${attr_table_data}
65    @{attr_handles}=  Get Dictionary Keys  ${attr_val_data}
66    ${enum_attr}=  Evaluate  random.choice(${attr_handles})  modules=random
67
68    # Example output:
69    #
70    # pldmtool bios SetBIOSAttributeCurrentValue -a pvm_os_boot_side -d hhhhhj
71    # Set Attribute Error: It's not a possible value
72    #
73
74    ${pldm_output}=  pldmtool  bios SetBIOSAttributeCurrentValue -a ${enum_attr} -d 0
75    Should Contain  ${pldm_output}  Set Attribute Error
76
77
78Verify Set Out Of Range Integer Value For BIOS Integer Attribute Type
79
80    [Documentation]  Verify set out of range integer value for BIOS integer attribute type.
81    [Tags]  Verify_Set_Out_Of_Range_Integer_Value_For_BIOS_Integer_Attribute_Type
82
83    ${attr_val_data}=  GetBIOSStrAndIntAttributeHandles  BIOSInteger  ${attr_table_data}
84    @{attr_handles}=  Get Dictionary Keys  ${attr_val_data}
85    ${int_attr}=  Evaluate  random.choice(${attr_handles})  modules=random
86    ${count}=  Evaluate  ${attr_val_data['${int_attr}']["UpperBound"]} + 5
87
88    # Example output:
89    #
90    # pldmtool bios SetBIOSAttributeCurrentValue -a vmi_if_count -d 12
91    # Response Message Error: rc=0,cc=2
92    #
93
94    ${pldm_output}=  pldmtool  bios SetBIOSAttributeCurrentValue -a ${int_attr} -d ${count}
95    Should Contain  ${pldm_output}  Response Message Error
96
97
98Verify Set Out Of Range String Value For BIOS String Attribute Type
99
100    [Documentation]  Verify set out of range string value for BIOS string attribute type.
101    [Tags]  Verify_Set_Out_Of_Range_String_Value_For_BIOS_String_Attribute_Type
102
103    ${attr_val_data}=  GetBIOSStrAndIntAttributeHandles  BIOSString  ${attr_table_data}
104    @{attr_handles}=  Get Dictionary Keys  ${attr_val_data}
105    ${str_attr}=  Evaluate  random.choice(${attr_handles})  modules=random
106    ${count}=  Evaluate  ${attr_val_data['${str_attr}']["MaximumStringLength"]} + 5
107    ${random_value}=  Generate Random String  ${count}  [LETTERS][NUMBERS]
108
109    # Example output:
110    #
111    # pldmtool bios SetBIOSAttributeCurrentValue -a vmi_if0_ipv4_ipaddr -d 1234566788999
112    # Response Message Error: rc=0,cc=2
113    #
114
115    ${pldm_output}=  pldmtool  bios SetBIOSAttributeCurrentValue -a ${str_attr} -d ${random_value}
116    Should Contain  ${pldm_output}  Response Message Error
117
118
119Verify Set BIOS String Attribute Type
120
121    [Documentation]  Verify set BIOS string attribute type for various BIOS
122    ...              attribute handle with random values with in the range.
123    [Tags]  Verify_Set_BIOS_String_Attribute_Type
124
125    ${attr_val_data}=  GetBIOSStrAndIntAttributeHandles  BIOSString  ${attr_table_data}
126
127    # Example output:
128    #
129    # pldmtool bios SetBIOSAttributeCurrentValue -a vmi_hostname -d BMC
130    # {
131    #     "Response": "SUCCESS"
132    # }
133
134    @{attr_handles}=  Get Dictionary Keys  ${attr_val_data}
135    FOR  ${i}  IN  @{attr_handles}
136        ${random_value}=  GetRandomBIOSIntAndStrValues  ${i}  ${attr_val_data['${i}']["MaximumStringLength"]}
137        ${attr_val_list}=  Create List
138        Append To List  ${attr_val_list}  ${random_value}
139        Validate Set BIOS Attributes With Optional Values  ${i}  @{attr_val_list}
140    END
141
142
143Verify Set BIOS Integer Attribute Type
144
145    [Documentation]  Verify set BIOS integer attribute type for various BIOS
146    ...              attribute handle with random values with in the range.
147    [Tags]  Verify_Set_BIOS_Integer_Attribute_Type
148
149    ${attr_val_data}=  GetBIOSStrAndIntAttributeHandles  BIOSInteger  ${attr_table_data}
150
151    # Example output:
152    #
153    # pldmtool bios SetBIOSAttributeCurrentValue -a vmi_if_count -d 1
154    # {
155    #     "Response": "SUCCESS"
156    # }
157
158    @{attr_handles}=  Get Dictionary Keys  ${attr_val_data}
159
160    FOR  ${i}  IN  @{attr_handles}
161        ${random_value}=  GetRandomBIOSIntAndStrValues  ${i}  ${attr_val_data['${i}']["UpperBound"]}
162        ${attr_val_list}=  Create List
163        Append To List  ${attr_val_list}  ${random_value}
164        Validate Set BIOS Attributes With Optional Values  ${i}  @{attr_val_list}
165    END
166
167
168Verify Set BIOS Enumeration Attribute Type
169
170    [Documentation]  Verify set BIOS enumeration attribute type for various BIOS
171    ...              attribute handle with random values with in the range of
172    ...              default optional values.
173    [Tags]  Verify_Set_BIOS_Enumeration_Attribute_Type
174
175    ${attr_val_data}=  GetBIOSEnumAttributeOptionalValues  ${attr_table_data}
176
177    # Example output:
178    #
179    # pldmtool bios SetBIOSAttributeCurrentValue -a pvm_default_os_type -d AIX
180    # {
181    #     "Response": "SUCCESS"
182    # }
183
184    @{attr_handles}=  Get Dictionary Keys  ${attr_val_data}
185    FOR  ${i}  IN  @{attr_handles}
186        @{attr_val_list}=  Set Variable  ${attr_val_data}[${i}]
187        Validate Set BIOS Attributes With Optional Values  ${i}  @{attr_val_list}
188    END
189
190
191Verify Restore BIOS Attribute Values
192
193    [Documentation]  Restore all BIOS attribute values with its default values and verify.
194    [Tags]  Verify_Restore_BIOS_Attribute_Values
195
196    ${bios_default_data}=  GetBIOSAttrDefaultValues  ${attr_table_data}
197    Validate Set All BIOS Attributes Values  ${bios_default_data}
198
199
200*** Keywords ***
201
202PLDM BIOS Attribute Suite Setup
203
204    [Documentation]  Perform PLDM BIOS attribute suite setup.
205
206    ${pldm_output}=  Pldmtool  bios GetBIOSTable --type AttributeTable
207    Set Global Variable  ${attr_table_data}  ${pldm_output}
208
209    ${data}=  GetBIOSAttrOriginalValues  ${pldm_output}
210    Set Global Variable  ${bios_original_data}  ${data}
211
212
213PLDM BIOS Attribute Suite Cleanup
214
215    [Documentation]  Perform PLDM BIOS attribute suite cleanup.
216
217    Validate Set All BIOS Attributes Values  ${bios_original_data}
218
219
220Validate Set BIOS Attributes With Optional Values
221
222    [Documentation]  Set BIOS attribute with the available attribute handle
223    ...              values and revert back to original attribute handle value.
224    [Arguments]      ${attr_handle}  @{attr_val_list}
225
226    # Description of argument(s):
227    # attr_handle    BIOS attribute handle (e.g. pvm_system_power_off_policy).
228    # attr_val_list  List of the attribute values for the given attribute handle
229    #                (e.g. ['"Power Off"', '"Stay On"', 'Automatic']).
230
231    FOR  ${j}  IN  @{attr_val_list}
232        ${pldm_resp}=  pldmtool  bios SetBIOSAttributeCurrentValue -a ${attr_handle} -d ${j}
233        Valid Value  pldm_resp['Response']  ['SUCCESS']
234
235        # Compare BIOS attribute values after set operation.
236        ${output}=  pldmtool  bios GetBIOSAttributeCurrentValueByHandle -a ${attr_handle}
237        ${value1}=  Convert To String  ${output["CurrentValue"]}
238        ${value2}=  Convert To String  ${j}
239        ${value2}=  Replace String  ${value2}  "  ${EMPTY}
240        Should Be Equal  ${value1.strip()}  ${value2.strip()}
241
242    END
243
244
245Validate Set All BIOS Attributes Values
246
247    [Documentation]  Validate Set BIOS Attributes Values.
248    [Arguments]      ${bios_attr_data}
249
250    # Description of argument(s):
251    # bios_attr_data  Dictionary containing BIOS attribute name and values.
252
253    @{keys}=  Get Dictionary Keys  ${bios_attr_data}
254
255    FOR  ${key}  IN  @{keys}
256        ${pldm_resp}=  pldmtool  bios SetBIOSAttributeCurrentValue -a ${key} -d ${bios_attr_data['${key}']}
257        Valid Value  pldm_resp['Response']  ['SUCCESS']
258
259        # Compare BIOS attribute values after set operation.
260        ${output}=  pldmtool  bios GetBIOSAttributeCurrentValueByHandle -a ${key}
261        ${value1}=  Convert To String  ${output["CurrentValue"]}
262        ${value2}=  Convert To String  ${bios_attr_data['${key}']}
263        ${value2}=  Replace String  ${value2}  "  ${EMPTY}
264        Should Be Equal  ${value1.strip()}  ${value2.strip()}
265    END
266