aboutsummaryrefslogtreecommitdiffstats
path: root/resources
diff options
context:
space:
mode:
authorselias <samelias@cisco.com>2017-05-18 18:07:46 +0200
committerTibor Frank <tifrank@cisco.com>2017-06-05 11:25:06 +0000
commit54021405af918f9b6ee2fc8c0d531903f579e930 (patch)
treee4365e3a627753095c58641e6fed699b746c975a /resources
parentb92b5be7d4bbbf523812f774bb2e539ab2081cf6 (diff)
CSIT-610 HC Test: add test cases for unnumbered interface
- add interface and sub-interface tests with unnumbered config - modify interface IPv4 address assignment to handle custom interfaces and sub-interfaces - pylint and style fixes Change-Id: Ic39df1655b4d44f0025a2acef9f7f968929aeff5 Signed-off-by: selias <samelias@cisco.com>
Diffstat (limited to 'resources')
-rw-r--r--resources/libraries/python/honeycomb/HcAPIKwInterfaces.py103
-rw-r--r--resources/libraries/python/honeycomb/HoneycombSetup.py2
-rw-r--r--resources/libraries/python/honeycomb/Lisp.py4
-rw-r--r--resources/libraries/python/honeycomb/ProxyARP.py (renamed from resources/libraries/python/honeycomb/proxyARP.py)0
-rw-r--r--resources/libraries/robot/honeycomb/honeycomb.robot4
-rw-r--r--resources/libraries/robot/honeycomb/interfaces.robot38
-rw-r--r--resources/libraries/robot/honeycomb/proxyarp.robot4
7 files changed, 133 insertions, 22 deletions
diff --git a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py
index e78696cd15..1e0b1a5d14 100644
--- a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py
+++ b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py
@@ -483,22 +483,32 @@ class InterfaceKeywords(object):
:type network: str or int
:returns: Content of response.
:rtype: bytearray
- :raises HoneycombError: If the provided netmask or prefix is not valid.
+ :raises ValueError: If the provided netmask or prefix is not valid.
+ :raises HoneycombError: If the operation fails.
"""
- interface = Topology.convert_interface_reference(
- node, interface, "name")
+ interface = InterfaceKeywords.handle_interface_reference(
+ node, interface)
- path = ("interfaces", ("interface", "name", interface), "ietf-ip:ipv4")
+ path = "/interface/{0}/ietf-ip:ipv4".format(interface)
if isinstance(network, basestring):
- address = {"address": [{"ip": ip_addr, "netmask": network}, ]}
+ data = {
+ "ietf-ip:ipv4": {
+ "address": [{"ip": ip_addr, "netmask": network}, ]}}
elif isinstance(network, int) and (0 < network < 33):
- address = {"address": [{"ip": ip_addr, "prefix-length": network}, ]}
+ data = {
+ "ietf-ip:ipv4": {
+ "address": [{"ip": ip_addr, "prefix-length": network}, ]}}
else:
- raise HoneycombError("Value {0} is not a valid netmask or network "
- "prefix length.".format(network))
- return InterfaceKeywords._set_interface_properties(
- node, interface, path, address)
+ raise ValueError("Value {0} is not a valid netmask or network "
+ "prefix length.".format(network))
+ status_code, _ = HcUtil.put_honeycomb_data(
+ node, "config_vpp_interfaces", data, path)
+
+ if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED):
+ raise HoneycombError(
+ "Configuring IPv4 address failed. "
+ "Status code:{0}".format(status_code))
@staticmethod
def add_ipv4_address(node, interface, ip_addr, network):
@@ -1555,10 +1565,8 @@ class InterfaceKeywords(object):
:param node: Honeycomb node.
:param interface: The interface where policer will be disabled.
- :param table_name: Name of the classify table.
:type node: dict
:type interface: str
- :type table_name: str
:returns: Content of response.
:rtype: bytearray
:raises HoneycombError: If the configuration of interface is not
@@ -1780,7 +1788,7 @@ class InterfaceKeywords(object):
for src_interface in src_interfaces:
src_interface["iface-ref"] = Topology. \
convert_interface_reference(
- node, src_interface["iface-ref"], "name")
+ node, src_interface["iface-ref"], "name")
data = {
"span": {
"mirrored-interfaces": {
@@ -1809,3 +1817,72 @@ class InterfaceKeywords(object):
local0_key = Topology.add_new_port(node, "localzero")
Topology.update_interface_sw_if_index(node, local0_key, 0)
Topology.update_interface_name(node, local0_key, "local0")
+
+ @staticmethod
+ def configure_interface_unnumbered(node, interface, interface_src=None):
+ """Configure the specified interface as unnumbered. The interface
+ borrows IP address from the specified source interface. If not source
+ interface is provided, unnumbered configuration will be removed.
+
+ :param node: Honeycomb node.
+ :param interface: Name, link name or sw_if_index of an interface.
+ :param interface_src: Name of source interface.
+ :type node: dict
+ :type interface: str or int
+ :type interface_src: str
+ :raises HoneycombError: If the configuration fails.
+ """
+
+ interface = InterfaceKeywords.handle_interface_reference(
+ node, interface)
+
+ path = "/interface/{0}/unnumbered-interfaces:unnumbered"\
+ .format(interface)
+
+ if interface_src:
+ data = {
+ "unnumbered": {
+ "use": interface_src
+ }
+ }
+ status_code, _ = HcUtil.put_honeycomb_data(
+ node, "config_vpp_interfaces", data, path)
+ else:
+ status_code, _ = HcUtil.delete_honeycomb_data(
+ node, "config_vpp_interfaces", path)
+
+ if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED):
+ raise HoneycombError(
+ "Configuring unnumbered interface failed. "
+ "Status code:{0}".format(status_code))
+
+ @staticmethod
+ def handle_interface_reference(node, interface):
+ """Convert any interface reference to interface name used by Honeycomb.
+
+ :param node: Honeycomb node.
+ :param interface: Name, link name or sw_if_index of an interface,
+ name of a custom interface or name of a sub-interface.
+ :type node: Honeycomb node.
+ :type interface: str or int
+ :returns: Name of interface that can be used in Honeycomb requests.
+ :rtype: str
+ """
+
+ try:
+ interface = Topology.convert_interface_reference(
+ node, interface, "name")
+ interface = interface.replace("/", "%2F")
+ except RuntimeError:
+ # interface is not in topology
+ if "." in interface:
+ # Assume it's the name of a sub-interface
+ interface, index = interface.split(".")
+ interface = interface.replace("/", "%2F")
+ interface = "{0}/vpp-vlan:sub-interfaces/sub-interface/{1}".\
+ format(interface, index)
+ else:
+ # Assume it's the name of a custom interface (pbb, vxlan, etc.)
+ interface = interface.replace("/", "%2F")
+
+ return interface
diff --git a/resources/libraries/python/honeycomb/HoneycombSetup.py b/resources/libraries/python/honeycomb/HoneycombSetup.py
index aecb022314..5026cb4868 100644
--- a/resources/libraries/python/honeycomb/HoneycombSetup.py
+++ b/resources/libraries/python/honeycomb/HoneycombSetup.py
@@ -438,7 +438,7 @@ class HoneycombSetup(object):
"node {0}, {1}".format(node, stderr))
@staticmethod
- def setup_odl_client(node, odl_name):
+ def configure_odl_client(node, odl_name):
"""Start ODL client on the specified node.
Karaf should be located in /mnt/common, and VPP and Honeycomb should
diff --git a/resources/libraries/python/honeycomb/Lisp.py b/resources/libraries/python/honeycomb/Lisp.py
index 8c124d194c..f89ffed0b9 100644
--- a/resources/libraries/python/honeycomb/Lisp.py
+++ b/resources/libraries/python/honeycomb/Lisp.py
@@ -148,7 +148,7 @@ class LispKeywords(object):
if ret_code == HTTPCodes.OK:
data["lisp"]["enable"] = bool(state)
elif ret_code == HTTPCodes.NOT_FOUND:
- data = {"lisp": {"enable": bool(state)}}
+ data = {"lisp": {"enable": bool(state)}}
else:
raise HoneycombError("Unexpected return code when getting existing"
" Lisp configuration.")
@@ -340,7 +340,7 @@ class LispKeywords(object):
data = {
"map-request-mode": {
"mode": "source-destination" if src_dst
- else "target-destination"
+ else "target-destination"
}
}
diff --git a/resources/libraries/python/honeycomb/proxyARP.py b/resources/libraries/python/honeycomb/ProxyARP.py
index 9696bf4238..9696bf4238 100644
--- a/resources/libraries/python/honeycomb/proxyARP.py
+++ b/resources/libraries/python/honeycomb/ProxyARP.py
diff --git a/resources/libraries/robot/honeycomb/honeycomb.robot b/resources/libraries/robot/honeycomb/honeycomb.robot
index 336039e1fb..e868ecd50a 100644
--- a/resources/libraries/robot/honeycomb/honeycomb.robot
+++ b/resources/libraries/robot/honeycomb/honeycomb.robot
@@ -118,9 +118,9 @@
| | [Arguments] | ${node}
| | Archive Honeycomb log | ${node}
-| Setup ODL Client Service On DUT
+| Configure ODL Client Service On DUT
| | [Arguments] | ${node} | ${odl_name}
-| | Setup ODL client | ${node} | ${odl_name}
+| | Configure ODL client | ${node} | ${odl_name}
| | Wait until keyword succeeds | 4min | 16sec
| | ... | Mount Honeycomb on ODL | ${node}
| | Wait until keyword succeeds | 2min | 16sec
diff --git a/resources/libraries/robot/honeycomb/interfaces.robot b/resources/libraries/robot/honeycomb/interfaces.robot
index 2ab97e0d96..3eef9f1b2d 100644
--- a/resources/libraries/robot/honeycomb/interfaces.robot
+++ b/resources/libraries/robot/honeycomb/interfaces.robot
@@ -718,7 +718,7 @@
| | ... | *Example:*
| | ...
| | ... | \| Honeycomb should show disabled interface in oper data \
-| | ... | \|${nodes['DUT1']} \| ${vx_interface} \|
+| | ... | \| ${nodes['DUT1']} \| ${vx_interface} \|
| | [Arguments] | ${node} | ${index}
| | interfaceAPI.check disabled interface | ${node} | ${index}
@@ -733,7 +733,7 @@
| | ... | *Example:*
| | ...
| | ... | \| Honeycomb should not show disabled interface in oper data \
-| | ... | \|${nodes['DUT1']} \| ${vx_interface} \|
+| | ... | \| ${nodes['DUT1']} \| ${vx_interface} \|
| | [Arguments] | ${node} | ${index}
| | Run keyword and expect error | *
| | ... | Honeycomb should show disabled interface in oper data
@@ -775,3 +775,37 @@
| | ... | --timeout | ${5}
| | Run Traffic Script On Node | send_icmp_wait_for_reply.py
| | ... | ${tg_node} | ${args}
+
+| Honeycomb adds unnumbered configuration to interface
+| | [Documentation] | Adds unnumbered configuration to interface, borrowing IP
+| | ... | address from the other specified interface.
+| | ...
+| | ... | *Arguments:*
+| | ... | - node - information about a DUT node. Type: dictionary
+| | ... | - interface - Name of the interface to be configured. Type: string
+| | ... | - interface_src - Name of the interface to borrow IP address from.\
+| | ... | Type: string
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| Honeycomb adds unnumbered configuration to interface \
+| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| GigabitEthernet0/9/0 \|
+| | ...
+| | [Arguments] | ${node} | ${Interface} | ${interface_src}
+| | Configure interface unnumbered | ${node} | ${interface} | ${interface_src}
+
+| Honeycomb removes unnumbered configuration from interface
+| | [Documentation] | Removes unnumbered configuration from the specified
+| | ... | interface.
+| | ...
+| | ... | *Arguments:*
+| | ... | - node - information about a DUT node. Type: dictionary
+| | ... | - interface - Name of the interface to be configured. Type: string
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| Honeycomb adds unnumbered configuration to interface \
+| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \|
+| | ...
+| | [Arguments] | ${node} | ${Interface}
+| | Configure interface unnumbered | ${node} | ${interface}
diff --git a/resources/libraries/robot/honeycomb/proxyarp.robot b/resources/libraries/robot/honeycomb/proxyarp.robot
index 745507a4c3..209e213cf8 100644
--- a/resources/libraries/robot/honeycomb/proxyarp.robot
+++ b/resources/libraries/robot/honeycomb/proxyarp.robot
@@ -12,8 +12,8 @@
# limitations under the License.
*** Settings ***
-| Library | resources.libraries.python.honeycomb.proxyARP.ProxyARPKeywords
-| Library | resources.libraries.python.honeycomb.proxyARP.IPv6NDProxyKeywords
+| Library | resources.libraries.python.honeycomb.ProxyARP.ProxyARPKeywords
+| Library | resources.libraries.python.honeycomb.ProxyARP.IPv6NDProxyKeywords
| Documentation | Keywords used to test Honeycomb ARP proxy and IPv6ND proxy.
*** Keywords ***