aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/python
diff options
context:
space:
mode:
Diffstat (limited to 'resources/libraries/python')
-rw-r--r--resources/libraries/python/Classify.py43
-rw-r--r--resources/libraries/python/InterfaceUtil.py23
-rw-r--r--resources/libraries/python/honeycomb/HcAPIKwInterfaces.py25
3 files changed, 83 insertions, 8 deletions
diff --git a/resources/libraries/python/Classify.py b/resources/libraries/python/Classify.py
index d955a9cc8c..dfa5c3377d 100644
--- a/resources/libraries/python/Classify.py
+++ b/resources/libraries/python/Classify.py
@@ -280,3 +280,46 @@ class Classify(object):
# base value of classify hex table for IPv6 TCP/UDP ports
else:
raise ValueError("Invalid IP version!")
+
+ @staticmethod
+ def get_classify_table_data(node, table_index):
+ """Retrieve settings for classify table by ID.
+
+ :param node: VPP node to retrieve classify data from.
+ :param table_index: Index of a specific classify table.
+ :type node: dict
+ :type table_index: int
+ :return: Classify table settings.
+ :rtype: dict
+ """
+ with VatTerminal(node) as vat:
+ data = vat.vat_terminal_exec_cmd_from_template(
+ "classify_table_info.vat",
+ table_id=table_index
+ )
+ return data[0]
+
+ @staticmethod
+ def get_classify_session_data(node, table_index, session_index=None):
+ """Retrieve settings for all classify sessions in a table,
+ or for a specific classify session.
+
+ :param node: VPP node to retrieve classify data from.
+ :param table_index: Index of a classify table.
+ :param session_index: Index of a specific classify session. (Optional)
+ :type node: dict
+ :type table_index: int
+ :type session_index: int
+ :return: List of classify session settings, or a dictionary of settings
+ for a specific classify session.
+ :rtype: list or dict
+ """
+ with VatTerminal(node) as vat:
+ data = vat.vat_terminal_exec_cmd_from_template(
+ "classify_session_dump.vat",
+ table_id=table_index
+ )
+ if session_index is not None:
+ return data[0][session_index]
+ else:
+ return data[0]
diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py
index a16a02fbe8..69d0a59680 100644
--- a/resources/libraries/python/InterfaceUtil.py
+++ b/resources/libraries/python/InterfaceUtil.py
@@ -713,6 +713,29 @@ class InterfaceUtil(object):
table_index=table_index)
@staticmethod
+ def get_interface_classify_table(node, interface):
+ """Get name of classify table for the given interface.
+
+ :param node: VPP node to get data from.
+ :param interface: Name or sw_if_index of a specific interface.
+ :type node: dict
+ :type interface: str or int
+ :return: Classify table name.
+ :rtype: str
+ """
+ if isinstance(interface, basestring):
+ sw_if_index = InterfaceUtil.get_sw_if_index(node, interface)
+ else:
+ sw_if_index = interface
+
+ with VatTerminal(node) as vat:
+ data = vat.vat_terminal_exec_cmd_from_template(
+ "classify_interface_table.vat",
+ sw_if_index=sw_if_index
+ )
+ return data[0]
+
+ @staticmethod
def get_sw_if_index(node, interface_name):
"""Get sw_if_index for the given interface from actual interface dump.
diff --git a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py
index ff1589f217..4eaef11bdb 100644
--- a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py
+++ b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py
@@ -307,8 +307,8 @@ class InterfaceKeywords(object):
:param node: Honeycomb node.
:param interface: The name of interface.
- :type interface: str
:type node: dict
+ :type interface: str
:return: Operational data about bridge domain settings in the
interface.
:rtype: dict
@@ -1224,27 +1224,36 @@ class InterfaceKeywords(object):
node, super_interface, path, None)
@staticmethod
- def compare_data_structures(data, ref):
+ def compare_data_structures(data, ref, ignore=()):
"""Checks if data obtained from UUT is as expected.
:param data: Data to be checked.
:param ref: Referential data used for comparison.
+ :param ignore: Dictionary keys to be ignored.
:type data: dict
:type ref: dict
+ :type ignore: iterable
:raises HoneycombError: If a parameter from referential data is not
present in operational data or if it has different value.
"""
+ errors = ""
+
for key, item in ref.items():
+ if key in ignore:
+ continue
try:
if data[key] != item:
- raise HoneycombError("The value of parameter '{0}' is "
- "incorrect. It should be "
- "'{1}' but it is '{2}'".
- format(key, item, data[key]))
+ errors += ("\nThe value of parameter '{0}' is "
+ "incorrect. It should be "
+ "'{1}' but it is '{2}'".
+ format(key, item, data[key]))
except KeyError:
- raise HoneycombError("The parameter '{0}' is not present in "
- "operational data".format(key))
+ errors += ("\nThe parameter '{0}' is not present in "
+ "operational data".format(key))
+
+ if errors:
+ raise HoneycombError(errors)
@staticmethod
def compare_interface_lists(list1, list2):