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