1*** Settings ***
2
3Documentation    Module to test PLDM BIOS commands.
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 Teardown   PLDM BIOS Suite Cleanup
14
15*** Test Cases ***
16
17Verify GetDateTime
18    [Documentation]  Verify host date & time.
19    [Tags]  Verify_GetDateTime
20
21    # Example output:
22    # {
23    #     "Response": "2020-11-07 07:10:10"
24    # }
25
26    ${pldm_output}=  Pldmtool  bios GetDateTime
27    @{date_time}=  Split String  ${pldm_output['Response']}  ${SPACE}
28    @{time}=  Split String  ${date_time}[1]  :
29
30    # verify date & time.
31    ${utc}=  Get Current Date  UTC  exclude_millis=True
32    @{current_dmy}=  Split String  ${utc}  ${SPACE}
33    @{current_time}=  Split String  ${current_dmy[1]}  :
34
35    # Example output:
36    # 2020-11-25 07:34:30
37
38    Should Contain  ${current_dmy[0]}  ${date_time[0]}
39
40Verify SetDateTime
41    [Documentation]  Verify set date & time for the host.
42    [Tags]  Verify_SetDateTime
43
44    # Example output:
45    # {
46    #     "Response": "SUCCESS"
47    # }
48
49    ${current_date_time}=  Get Current Date  UTC  exclude_millis=True
50    # Example output:
51    # 2020-11-25 07:34:30
52
53    ${date}=  Add Time To Date  ${current_date_time}  400 days  exclude_millis=True
54    ${upgrade_date}=  Evaluate  re.sub(r'-* *:*', "", '${date}')  modules=re
55
56    ${time}=  Add Time To Date  ${current_date_time}  01:01:00  exclude_millis=True
57    ${upgrade_time}=  Evaluate  re.sub(r'-* *:*', "", '${time}')  modules=re
58
59    # Set date.
60    ${cmd_set_date}=  Evaluate  $CMD_SETDATETIME % '${upgrade_date}'
61    ${pldm_output}=  Pldmtool  ${cmd_set_date}
62    Valid Value  pldm_output['Response']  ['SUCCESS']
63
64    # Set time.
65    ${cmd_set_time}=  Evaluate  $CMD_SETDATETIME % '${upgrade_time}'
66    ${pldm_output}=  Pldmtool  ${cmd_set_time}
67
68Verify GetBIOSTable For StringTable
69    [Documentation]  Verify GetBIOSTable for table type string table.
70    [Tags]  Verify_GetBIOSTable_For_StringTable
71
72    # Example pldm_output:
73    # [biosstringhandle]:                             BIOSString
74    # [0]:                                            Allowed
75    # [1]:                                            Disabled
76    # [2]:                                            Enabled
77    # [3]:                                            Not Allowed
78    # [4]:                                            Perm
79    # [5]:                                            Temp
80    # [6]:                                            pvm_fw_boot_side
81    # [7]:                                            pvm_inband_code_update
82    # [8]:                                            pvm_os_boot_side
83    # [9]:                                            pvm_pcie_error_inject
84    # [10]:                                           pvm_surveillance
85    # [11]:                                           pvm_system_name
86    # [12]:                                           vmi_if_count
87
88    ${pldm_output}=  Pldmtool  bios GetBIOSTable --type StringTable
89    @{keys}=  Get Dictionary Keys  ${pldm_output}
90    ${string_list}=  Create List
91    FOR  ${key}  IN  @{keys}
92        Append To List  ${string_list}  ${pldm_output['${key}']}
93    END
94    Valid List  string_list  required_values=${RESPONSE_LIST_GETBIOSTABLE_ATTRTABLE}
95
96
97Verify GetBIOSTable For AttributeTable
98    [Documentation]  Verify if attribute table content exist for
99    ...            GetBIOSTable with table type attribute table.
100    [Tags]  Verify_GetBIOSTable_For_AttributeTable
101
102    # Example pldm_output:
103    # [pldm_attributetable]:                          True
104    # [attributehandle]:                               0
105    # [ AttributeNameHandle]:                          20(vmi-if1-ipv4-method)
106    # [     attributetype]:                            BIOSStringReadOnly
107    # [     StringType]:                               0x01
108    # [     minimumstringlength]:                      1
109    # [     maximumstringlength]:                      100
110    # [     defaultstringlength]:                      15
111
112    ${pldm_output}=  Pldmtool  bios GetBIOSTable --type AttributeTable
113    ${count}=  Get Length  ${pldm_output}
114    ${attr_list}=  Create List
115    FOR  ${i}  IN RANGE  ${count}
116        ${data}=  Set Variable  ${pldm_output}[${i}][AttributeNameHandle]
117        ${sub_string}=  Get Substring  ${data}  3  -1
118        Append To List  ${attr_list}  ${sub_string}
119    END
120    Valid List  attr_list  required_values=${RESPONSE_LIST_GETBIOSTABLE_ATTRTABLE}
121
122Verify GetBIOSTable For AttributeValueTable
123    [Documentation]  Verify if attribute value table content exist for
124    ...              GetBIOSTable with table type attribute value table.
125    [Tags]  Verify_GetBIOSTable_For_AttributeValueTable
126
127    # Example pldm_output:
128    # [pldm_attributevaluetable]:                     True
129    # [attributehandle]:                              0
130    # [     attributetype]:                           BIOSStringReadOnly
131    # [     currentstringlength]:                     15
132
133    ${pldm_output}=  Pldmtool  bios GetBIOSTable --type AttributeValueTable
134    ${count}=  Get Length  ${pldm_output}
135    ${attr_val_list}=  Create List
136    FOR  ${i}  IN RANGE  ${count}
137        Append To List  ${attr_val_list}  ${pldm_output}[${i}][AttributeType]
138    END
139    Valid List  attr_val_list  required_values=${RESPONSE_LIST_GETBIOSTABLE_ATTRVALTABLE}
140
141
142Verify SetBIOSAttributeCurrentValue
143
144    [Documentation]  Verify SetBIOSAttributeCurrentValue with the
145    ...              various BIOS attribute handle and its values.
146    [Tags]  Verify_SetBIOSAttributeCurrentValue
147
148    # Example output:
149    #
150    # pldmtool bios SetBIOSAttributeCurrentValue -a vmi_hostname -d BMC
151    # {
152    #     "Response": "SUCCESS"
153    # }
154
155    ${pldm_output}=  Pldmtool  bios GetBIOSTable --type AttributeTable
156    Log  ${pldm_output}
157    ${attr_val_data}=  GenerateBIOSAttrHandleValueDict  ${pldm_output}
158    Log  ${attr_val_data}
159    @{attr_handles}=  Get Dictionary Keys  ${attr_val_data}
160    FOR  ${i}  IN  @{attr_handles}
161        @{attr_val_list}=  Set Variable  ${attr_val_data}[${i}]
162        Validate SetBIOSAttributeCurrentValue  ${i}  @{attr_val_list}
163    END
164
165Verify GetBIOSAttributeCurrentValueByHandle
166
167    [Documentation]  Verify GetBIOSAttributeCurrentValueByHandle with the
168    ...              various BIOS attribute handle and its values.
169    [Tags]  Verify_GetBIOSAttributeCurrentValueByHandle
170
171    # Example output:
172    #
173    # pldmtool bios GetBIOSAttributeCurrentValueByHandle -a pvm_fw_boot_side
174    # {
175    #     "CurrentValue": "Temp"
176    # }
177
178    ${pldm_output}=  Pldmtool  bios GetBIOSTable --type AttributeTable
179    ${attr_val_data}=  GenerateBIOSAttrHandleValueDict  ${pldm_output}
180    @{attr_handles}=  Get Dictionary Keys  ${attr_val_data}
181    FOR  ${i}  IN  @{attr_handles}
182        ${cur_attr}=  Pldmtool  bios GetBIOSAttributeCurrentValueByHandle -a ${i}
183        @{attr_val_list}=  Set Variable  ${attr_val_data}[${i}]
184        Run Keyword If  '${cur_attr['CurrentValue']}' not in @{attr_val_list}
185        ...  Fail  Invalid GetBIOSAttributeCurrentValueByHandle value found.
186    END
187
188*** Keywords ***
189
190PLDM BIOS Suite Cleanup
191
192    [Documentation]  Perform pldm BIOS suite cleanup.
193
194    ${result}=  Get Current Date  UTC  exclude_millis=True
195    ${current_date_time}=  Evaluate  re.sub(r'-* *:*', "", '${result}')  modules=re
196    ${cmd_set_date_time}=  Evaluate  $CMD_SETDATETIME % '${current_date_time}'
197    ${pldm_output}=  Pldmtool  ${cmd_set_date_time}
198    Valid Value  pldm_output['Response']  ['SUCCESS']
199
200Validate SetBIOSAttributeCurrentValue
201
202    [Documentation]  Set BIOS attribute with the available attribute handle
203    ...              values and revert back to original attribute handle value.
204    [Arguments]  ${attr_handle}  @{attr_val_list}
205
206    # Description of argument(s):
207    # attr_handle    BIOS attribute handle (e.g. pvm_system_power_off_policy).
208    # attr_val_list  List of the attribute values for the given attribute handle
209    #                (e.g. ['"Power Off"', '"Stay On"', 'Automatic']).
210
211    ${cur_attr}=  Pldmtool  bios GetBIOSAttributeCurrentValueByHandle -a ${attr_handle}
212    FOR  ${j}  IN  @{attr_val_list}
213        ${pldm_resp}=  pldmtool  bios SetBIOSAttributeCurrentValue -a ${attr_handle} -d ${j}
214        Valid Value  pldm_resp['Response']  ['SUCCESS']
215    END
216    ${pldm_resp}=  pldmtool  bios SetBIOSAttributeCurrentValue -a ${attr_handle} -d ${cur_attr['CurrentValue']}
217    Valid Value  pldm_resp['Response']  ['SUCCESS']
218