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