Adding parsing and object for clock conf files
Adding keyword, parsing and objects for ptp clock conf files. Change-Id: I394d09f36ca0aac0448d5904a036da0e21e7d40b
This commit is contained in:
27
keywords/ptp/cat/cat_clock_conf_keywords.py
Normal file
27
keywords/ptp/cat/cat_clock_conf_keywords.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from framework.ssh.ssh_connection import SSHConnection
|
||||
from keywords.base_keyword import BaseKeyword
|
||||
from keywords.ptp.cat.objects.clock_conf_output import ClockConfOutput
|
||||
|
||||
|
||||
class CatClockConfKeywords(BaseKeyword):
|
||||
"""
|
||||
Class for CAT Clock Conf Keywords.
|
||||
"""
|
||||
|
||||
def __init__(self, ssh_connection: SSHConnection):
|
||||
self.ssh_connection = ssh_connection
|
||||
|
||||
def cat_clock_conf(self, clock_conf_location: str) -> ClockConfOutput:
|
||||
"""
|
||||
Runs the command sudo cat <clock_conf_location> ex. /etc/linuxptp/ptpinstance/clock-conf.conf.
|
||||
|
||||
Args:
|
||||
clock_conf_location (str): the clock conf location.
|
||||
|
||||
Returns:
|
||||
ClockConfOutput: the ClockConfOutput.
|
||||
|
||||
"""
|
||||
output = self.ssh_connection.send_as_sudo(f"cat {clock_conf_location}")
|
||||
clock_conf_output = ClockConfOutput(output)
|
||||
return clock_conf_output
|
52
keywords/ptp/cat/cat_clock_conf_parser.py
Normal file
52
keywords/ptp/cat/cat_clock_conf_parser.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from framework.exceptions.keyword_exception import KeywordException
|
||||
|
||||
|
||||
class CatClockConfParser:
|
||||
"""
|
||||
Class for cat clock conf parsing
|
||||
|
||||
Example:
|
||||
ifname [enp138s0f0]
|
||||
base_port [enp138s0f0]
|
||||
sma1 input
|
||||
ifname [enp81s0f2]
|
||||
base_port [enp81s0f0]
|
||||
sma1 output
|
||||
"""
|
||||
|
||||
def __init__(self, cat_clock_conf_output: list[str]):
|
||||
"""
|
||||
Constructor
|
||||
|
||||
Args:
|
||||
cat_clock_conf_output (list[str]): a list of strings representing the output of a 'cat clock-conf.conf' command.
|
||||
"""
|
||||
self.cat_clock_conf_output = cat_clock_conf_output
|
||||
|
||||
def get_output_values_dict_list(self) -> list[dict]:
|
||||
"""
|
||||
Getter for output values dict list
|
||||
|
||||
Returns:
|
||||
list[dict]: the output values dict list
|
||||
|
||||
"""
|
||||
output_values_dict_list = []
|
||||
output_values_dict = {}
|
||||
is_first_ifname = True
|
||||
for row in self.cat_clock_conf_output:
|
||||
if "~$" in row:
|
||||
continue # this is a prompt and should be ignored
|
||||
values = row.strip("\n").split(None, 1) # split once
|
||||
if len(values) == 2:
|
||||
key, value = values
|
||||
if key.strip() == "ifname" and not is_first_ifname: # we are now entering a new interface
|
||||
output_values_dict_list.append(output_values_dict)
|
||||
output_values_dict = {}
|
||||
elif key.strip() == "ifname" and is_first_ifname: # this is the first interface
|
||||
is_first_ifname = False
|
||||
output_values_dict[key.strip()] = value.strip("[]")
|
||||
else:
|
||||
raise KeywordException(f"Line with values: {row} was not in the expected format")
|
||||
output_values_dict_list.append(output_values_dict)
|
||||
return output_values_dict_list
|
90
keywords/ptp/cat/objects/clock_conf_object.py
Normal file
90
keywords/ptp/cat/objects/clock_conf_object.py
Normal file
@@ -0,0 +1,90 @@
|
||||
class ClockConfObject:
|
||||
"""
|
||||
Object to hold the values of Clock conf Object
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.ifname: str = ""
|
||||
self.base_port: str = ""
|
||||
self.sma_name: str = ""
|
||||
self.sma_mode: str = ""
|
||||
|
||||
def set_ifname(self, ifname: str):
|
||||
"""
|
||||
Setter for ifname
|
||||
|
||||
Args:
|
||||
ifname (str): the ifname
|
||||
|
||||
"""
|
||||
self.ifname = ifname
|
||||
|
||||
def get_ifname(self) -> str:
|
||||
"""
|
||||
Getter for ifname
|
||||
|
||||
Returns:
|
||||
str: the ifname
|
||||
|
||||
"""
|
||||
return self.ifname
|
||||
|
||||
def set_base_port(self, base_port: str):
|
||||
"""
|
||||
Setter for base_port
|
||||
|
||||
Args:
|
||||
base_port (str): the base_port
|
||||
|
||||
"""
|
||||
self.base_port = base_port
|
||||
|
||||
def get_base_port(self) -> str:
|
||||
"""
|
||||
Getter for base_port
|
||||
|
||||
Returns:
|
||||
str: the base_port
|
||||
|
||||
"""
|
||||
return self.base_port
|
||||
|
||||
def set_sma_name(self, sma_name: str):
|
||||
"""
|
||||
Setter for sma_name
|
||||
|
||||
Args:
|
||||
sma_name (str): the sma_name
|
||||
|
||||
"""
|
||||
self.sma_name = sma_name
|
||||
|
||||
def get_sma_name(self) -> str:
|
||||
"""
|
||||
Getter for sma_name
|
||||
|
||||
Returns:
|
||||
str: the sma_name
|
||||
|
||||
"""
|
||||
return self.sma_name
|
||||
|
||||
def set_sma_mode(self, sma_mode: str):
|
||||
"""
|
||||
Setter for sma_mode
|
||||
|
||||
Args:
|
||||
sma_mode (str): the sma_mode
|
||||
|
||||
"""
|
||||
self.sma_mode = sma_mode
|
||||
|
||||
def get_sma_mode(self) -> str:
|
||||
"""
|
||||
Getter for sma_mode
|
||||
|
||||
Returns:
|
||||
str: the sma_mode
|
||||
|
||||
"""
|
||||
return self.sma_mode
|
60
keywords/ptp/cat/objects/clock_conf_output.py
Normal file
60
keywords/ptp/cat/objects/clock_conf_output.py
Normal file
@@ -0,0 +1,60 @@
|
||||
from keywords.ptp.cat.cat_clock_conf_parser import CatClockConfParser
|
||||
from keywords.ptp.cat.objects.clock_conf_object import ClockConfObject
|
||||
|
||||
|
||||
class ClockConfOutput:
|
||||
"""
|
||||
This class parses the output of cat clock conf file
|
||||
|
||||
Example:
|
||||
ifname [enp138s0f0]
|
||||
base_port [enp138s0f0]
|
||||
sma1 input
|
||||
ifname [enp81s0f0]
|
||||
base_port [enp81s0f0]
|
||||
sma1 output
|
||||
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, clock_conf_output: list[str]):
|
||||
"""
|
||||
Constructor.
|
||||
|
||||
Create an internal ClockConfObject from the passed parameter.
|
||||
|
||||
Args:
|
||||
clock_conf_output (list[str]): a list of strings representing the clock conf output
|
||||
|
||||
"""
|
||||
cat_clock_conf_parser = CatClockConfParser(clock_conf_output)
|
||||
output_values = cat_clock_conf_parser.get_output_values_dict_list()
|
||||
self.clock_conf_objects: list[ClockConfObject] = []
|
||||
|
||||
for values in output_values:
|
||||
clock_conf_object = ClockConfObject()
|
||||
|
||||
if "ifname" in values:
|
||||
clock_conf_object.set_ifname(values["ifname"])
|
||||
|
||||
if "base_port" in values:
|
||||
clock_conf_object.set_base_port(values["base_port"])
|
||||
|
||||
if "sma1" in values:
|
||||
clock_conf_object.set_sma_name("sma1")
|
||||
clock_conf_object.set_sma_mode(values["sma1"])
|
||||
|
||||
if "sma2" in values:
|
||||
clock_conf_object.set_sma_name("sma2")
|
||||
clock_conf_object.set_sma_mode(values["sma2"])
|
||||
self.clock_conf_objects.append(clock_conf_object)
|
||||
|
||||
def get_clock_conf_objects(self) -> list[ClockConfObject]:
|
||||
"""
|
||||
Getter for ClockConfObject objects.
|
||||
|
||||
Returns:
|
||||
list[ClockConfObject]: A list ClockDescriptionObjects
|
||||
|
||||
"""
|
||||
return self.clock_conf_objects
|
27
unit_tests/parser/ptp/cat_clock_conf_parser_test.py
Normal file
27
unit_tests/parser/ptp/cat_clock_conf_parser_test.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from keywords.ptp.cat.objects.clock_conf_output import ClockConfOutput
|
||||
|
||||
# fmt off
|
||||
clock_conf_output = ["ifname [enp138s0f0]\n", "base_port [enp138s0f0]\n", "sma1 input\n", "ifname [enp81s0f0]\n", "base_port [enp81s0f0]\n", "sma1 output\n", "sysadmin@controller-0:~$ \n"]
|
||||
|
||||
|
||||
def test_clock_conf_output():
|
||||
"""
|
||||
Test the cat clock conf parser and output.
|
||||
|
||||
"""
|
||||
clock_config_output = ClockConfOutput(clock_conf_output)
|
||||
clock_config_objects = clock_config_output.get_clock_conf_objects()
|
||||
|
||||
assert len(clock_config_objects), 2
|
||||
|
||||
clock_config_object = clock_config_objects[0]
|
||||
assert clock_config_object.get_ifname() == "enp138s0f0"
|
||||
assert clock_config_object.get_base_port() == "enp138s0f0"
|
||||
assert clock_config_object.get_sma_name() == "sma1"
|
||||
assert clock_config_object.get_sma_mode() == "input"
|
||||
|
||||
clock_config_object = clock_config_objects[1]
|
||||
assert clock_config_object.get_ifname() == "enp81s0f0"
|
||||
assert clock_config_object.get_base_port() == "enp81s0f0"
|
||||
assert clock_config_object.get_sma_name() == "sma1"
|
||||
assert clock_config_object.get_sma_mode() == "output"
|
Reference in New Issue
Block a user