--- /dev/null
+import sys
+import os
+from decorators_for_robot_functionalities import *
+from robot.api import logger
+from robot.libraries.BuiltIn import BuiltIn
+from test_constants import *
+
+sys.path.append(os.path.join(os.path.dirname(__file__), '..', '../libraries/common'))
+import common_utils # noqa
+
+ex = BuiltIn().get_library_instance('execute_command')
+stack_infos = BuiltIn().get_library_instance('stack_infos')
+
+
+def tc_006_ssh_test_ext_ntp():
+ steps = ['step1_check_ntpd_service_and_ext_ntp_ip_on_crf_nodes']
+ common_utils.keyword_runner(steps)
+
+
+def step1_check_ntpd_service_and_ext_ntp_ip_on_crf_nodes():
+ crf_nodes = stack_infos.get_crf_nodes()
+ check_ntpd_status(crf_nodes)
+ check_if_nokia_ntp_server_address_set_on_crf_node(crf_nodes)
+
+
+@robot_log
+def check_ntpd_status(nodes):
+ if not nodes:
+ logger.info("Nodes dictionary is empty, nothing to check.")
+ return
+ command = 'systemctl status ntpd.service | grep --color=no "Active"'
+ for node in nodes:
+ logger.console("\nCheck ntpd status " + node + " " + nodes[node])
+ stdout = ex.execute_unix_command_on_remote_as_user(command, nodes[node])
+ if "running" not in stdout:
+ raise Exception("ntpd.service is not running!")
+
+
+@robot_log
+def get_ext_ntp_ips_from_node():
+ return stack_infos.get_inventory()["all"]["vars"]["time"]["ntp_servers"]
+
+
+@robot_log
+def filter_valid_ntp_servers(ntp_servers):
+ valid_servers = []
+ for server in ntp_servers:
+ stdout = ex.execute_unix_command("ntpdate -q {}".format(server), fail_on_non_zero_rc=False)
+ if "no server suitable for synchronization found" not in stdout:
+ valid_servers.append(server)
+ return valid_servers
+
+
+@robot_log
+def is_ntp_server_set_on_node(server_ip, node):
+ command = 'ntpq -pn | grep -w --color=no ' + server_ip
+ stdout = ex.execute_unix_command_on_remote_as_user(command, node, {}, fail_on_non_zero_rc=False)
+ return server_ip in str(stdout)
+
+
+@robot_log
+def check_if_nokia_ntp_server_address_set_on_crf_node(nodes):
+ ext_ntp_server_ips = get_ext_ntp_ips_from_node()
+ valid_servers = filter_valid_ntp_servers(ext_ntp_server_ips)
+ logger.info("The following ntp_servers will be tested:")
+ logger.info(valid_servers)
+ is_ip_set = True
+ for node in nodes:
+ for ntp_serv_ip in valid_servers:
+ if not is_ntp_server_set_on_node(ntp_serv_ip, node):
+ is_ip_set = False
+ if not is_ip_set:
+ raise Exception("Wrong or no NTP server address set!")