diff options
Diffstat (limited to 'resources/libraries/python')
4 files changed, 40 insertions, 22 deletions
diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py index 11600a1d47..b3d168c217 100644 --- a/resources/libraries/python/InterfaceUtil.py +++ b/resources/libraries/python/InterfaceUtil.py @@ -262,6 +262,8 @@ class InterfaceUtil(object): for item in data: item["netmask"] = convert_ipv4_netmask_prefix( item["prefix_length"]) + # VAT returns addresses with reversed byte order (VPP-132) + item["ip"] = ".".join(item["ip"].split(".")[::-1]) return data @staticmethod diff --git a/resources/libraries/python/honeycomb/HcAPIKwACL.py b/resources/libraries/python/honeycomb/HcAPIKwACL.py index 375820283b..8d1746d0ad 100644 --- a/resources/libraries/python/honeycomb/HcAPIKwACL.py +++ b/resources/libraries/python/honeycomb/HcAPIKwACL.py @@ -13,6 +13,7 @@ """This module implements keywords to manipulate ACL data structures using Honeycomb REST API.""" +from robot.api import logger from resources.libraries.python.topology import Topology from resources.libraries.python.HTTPRequest import HTTPCodes @@ -61,9 +62,12 @@ class ACLKeywords(object): delete_honeycomb_data(node, "config_classify_table", path) if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED): - raise HoneycombError( - "The configuration of classify table was not successful. " - "Status code: {0}.".format(status_code)) + if data is None and '"error-tag":"data-missing"' in resp: + logger.debug("data does not exist in path.") + else: + raise HoneycombError( + "The configuration of classify table was not successful. " + "Status code: {0}.".format(status_code)) return resp @staticmethod diff --git a/resources/libraries/python/honeycomb/HcAPIKwBridgeDomain.py b/resources/libraries/python/honeycomb/HcAPIKwBridgeDomain.py index 38d5324da7..29a3a0e6ad 100644 --- a/resources/libraries/python/honeycomb/HcAPIKwBridgeDomain.py +++ b/resources/libraries/python/honeycomb/HcAPIKwBridgeDomain.py @@ -226,11 +226,9 @@ class BridgeDomainKeywords(object): :rtype: dict """ - path = ("bridge-domains", ) new_bd = BridgeDomainKeywords._create_bd_structure(bd_name, **kwargs) - bridge_domain = {"bridge-domain": [new_bd, ]} - return BridgeDomainKeywords._set_bd_properties(node, bd_name, path, - bridge_domain) + bridge_domain = {"bridge-domains": {"bridge-domain": [new_bd, ]}} + return BridgeDomainKeywords._configure_bd(node, bd_name, bridge_domain) @staticmethod def add_bd(node, bd_name, **kwargs): @@ -270,7 +268,7 @@ class BridgeDomainKeywords(object): status_code, resp = HcUtil.\ put_honeycomb_data(node, "config_bridge_domain", data) - if status_code != HTTPCodes.OK: + if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED): raise HoneycombError("Not possible to remove all bridge domains. " "Status code: {0}.".format(status_code)) return resp diff --git a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py index 506db69720..559f64e304 100644 --- a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py +++ b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py @@ -16,6 +16,8 @@ The keywords make possible to put and get configuration data and to get operational data. """ +from robot.api import logger + from resources.libraries.python.topology import Topology from resources.libraries.python.HTTPRequest import HTTPCodes from resources.libraries.python.honeycomb.HoneycombSetup import HoneycombError @@ -342,13 +344,16 @@ class InterfaceKeywords(object): path = "/interface/{0}/v3po:l2".format(intf) - status_code, _ = HcUtil.delete_honeycomb_data( + status_code, response = HcUtil.delete_honeycomb_data( node, "config_vpp_interfaces", path) if status_code != HTTPCodes.OK: - raise HoneycombError( - "Could not remove bridge domain assignment from interface " - "'{0}'. Status code: {1}.".format(interface, status_code)) + if '"error-tag":"data-missing"' in response: + logger.debug("Data does not exist in path.") + else: + raise HoneycombError( + "Could not remove bridge domain assignment from interface " + "'{0}'. Status code: {1}.".format(interface, status_code)) @staticmethod def get_bd_oper_data_from_interface(node, interface): @@ -1283,15 +1288,19 @@ class InterfaceKeywords(object): node, super_interface, path, None) @staticmethod - def compare_data_structures(data, ref, ignore=()): + def compare_data_structures(data, ref, ignore=(), list_order=True): """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. + :param list_order: Whether to consider the order of list items\ + in comparison. :type data: dict :type ref: dict :type ignore: iterable + :type list_order: bool + :raises HoneycombError: If a parameter from referential data is not present in operational data or if it has different value. """ @@ -1303,10 +1312,13 @@ class InterfaceKeywords(object): continue try: if data[key] != item: - errors += ("\nThe value of parameter '{0}' is " - "incorrect. It should be " - "'{1}' but it is '{2}'". - format(key, item, data[key])) + if not list_order and sorted(data[key]) == sorted(item): + pass + else: + errors += ("\nThe value of parameter '{0}' is " + "incorrect. It should be " + "'{1}' but it is '{2}'". + format(key, item, data[key])) except KeyError: errors += ("\nThe parameter '{0}' is not present in " "operational data".format(key)) @@ -1394,11 +1406,13 @@ class InterfaceKeywords(object): data = { "v3po:acl": { - "l2-acl": { - "classify-table": table_name - }, - "ip4-acl": { - "classify-table": table_name + "ingress": { + "ip4-acl": { + "classify-table": table_name + }, + "l2-acl": { + "classify-table": table_name + } } } } |