aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/python/honeycomb
diff options
context:
space:
mode:
Diffstat (limited to 'resources/libraries/python/honeycomb')
-rw-r--r--resources/libraries/python/honeycomb/HcAPIKwACL.py10
-rw-r--r--resources/libraries/python/honeycomb/HcAPIKwBridgeDomain.py8
-rw-r--r--resources/libraries/python/honeycomb/HcAPIKwInterfaces.py42
3 files changed, 38 insertions, 22 deletions
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
+ }
}
}
}