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