xref: /openbmc/openbmc-test-automation/lib/bmc_date_and_time_utils.robot (revision 4055c9658c29bb49cb783271af27ed8f69765753)
1365b8f93SAnvesh-Kumar_Rayankula*** Settings ***
2365b8f93SAnvesh-Kumar_RayankulaDocumentation  This module provides general keywords for date time and ntp.
3365b8f93SAnvesh-Kumar_Rayankula
4365b8f93SAnvesh-Kumar_RayankulaResource                     ../../lib/resource.robot
5365b8f93SAnvesh-Kumar_RayankulaResource                     ../../lib/bmc_redfish_resource.robot
6365b8f93SAnvesh-Kumar_RayankulaResource                     ../../lib/common_utils.robot
7365b8f93SAnvesh-Kumar_RayankulaResource                     ../../lib/openbmc_ffdc.robot
8365b8f93SAnvesh-Kumar_RayankulaResource                     ../../lib/utils.robot
9365b8f93SAnvesh-Kumar_RayankulaResource                     ../../lib/rest_client.robot
10365b8f93SAnvesh-Kumar_RayankulaLibrary                      ../../lib/gen_robot_valid.py
11365b8f93SAnvesh-Kumar_Rayankula
12365b8f93SAnvesh-Kumar_Rayankula*** Variables ***
13365b8f93SAnvesh-Kumar_Rayankula
14365b8f93SAnvesh-Kumar_Rayankula${year_without_ntp}          1970
15365b8f93SAnvesh-Kumar_Rayankula
16365b8f93SAnvesh-Kumar_Rayankula*** Keywords ***
17365b8f93SAnvesh-Kumar_Rayankula
18365b8f93SAnvesh-Kumar_Rayankula
19365b8f93SAnvesh-Kumar_RayankulaRedfish Get DateTime
20365b8f93SAnvesh-Kumar_Rayankula    [Documentation]  Returns BMC Datetime value from Redfish.
21365b8f93SAnvesh-Kumar_Rayankula
22365b8f93SAnvesh-Kumar_Rayankula    ${date_time}=  Redfish.Get Attribute  ${REDFISH_BASE_URI}Managers/${MANAGER_ID}  DateTime
23365b8f93SAnvesh-Kumar_Rayankula    RETURN  ${date_time}
24365b8f93SAnvesh-Kumar_Rayankula
25365b8f93SAnvesh-Kumar_Rayankula
26365b8f93SAnvesh-Kumar_RayankulaRedfish Set DateTime
27365b8f93SAnvesh-Kumar_Rayankula    [Documentation]  Set DateTime using Redfish.
28*4055c965Ssarandev3    [Arguments]  ${date_time}=${EMPTY}  ${request_type}=valid
29365b8f93SAnvesh-Kumar_Rayankula    # Description of argument(s):
30365b8f93SAnvesh-Kumar_Rayankula    # date_time                     New time to set for BMC (eg.
31365b8f93SAnvesh-Kumar_Rayankula    #                               "2019-06-30 09:21:28"). If this value is
32365b8f93SAnvesh-Kumar_Rayankula    #                               empty, it will be set to the UTC current
33365b8f93SAnvesh-Kumar_Rayankula    #                               date time of the local system.
34*4055c965Ssarandev3    # request_type                  By default user request is valid.
35*4055c965Ssarandev3    #                               User can pass invalid to identify the user
36*4055c965Ssarandev3    #                               date time input will result in failure as
37*4055c965Ssarandev3    #                               expected.
38365b8f93SAnvesh-Kumar_Rayankula
39365b8f93SAnvesh-Kumar_Rayankula    # Assign default value of UTC current date time if date_time is empty.
40365b8f93SAnvesh-Kumar_Rayankula    ${date_time}=  Run Keyword If
41365b8f93SAnvesh-Kumar_Rayankula    ...  '${date_time}' == '${EMPTY}'  Get Current Date  time_zone=UTC
42365b8f93SAnvesh-Kumar_Rayankula    ...  ELSE
43365b8f93SAnvesh-Kumar_Rayankula    ...  Set Variable  ${date_time}
44*4055c965Ssarandev3    # Patch date_time based on type of ${request_type}.
45*4055c965Ssarandev3    IF  '${request_type}' == 'valid'
46*4055c965Ssarandev3        ${date_time}=  Convert Date  ${date_time}  result_format=%Y-%m-%dT%H:%M:%S+00:00
47365b8f93SAnvesh-Kumar_Rayankula        Wait Until Keyword Succeeds  1min  5sec
483d500892Ssarandev3        ...  Redfish.Patch  ${REDFISH_BASE_URI}Managers/${MANAGER_ID}
49*4055c965Ssarandev3        ...  body={'DateTime': '${date_time}'}
50d12a347cSSweta Potthuri        ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
515e5f5974Ssarandev3    ELSE
525e5f5974Ssarandev3        Wait Until Keyword Succeeds  1min  5sec
53*4055c965Ssarandev3        ...  Redfish.Patch  ${REDFISH_BASE_URI}Managers/${MANAGER_ID}
54*4055c965Ssarandev3        ...  body={'DateTime': '${date_time}'}
55*4055c965Ssarandev3        ...  valid_status_codes=[${HTTP_BAD_REQUEST}]
565e5f5974Ssarandev3    END
57365b8f93SAnvesh-Kumar_Rayankula
58365b8f93SAnvesh-Kumar_Rayankula
59365b8f93SAnvesh-Kumar_RayankulaSet Time To Manual Mode
60365b8f93SAnvesh-Kumar_Rayankula    [Documentation]  Set date time to manual mode via Redfish.
61365b8f93SAnvesh-Kumar_Rayankula
62365b8f93SAnvesh-Kumar_Rayankula    Redfish.Patch  ${REDFISH_NW_PROTOCOL_URI}  body={'NTP':{'ProtocolEnabled': ${False}}}
63365b8f93SAnvesh-Kumar_Rayankula    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
64365b8f93SAnvesh-Kumar_Rayankula
65365b8f93SAnvesh-Kumar_Rayankula
66365b8f93SAnvesh-Kumar_RayankulaSet BMC Date And Verify
67365b8f93SAnvesh-Kumar_Rayankula    [Documentation]  Set BMC Date Time at a given host state and verify.
68365b8f93SAnvesh-Kumar_Rayankula    [Arguments]  ${host_state}
69365b8f93SAnvesh-Kumar_Rayankula    # Description of argument(s):
70365b8f93SAnvesh-Kumar_Rayankula    # host_state  Host state at which date time will be updated for verification
71365b8f93SAnvesh-Kumar_Rayankula    #             (eg. on, off).
72365b8f93SAnvesh-Kumar_Rayankula
73365b8f93SAnvesh-Kumar_Rayankula    Run Keyword If  '${host_state}' == 'on'
74365b8f93SAnvesh-Kumar_Rayankula    ...    Redfish Power On  stack_mode=skip
75365b8f93SAnvesh-Kumar_Rayankula    ...  ELSE
76365b8f93SAnvesh-Kumar_Rayankula    ...    Redfish Power off  stack_mode=skip
77365b8f93SAnvesh-Kumar_Rayankula    ${current_date}=  Get Current Date  time_zone=UTC
78365b8f93SAnvesh-Kumar_Rayankula    ${new_value}=  Subtract Time From Date  ${current_date}  1 day
79*4055c965Ssarandev3    Redfish Set DateTime  ${new_value}
80365b8f93SAnvesh-Kumar_Rayankula    ${current_value}=  Redfish Get DateTime
81365b8f93SAnvesh-Kumar_Rayankula    ${time_diff}=  Subtract Date From Date  ${current_value}  ${new_value}
82365b8f93SAnvesh-Kumar_Rayankula    Should Be True  '${time_diff}'<='3'
83365b8f93SAnvesh-Kumar_Rayankula
84365b8f93SAnvesh-Kumar_Rayankula
85365b8f93SAnvesh-Kumar_RayankulaSet NTP state
86365b8f93SAnvesh-Kumar_Rayankula    [Documentation]  Set NTP service inactive.
87365b8f93SAnvesh-Kumar_Rayankula    [Arguments]  ${state}
88365b8f93SAnvesh-Kumar_Rayankula
89365b8f93SAnvesh-Kumar_Rayankula    Redfish.Patch  ${REDFISH_NW_PROTOCOL_URI}  body={'NTP':{'ProtocolEnabled': ${state}}}
90365b8f93SAnvesh-Kumar_Rayankula    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
91365b8f93SAnvesh-Kumar_Rayankula
92365b8f93SAnvesh-Kumar_Rayankula
93365b8f93SAnvesh-Kumar_RayankulaGet NTP Initial Status
94365b8f93SAnvesh-Kumar_Rayankula    [Documentation]  Get NTP service Status.
95365b8f93SAnvesh-Kumar_Rayankula
96365b8f93SAnvesh-Kumar_Rayankula    ${original_ntp}=  Redfish.Get Attribute  ${REDFISH_NW_PROTOCOL_URI}  NTP
97365b8f93SAnvesh-Kumar_Rayankula    Set Suite Variable  ${original_ntp}
98365b8f93SAnvesh-Kumar_Rayankula
99365b8f93SAnvesh-Kumar_Rayankula
100365b8f93SAnvesh-Kumar_RayankulaRestore NTP Status
101365b8f93SAnvesh-Kumar_Rayankula    [Documentation]  Restore NTP Status.
102365b8f93SAnvesh-Kumar_Rayankula
103365b8f93SAnvesh-Kumar_Rayankula    Run Keyword If  '${original_ntp["ProtocolEnabled"]}' == 'True'
104365b8f93SAnvesh-Kumar_Rayankula    ...    Set NTP state  ${TRUE}
105365b8f93SAnvesh-Kumar_Rayankula    ...  ELSE  Set NTP state  ${FALSE}
106365b8f93SAnvesh-Kumar_Rayankula
107365b8f93SAnvesh-Kumar_Rayankula
108365b8f93SAnvesh-Kumar_RayankulaVerify NTP Servers Are Populated
109365b8f93SAnvesh-Kumar_Rayankula    [Documentation]  Redfish GET request /redfish/v1/Managers/${MANAGER_ID}/NetworkProtocol response
110365b8f93SAnvesh-Kumar_Rayankula    ...              and verify if NTP servers are populated.
111365b8f93SAnvesh-Kumar_Rayankula
112365b8f93SAnvesh-Kumar_Rayankula    ${network_protocol}=  Redfish.Get Properties  ${REDFISH_NW_PROTOCOL_URI}
113365b8f93SAnvesh-Kumar_Rayankula    Should Contain  ${network_protocol["NTP"]["NTPServers"]}  ${ntp_server_1}
114365b8f93SAnvesh-Kumar_Rayankula    ...  msg=NTP server value ${ntp_server_1} not stored.
115365b8f93SAnvesh-Kumar_Rayankula    Should Contain  ${network_protocol["NTP"]["NTPServers"]}  ${ntp_server_2}
116365b8f93SAnvesh-Kumar_Rayankula    ...  msg=NTP server value ${ntp_server_2} not stored.
117365b8f93SAnvesh-Kumar_Rayankula
118365b8f93SAnvesh-Kumar_Rayankula
119365b8f93SAnvesh-Kumar_RayankulaVerify System Time Sync Status
120365b8f93SAnvesh-Kumar_Rayankula    [Documentation]  Verify the status of service systemd-timesyncd matches the NTP protocol enabled state.
121365b8f93SAnvesh-Kumar_Rayankula    [Arguments]  ${expected_sync_status}=${True}
122365b8f93SAnvesh-Kumar_Rayankula
123365b8f93SAnvesh-Kumar_Rayankula    # Description of argument(s):
124365b8f93SAnvesh-Kumar_Rayankula    # expected_sync_status  expected status at which NTP protocol enabled will be updated for verification
125365b8f93SAnvesh-Kumar_Rayankula    #                       (eg. True, False).
126365b8f93SAnvesh-Kumar_Rayankula
127365b8f93SAnvesh-Kumar_Rayankula    ${resp}=  BMC Execute Command
128365b8f93SAnvesh-Kumar_Rayankula    ...  systemctl status systemd-timesyncd
129365b8f93SAnvesh-Kumar_Rayankula    ...  ignore_err=${1}
130365b8f93SAnvesh-Kumar_Rayankula    ${sync_status}=  Get Lines Matching Regexp  ${resp[0]}  .*Active.*
131365b8f93SAnvesh-Kumar_Rayankula    Run Keyword If  ${expected_sync_status}==${True}
132365b8f93SAnvesh-Kumar_Rayankula    ...  Should Contain  ${sync_status}  active (running)
133365b8f93SAnvesh-Kumar_Rayankula    Run Keyword If  ${expected_sync_status}==${False}
134365b8f93SAnvesh-Kumar_Rayankula    ...  Should Contain  ${sync_status}  inactive (dead)
135365b8f93SAnvesh-Kumar_Rayankula
136365b8f93SAnvesh-Kumar_Rayankula
137365b8f93SAnvesh-Kumar_RayankulaEnable NTP And Add NTP Address
138365b8f93SAnvesh-Kumar_Rayankula    [Documentation]  Enable NTP Protocol and Add NTP Address.
139365b8f93SAnvesh-Kumar_Rayankula
140365b8f93SAnvesh-Kumar_Rayankula    Set NTP state  ${TRUE}
141365b8f93SAnvesh-Kumar_Rayankula
142365b8f93SAnvesh-Kumar_Rayankula    Redfish.Patch  ${REDFISH_NW_PROTOCOL_URI}  body={'NTP':{'NTPServers': ${NTP_SERVER_ADDRESSES}}}
143365b8f93SAnvesh-Kumar_Rayankula    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
144365b8f93SAnvesh-Kumar_Rayankula
145365b8f93SAnvesh-Kumar_Rayankula    Wait Until Keyword Succeeds  1 min  10 sec  Check Date And Time Was Changed
146365b8f93SAnvesh-Kumar_Rayankula
147365b8f93SAnvesh-Kumar_Rayankula
148365b8f93SAnvesh-Kumar_RayankulaCheck Date And Time Was Changed
149365b8f93SAnvesh-Kumar_Rayankula    [Documentation]  Verify date was current date and time.
150365b8f93SAnvesh-Kumar_Rayankula
151365b8f93SAnvesh-Kumar_Rayankula    ${new_date_time}=  CLI Get BMC DateTime
152365b8f93SAnvesh-Kumar_Rayankula    Should Not Contain  ${new_date_time}  ${year_without_ntp}
153365b8f93SAnvesh-Kumar_Rayankula
154365b8f93SAnvesh-Kumar_Rayankula
155365b8f93SAnvesh-Kumar_RayankulaRestore NTP Mode
156365b8f93SAnvesh-Kumar_Rayankula    [Documentation]  Restore the original NTP mode.
157365b8f93SAnvesh-Kumar_Rayankula
158365b8f93SAnvesh-Kumar_Rayankula    Return From Keyword If  &{original_ntp} == &{EMPTY}
159365b8f93SAnvesh-Kumar_Rayankula    Print Timen  Restore NTP Mode.
160365b8f93SAnvesh-Kumar_Rayankula    Redfish.Patch  ${REDFISH_NW_PROTOCOL_URI}
161365b8f93SAnvesh-Kumar_Rayankula    ...  body={'NTP':{'ProtocolEnabled': ${original_ntp["ProtocolEnabled"]}}}
162365b8f93SAnvesh-Kumar_Rayankula    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
163