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   Run Keyword And Ignore Error  PLDM BIOS Suite Cleanup
15
16*** Test Cases ***
17
18Verify GetDateTime
19    [Documentation]  Verify host date & time.
20    [Tags]  Verify_GetDateTime
21
22    # Example output:
23    # {
24    #     "Response": "2020-11-07 07:10:10"
25    # }
26
27    ${pldm_output}=  Pldmtool  bios GetDateTime
28    @{date_time}=  Split String  ${pldm_output['Response']}  ${SPACE}
29    @{time}=  Split String  ${date_time}[1]  :
30
31    ${bmc_date}=  Get Current Date from BMC
32    # Date format example: 2022-10-12 16:31:17
33    Log To Console  BMC Date: ${bmc_date}
34    # Example : ['2022-10-12', '16:31:17']
35    @{current_time}=  Split String  ${bmc_date}  ${EMPTY}
36
37    # verify date matching pldmtool vs BMC current time.
38    Should Contain  ${current_time}  ${date_time[0]}
39
40
41Verify SetDateTime
42    [Documentation]  Verify set date & time for the host.
43    [Tags]  Verify_SetDateTime
44
45    # Example output:
46    # {
47    #     "Response": "SUCCESS"
48    # }
49
50    ${current_date_time}=  Get Current Date  UTC  exclude_millis=True
51    # Example output:
52    # 2020-11-25 07:34:30
53
54    ${date}=  Add Time To Date  ${current_date_time}  400 days  exclude_millis=True
55    ${upgrade_date}=  Evaluate  re.sub(r'-* *:*', "", '${date}')  modules=re
56
57    ${time}=  Add Time To Date  ${current_date_time}  01:01:00  exclude_millis=True
58    ${upgrade_time}=  Evaluate  re.sub(r'-* *:*', "", '${time}')  modules=re
59
60    # Set date.
61    ${cmd_set_date}=  Evaluate  $CMD_SETDATETIME % '${upgrade_date}'
62    ${pldm_output}=  Pldmtool  ${cmd_set_date}
63    Valid Value  pldm_output['Response']  ['SUCCESS']
64
65    # Set time.
66    ${cmd_set_time}=  Evaluate  $CMD_SETDATETIME % '${upgrade_time}'
67    ${pldm_output}=  Pldmtool  ${cmd_set_time}
68
69
70Verify GetBIOSTable For AttributeValueTable
71    [Documentation]  Verify if attribute value table content exist for
72    ...              GetBIOSTable with table type attribute value table.
73    [Tags]  Verify_GetBIOSTable_For_AttributeValueTable
74
75    # Example pldm_output:
76    # [pldm_attributevaluetable]:                     True
77    # [attributehandle]:                              0
78    # [     attributetype]:                           BIOSStringReadOnly
79    # [     currentstringlength]:                     15
80
81    ${count}=  Get Length  ${attr_table_data}
82    ${attr_val_list}=  Create List
83    FOR  ${i}  IN RANGE  ${count}
84        Append To List  ${attr_val_list}  ${attr_table_data}[${i}][AttributeType]
85    END
86    Valid List  attr_val_list  required_values=${RESPONSE_LIST_GETBIOSTABLE_ATTRVALTABLE}
87
88
89Verify GetBIOSAttributeCurrentValueByHandle
90    [Documentation]  Verify GetBIOSAttributeCurrentValueByHandle with the
91    ...              various BIOS attribute handle and its values.
92    [Tags]  Verify_GetBIOSAttributeCurrentValueByHandle
93
94    # Example output:
95    #
96    # pldmtool bios GetBIOSAttributeCurrentValueByHandle -a pvm_fw_boot_side
97    # {
98    #     "CurrentValue": "Temp"
99    # }
100
101    ${attr_val_data}=  GetBIOSEnumAttributeOptionalValues  ${attr_table_data}
102    @{attr_handles}=  Get Dictionary Keys  ${attr_val_data}
103    FOR  ${i}  IN  @{attr_handles}
104        ${cur_attr}=  Pldmtool  bios GetBIOSAttributeCurrentValueByHandle -a ${i}
105        @{attr_val_list}=  Set Variable  ${attr_val_data}[${i}]
106        Run Keyword If  '${cur_attr['CurrentValue']}' not in @{attr_val_list}
107        ...  Fail  Invalid GetBIOSAttributeCurrentValueByHandle value found.
108    END
109
110
111*** Keywords ***
112
113PLDM BIOS Suite Setup
114    [Documentation]  Perform PLDM BIOS suite setup.
115
116    ${pldm_output}=  Pldmtool  bios GetBIOSTable --type AttributeTable
117    Set Global Variable  ${attr_table_data}  ${pldm_output}
118
119    Set Time To Manual Mode
120
121    Sleep  10s
122
123
124PLDM BIOS Suite Cleanup
125    [Documentation]  Perform PLDM BIOS suite cleanup.
126
127    ${result}=  Get Current Date  UTC  exclude_millis=True
128    ${current_date_time}=  Evaluate  re.sub(r'-* *:*', "", '${result}')  modules=re
129    ${cmd_set_date_time}=  Evaluate  $CMD_SETDATETIME % '${current_date_time}'
130    ${pldm_output}=  Pldmtool  ${cmd_set_date_time}
131    Valid Value  pldm_output['Response']  ['SUCCESS']
132
133
134Set Time To Manual Mode
135    [Documentation]  Set date time to manual mode via Redfish.
136
137    Redfish.Login
138    Redfish.Patch  ${REDFISH_NW_PROTOCOL_URI}  body={'NTP':{'ProtocolEnabled': ${False}}}
139    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
140
141
142Get Current Date from BMC
143    [Documentation]  Runs the date command from BMC and returns current date and time.
144
145    # Get Current Date from BMC.
146    ${date}  ${stderr}  ${rc}=  BMC Execute Command   date
147
148    # Split the string and remove first and 2nd last value from the list and
149    # join to form %d %b %H:%M:%S %Y date format
150    ${date}=  Split String  ${date}
151    Remove From List  ${date}  0
152    Remove From List  ${date}  -2
153    ${date}=  Evaluate  " ".join(${date})
154
155    # Convert the date format to %Y/%m/%d %H:%M:%S
156    ${date}=  Convert Date  ${date}  date_format=%b %d %H:%M:%S %Y
157    ...  result_format=%Y-%m-%d %H:%M:%S  exclude_millis=True
158
159    [Return]   ${date}
160