diff options
author | selias <samelias@cisco.com> | 2017-03-07 15:42:02 +0100 |
---|---|---|
committer | Tibor Frank <tifrank@cisco.com> | 2017-03-21 12:00:46 +0000 |
commit | 4f4eaa1d52f3bdbe3caecdc1d6a024c369a2834a (patch) | |
tree | 44d1d559b187dbdf10eae12acc4da19affa1a5f4 | |
parent | 8003aa2c3d1a0d4c1dbf3b6286d841a47b5fbb4c (diff) |
CSIT-536 HC Test: support testing with ODL client
Reuses existing restconf test cases to test Honeycomb's netconf interface.
When seding the requests to ODL's Honeycomb mountpoint, ODL translates these
requests to netconf RPCs.
Add new tag "honeycomb_odl" that excludes incompatible test cases.
Change-Id: Ie293449da0129b02db85e30aa4f3266928d7d9f6
Signed-off-by: selias <samelias@cisco.com>
49 files changed, 348 insertions, 81 deletions
diff --git a/resources/libraries/python/HTTPRequest.py b/resources/libraries/python/HTTPRequest.py index 1f5df52c01..adf3d168eb 100644 --- a/resources/libraries/python/HTTPRequest.py +++ b/resources/libraries/python/HTTPRequest.py @@ -22,6 +22,7 @@ from enum import IntEnum, unique from robot.api.deco import keyword from robot.api import logger +from robot.libraries.BuiltIn import BuiltIn from requests import request, RequestException, Timeout, TooManyRedirects, \ HTTPError, ConnectionError @@ -36,6 +37,7 @@ class HTTPCodes(IntEnum): UNAUTHORIZED = 401 FORBIDDEN = 403 NOT_FOUND = 404 + CONFLICT = 409 INTERNAL_SERVER_ERROR = 500 SERVICE_UNAVAILABLE = 503 @@ -167,8 +169,23 @@ class HTTPRequest(object): 5. there is any other unexpected HTTP request exception. """ timeout = kwargs["timeout"] + + if BuiltIn().get_variable_value("${use_odl_client}"): + # TODO: node["honeycomb"]["odl_port"] + port = 8181 + odl_url_part = "/network-topology:network-topology/topology/" \ + "topology-netconf/node/vpp/yang-ext:mount" + else: + port = node["honeycomb"]["port"] + odl_url_part = "" + + try: + path = path.format(odl_url_part=odl_url_part) + except KeyError: + pass + url = HTTPRequest.create_full_url(node['host'], - node['honeycomb']['port'], + port, path) try: auth = HTTPBasicAuth(node['honeycomb']['user'], @@ -254,7 +271,8 @@ class HTTPRequest(object): @staticmethod @keyword(name="HTTP Post") - def post(node, path, headers=None, payload=None, json=None, timeout=10): + def post(node, path, headers=None, payload=None, json=None, timeout=10, + enable_logging=True): """Sends a POST request and returns the response and status code. :param node: Honeycomb node. @@ -265,18 +283,23 @@ class HTTPRequest(object): :param json: JSON formatted string to send in the body of the Request. :param timeout: How long to wait for the server to send data before giving up, as a float, or a (connect timeout, read timeout) tuple. + :param enable_logging: Used to suppress errors when checking ODL + state during suite setup and teardown. When True, logging is enabled, + otherwise logging is disabled. :type node: dict :type path: str :type headers: dict :type payload: dict, bytes, or file-like object :type json: str :type timeout: float or tuple + :type enable_logging: bool :return: Status code and content of response. :rtype: tuple """ - return HTTPRequest._http_request('POST', node, path, headers=headers, - data=payload, json=json, - timeout=timeout) + return HTTPRequest._http_request('POST', node, path, + enable_logging=enable_logging, + headers=headers, data=payload, + json=json, timeout=timeout) @staticmethod @keyword(name="HTTP Delete") diff --git a/resources/libraries/python/constants.py b/resources/libraries/python/constants.py index a280b51beb..4c3a8ff451 100644 --- a/resources/libraries/python/constants.py +++ b/resources/libraries/python/constants.py @@ -37,3 +37,6 @@ class Constants(object): # Honeycomb templates location RESOURCES_TPL_HC = 'resources/templates/honeycomb' + + # ODL Client Restconf listener port + ODL_PORT = 8181 diff --git a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py index 3351ebf5d3..b4746e2118 100644 --- a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py +++ b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py @@ -1544,7 +1544,7 @@ class InterfaceKeywords(object): """ interface = intf.replace("/", "%2F") - path = "/interface/{0}/pbb-rewrite/".format(interface) + path = "/interface/{0}/pbb-rewrite".format(interface) status_code, resp = HcUtil. \ put_honeycomb_data(node, "config_vpp_interfaces", params, path, data_representation=DataRepresentation.JSON) diff --git a/resources/libraries/python/honeycomb/HcPersistence.py b/resources/libraries/python/honeycomb/HcPersistence.py index c76a276098..83d756f9d3 100644 --- a/resources/libraries/python/honeycomb/HcPersistence.py +++ b/resources/libraries/python/honeycomb/HcPersistence.py @@ -102,3 +102,43 @@ class HcPersistence(object): for command in commands: (_, stdout, _) = ssh.exec_command_sudo(command) logger.info(stdout) + + + @staticmethod + def configure_persistence(node, state): + """Enable or disable Honeycomb configuration data persistence. + + :param node: Honeycomb node. + :param state: Enable or Disable. + :type node: dict + :type state: str + :raises ValueError: If the state argument is incorrect. + :raises HoneycombError: If the operation fails. + """ + + state = state.lower() + if state == "enable": + state = "true" + elif state == "disable": + state = "false" + else: + raise ValueError("Unexpected value of state argument:" + " {0} provided. Must be enable or disable." + .format(state)) + + for setting in ("persist-config", "persist-context"): + # find the setting, replace entire line with 'setting: state' + find = '\\"{setting}\\":'.format(setting=setting) + replace = '\\"{setting}\\": \\"{state}\\",'.format( + setting=setting, state=state) + + argument = '"/{0}/c\\ {1}"'.format(find, replace) + path = "{0}/config/honeycomb.json".format(Const.REMOTE_HC_DIR) + command = "sed -i {0} {1}".format(argument, path) + + ssh = SSH() + ssh.connect(node) + (ret_code, _, stderr) = ssh.exec_command_sudo(command) + if ret_code != 0: + raise HoneycombError("Failed to modify configuration on " + "node {0}, {1}".format(node, stderr)) diff --git a/resources/libraries/python/honeycomb/HoneycombSetup.py b/resources/libraries/python/honeycomb/HoneycombSetup.py index 239ac10191..117b3e57c4 100644 --- a/resources/libraries/python/honeycomb/HoneycombSetup.py +++ b/resources/libraries/python/honeycomb/HoneycombSetup.py @@ -104,6 +104,36 @@ class HoneycombSetup(object): format(errors)) @staticmethod + def restart_honeycomb_and_vpp_on_duts(*nodes): + """Restart the Honeycomb service on specified DUT nodes. + + Use the keyword "Check Honeycomb Startup State" to check when Honeycomb + is fully restarted. + :param nodes: List of nodes to restart Honeycomb on. + :type nodes: list + :raises HoneycombError: If Honeycomb failed to restart. + """ + logger.console("\nRestarting Honeycomb service ...") + + cmd = "sudo service honeycomb restart && sudo service vpp restart" + errors = [] + + for node in nodes: + if node['type'] == NodeType.DUT: + ssh = SSH() + ssh.connect(node) + (ret_code, _, _) = ssh.exec_command_sudo(cmd) + if int(ret_code) != 0: + errors.append(node['host']) + else: + logger.info("Restart of Honeycomb and VPP on node {0} is " + "in progress ...".format(node['host'])) + if errors: + raise HoneycombError('Node(s) {0} failed to restart Honeycomb' + ' and/or VPP.'. + format(errors)) + + @staticmethod def check_honeycomb_startup_state(*nodes): """Check state of Honeycomb service during startup on specified nodes. @@ -372,3 +402,111 @@ class HoneycombSetup(object): if ret_code != 0: raise HoneycombError("Failed to copy JVPP libraries on " "node {0}, {1}".format(node, stderr)) + + @staticmethod + def find_odl_client(node): + """Check if there is a karaf directory in home. + + :param node: Honeycomb node. + :type node: dict + :returns: True if ODL client is present on node, else False. + :rtype: bool + """ + + ssh = SSH() + ssh.connect(node) + (ret_code, stdout, _) = ssh.exec_command_sudo( + "ls ~ | grep karaf") + + logger.debug(stdout) + return not bool(ret_code) + + @staticmethod + def start_odl_client(node): + """Start ODL client on the specified node. + + karaf should be located in home directory, and VPP and Honeycomb should + already be running, otherwise the start will fail. + :param node: Nodes to start ODL client on. + :type node: dict + :raises HoneycombError: If Honeycomb fails to start. + """ + + logger.console("\nStarting ODL client ...") + + cmd = "~/*karaf*/bin/start" + + ssh = SSH() + ssh.connect(node) + (ret_code, _, _) = ssh.exec_command_sudo(cmd) + if int(ret_code) != 0: + raise HoneycombError('Node {0} failed to start ODL.'. + format(node['host'])) + else: + logger.info("Starting the ODL client on node {0} is " + "in progress ...".format(node['host'])) + + @staticmethod + def check_odl_startup_state(node): + """Check the status of ODL client startup. + + :param node: Honeycomb node. + :param node: dict + :returns: True when ODL is started. + :rtype: bool + :raises HoneycombError: When the response is not code 200: OK. + """ + + path = HcUtil.read_path_from_url_file( + "odl_client/odl_netconf_connector") + expected_status_codes = (HTTPCodes.UNAUTHORIZED, + HTTPCodes.FORBIDDEN, + HTTPCodes.NOT_FOUND, + HTTPCodes.SERVICE_UNAVAILABLE, + HTTPCodes.INTERNAL_SERVER_ERROR) + + status_code, _ = HTTPRequest.get(node, path, timeout=10, + enable_logging=False) + if status_code == HTTPCodes.OK: + logger.info("ODL client on node {0} is up and running". + format(node['host'])) + elif status_code in expected_status_codes: + if status_code == HTTPCodes.UNAUTHORIZED: + logger.info('Unauthorized. If this triggers keyword ' + 'timeout, verify username and password.') + raise HoneycombError('ODL client on node {0} running but ' + 'not yet ready.'.format(node['host']), + enable_logging=False) + else: + raise HoneycombError('Unexpected return code: {0}.'. + format(status_code)) + return True + + @staticmethod + def mount_honeycomb_on_odl(node): + """Tell ODL client to mount Honeycomb instance over netconf. + + :param node: Honeycomb node. + :type node: dict + :raises HoneycombError: When the response is not code 200: OK. + """ + + path = HcUtil.read_path_from_url_file( + "odl_client/odl_netconf_connector") + + url_file = "{0}/{1}".format(Const.RESOURCES_TPL_HC, + "odl_client/mount_honeycomb.xml") + + with open(url_file) as template: + data = template.read() + + status_code, _ = HTTPRequest.post( + node, path, headers={"Content-Type": "application/xml"}, + payload=data, timeout=10, enable_logging=False) + + if status_code == HTTPCodes.OK: + logger.info("ODL mount point configured successfully.") + elif status_code == HTTPCodes.CONFLICT: + logger.warn("ODL mount point was already configured.") + else: + raise HoneycombError('Mount point configuration not successful') diff --git a/resources/libraries/robot/honeycomb/access_control_lists.robot b/resources/libraries/robot/honeycomb/access_control_lists.robot index d45c1f8948..a62ea0f2e8 100644 --- a/resources/libraries/robot/honeycomb/access_control_lists.robot +++ b/resources/libraries/robot/honeycomb/access_control_lists.robot @@ -155,7 +155,7 @@ | | ... | \| ACL table from Honeycomb should not exist \| ${nodes['DUT1']} \ | | ... | \| table0 \| | | [Arguments] | ${node} | ${table_name} -| | Run keyword and expect error | ValueError: No JSON object could be decoded +| | Run keyword and expect error | * | | ... | Get classify table oper data | ${node} | ${table_name} | ACL table from VAT should not exist diff --git a/resources/libraries/robot/honeycomb/honeycomb.robot b/resources/libraries/robot/honeycomb/honeycomb.robot index 7d807f8df9..919c6f5e2a 100644 --- a/resources/libraries/robot/honeycomb/honeycomb.robot +++ b/resources/libraries/robot/honeycomb/honeycomb.robot @@ -37,7 +37,7 @@ | | ... | | [Arguments] | @{duts} | | Start honeycomb on DUTs | @{duts} -| | Wait until keyword succeeds | 4min | 15sec +| | Wait until keyword succeeds | 4min | 20sec | | ... | Check honeycomb startup state | @{duts} | Stop honeycomb service on DUTs @@ -59,7 +59,7 @@ | | ... | | [Arguments] | @{duts} | | Stop honeycomb on DUTs | @{duts} -| | Wait until keyword succeeds | 30sec | 5sec +| | Wait until keyword succeeds | 60sec | 10sec | | ... | Check honeycomb shutdown state | @{duts} | Clear persisted Honeycomb configuration @@ -91,6 +91,21 @@ | | Setup DUT | ${node} | | Setup Honeycomb service on DUTs | ${node} +| Restart Honeycomb and VPP +| | [Documentation] | Restarts Honeycomb service and wait until it starts up. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Restart Honeycomb and VPP \| ${nodes['DUT1']} \| +| | [Arguments] | ${node} +| | Log | Performing clean restart of Honeycomb and VPP. | console=True +| | Restart Honeycomb and VPP on DUTs | ${node} +| | Wait until keyword succeeds | 4min | 20sec +| | ... | Check honeycomb startup state | ${node} + | Archive Honeycomb log file | | [Documentation] | Copy honeycomb.log file from Honeycomb node\ | | ... | to test executor. @@ -101,4 +116,19 @@ | | ... | | ... | \| Archive Honeycomb log file \| ${nudes['DUT1']} \| | | [Arguments] | ${node} -| | Archive Honeycomb log | ${node}
\ No newline at end of file +| | Archive Honeycomb log | ${node} + +| Find ODL client on node +| | [Arguments] | ${node} +| | ${odl_present}= | Find ODL Client | ${node} +| | Return from keyword | ${odl_present} + +| Start ODL client on node +| | [Arguments] | ${node} +| | Start ODL client | ${node} +| | Wait until keyword succeeds | 4min | 20sec +| | ... | Mount Honeycomb on ODL | ${node} +| | Wait until keyword succeeds | 2min | 10sec +| | ... | Check ODL startup state | ${node} +| | Wait until keyword succeeds | 2min | 10sec +| | ... | Check honeycomb startup state | ${node} diff --git a/resources/templates/honeycomb/add_vpp_to_topology.xml b/resources/templates/honeycomb/add_vpp_to_topology.xml deleted file mode 100644 index 46a84f28e8..0000000000 --- a/resources/templates/honeycomb/add_vpp_to_topology.xml +++ /dev/null @@ -1,9 +0,0 @@ -<node xmlns="urn:TBD:params:xml:ns:yang:network-topology"> - <node-id>{vpp_host}</node-id> - <host xmlns="urn:opendaylight:netconf-node-topology">{vpp_ip}</host> - <port xmlns="urn:opendaylight:netconf-node-topology">{vpp_port}</port> - <username xmlns="urn:opendaylight:netconf-node-topology">{user}</username> - <password xmlns="urn:opendaylight:netconf-node-topology">{passwd}</password> - <tcp-only xmlns="urn:opendaylight:netconf-node-topology">false</tcp-only> - <keepalive-delay xmlns="urn:opendaylight:netconf-node-topology">0</keepalive-delay> -</node>
\ No newline at end of file diff --git a/resources/templates/honeycomb/config_bridge_domain.url b/resources/templates/honeycomb/config_bridge_domain.url index 03d8f241cd..8e37a503b0 100644 --- a/resources/templates/honeycomb/config_bridge_domain.url +++ b/resources/templates/honeycomb/config_bridge_domain.url @@ -1 +1 @@ -/restconf/config/v3po:vpp/bridge-domains
\ No newline at end of file +/restconf/config{odl_url_part}/v3po:vpp/bridge-domains
\ No newline at end of file diff --git a/resources/templates/honeycomb/config_classify_table.url b/resources/templates/honeycomb/config_classify_table.url index 986b1173ac..042055f335 100644 --- a/resources/templates/honeycomb/config_classify_table.url +++ b/resources/templates/honeycomb/config_classify_table.url @@ -1 +1 @@ -/restconf/config/vpp-classifier:vpp-classifier
\ No newline at end of file +/restconf/config{odl_url_part}/vpp-classifier:vpp-classifier
\ No newline at end of file diff --git a/resources/templates/honeycomb/config_lisp.url b/resources/templates/honeycomb/config_lisp.url index 69e3d512e6..16652af8c6 100644 --- a/resources/templates/honeycomb/config_lisp.url +++ b/resources/templates/honeycomb/config_lisp.url @@ -1 +1 @@ -/restconf/config/lisp:lisp
\ No newline at end of file +/restconf/config{odl_url_part}/lisp:lisp
\ No newline at end of file diff --git a/resources/templates/honeycomb/config_nat.url b/resources/templates/honeycomb/config_nat.url index e323aedea9..5471493c2d 100644 --- a/resources/templates/honeycomb/config_nat.url +++ b/resources/templates/honeycomb/config_nat.url @@ -1 +1 @@ -/restconf/config/ietf-nat:nat-config
\ No newline at end of file +/restconf/config{odl_url_part}/ietf-nat:nat-config
\ No newline at end of file diff --git a/resources/templates/honeycomb/config_network_topology.url b/resources/templates/honeycomb/config_network_topology.url index fe1b9310c2..4232361f54 100644 --- a/resources/templates/honeycomb/config_network_topology.url +++ b/resources/templates/honeycomb/config_network_topology.url @@ -1 +1 @@ -/restconf/config/network-topology:network-topology
\ No newline at end of file +/restconf/config{odl_url_part}/network-topology:network-topology
\ No newline at end of file diff --git a/resources/templates/honeycomb/config_nsh.url b/resources/templates/honeycomb/config_nsh.url index ad14e953e8..647c46120b 100644 --- a/resources/templates/honeycomb/config_nsh.url +++ b/resources/templates/honeycomb/config_nsh.url @@ -1 +1 @@ -/restconf/config/vpp-nsh:vpp-nsh
\ No newline at end of file +/restconf/config{odl_url_part}/vpp-nsh:vpp-nsh
\ No newline at end of file diff --git a/resources/templates/honeycomb/config_plugin_acl.url b/resources/templates/honeycomb/config_plugin_acl.url index 79a9670f44..19a49f2b04 100644 --- a/resources/templates/honeycomb/config_plugin_acl.url +++ b/resources/templates/honeycomb/config_plugin_acl.url @@ -1 +1 @@ -/restconf/config/ietf-access-control-list:access-lists
\ No newline at end of file +/restconf/config{odl_url_part}/ietf-access-control-list:access-lists
\ No newline at end of file diff --git a/resources/templates/honeycomb/config_topology.url b/resources/templates/honeycomb/config_topology.url deleted file mode 100644 index e76f47ce8c..0000000000 --- a/resources/templates/honeycomb/config_topology.url +++ /dev/null @@ -1 +0,0 @@ -/restconf/config/network-topology:network-topology/topology/topology-netconf
\ No newline at end of file diff --git a/resources/templates/honeycomb/config_topology_node.url b/resources/templates/honeycomb/config_topology_node.url deleted file mode 100644 index 89b7aa851e..0000000000 --- a/resources/templates/honeycomb/config_topology_node.url +++ /dev/null @@ -1 +0,0 @@ -/restconf/config/network-topology:network-topology/topology/topology-netconf/node
\ No newline at end of file diff --git a/resources/templates/honeycomb/config_vpp_interfaces.url b/resources/templates/honeycomb/config_vpp_interfaces.url index 3789f5e535..03ddc4f88b 100644 --- a/resources/templates/honeycomb/config_vpp_interfaces.url +++ b/resources/templates/honeycomb/config_vpp_interfaces.url @@ -1 +1 @@ -/restconf/config/ietf-interfaces:interfaces
\ No newline at end of file +/restconf/config{odl_url_part}/ietf-interfaces:interfaces
\ No newline at end of file diff --git a/resources/templates/honeycomb/odl_client/mount_honeycomb.xml b/resources/templates/honeycomb/odl_client/mount_honeycomb.xml new file mode 100644 index 0000000000..97f43e1119 --- /dev/null +++ b/resources/templates/honeycomb/odl_client/mount_honeycomb.xml @@ -0,0 +1,33 @@ +<module xmlns="urn:opendaylight:params:xml:ns:yang:controller:config"> + <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">prefix:sal-netconf-connector</type> + <name>vpp</name> + <address xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">127.0.0.1</address> + <port xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">2831</port> + <username xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">admin</username> + <password xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">admin</password> + <tcp-only xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">false</tcp-only> + <event-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf"> + <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netty">prefix:netty-event-executor</type> + <name>global-event-executor</name> + </event-executor> + <binding-registry xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf"> + <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-broker-osgi-registry</type> + <name>binding-osgi-broker</name> + </binding-registry> + <dom-registry xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf"> + <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-broker-osgi-registry</type> + <name>dom-broker</name> + </dom-registry> + <client-dispatcher xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf"> + <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:netconf">prefix:netconf-client-dispatcher</type> + <name>global-netconf-dispatcher</name> + </client-dispatcher> + <processing-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf"> + <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:threadpool">prefix:threadpool</type> + <name>global-netconf-processing-executor</name> + </processing-executor> + <keepalive-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf"> + <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:threadpool">prefix:scheduled-threadpool</type> + <name>global-netconf-ssh-scheduled-executor</name> + </keepalive-executor> +</module>
\ No newline at end of file diff --git a/resources/templates/honeycomb/odl_client/odl_netconf_connector.url b/resources/templates/honeycomb/odl_client/odl_netconf_connector.url new file mode 100644 index 0000000000..4d7e7d0732 --- /dev/null +++ b/resources/templates/honeycomb/odl_client/odl_netconf_connector.url @@ -0,0 +1 @@ +/restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:modules
\ No newline at end of file diff --git a/resources/templates/honeycomb/oper_bridge_domains.url b/resources/templates/honeycomb/oper_bridge_domains.url index 7c8584326c..f0fedb4039 100644 --- a/resources/templates/honeycomb/oper_bridge_domains.url +++ b/resources/templates/honeycomb/oper_bridge_domains.url @@ -1 +1 @@ -/restconf/operational/v3po:vpp-state/bridge-domains
\ No newline at end of file +/restconf/operational{odl_url_part}/v3po:vpp-state/bridge-domains
\ No newline at end of file diff --git a/resources/templates/honeycomb/oper_classify_table.url b/resources/templates/honeycomb/oper_classify_table.url index f9fd294a8f..a7a0c7e3fd 100644 --- a/resources/templates/honeycomb/oper_classify_table.url +++ b/resources/templates/honeycomb/oper_classify_table.url @@ -1 +1 @@ -/restconf/operational/vpp-classifier:vpp-classifier-state
\ No newline at end of file +/restconf/operational{odl_url_part}/vpp-classifier:vpp-classifier-state
\ No newline at end of file diff --git a/resources/templates/honeycomb/oper_disabled_interfaces.url b/resources/templates/honeycomb/oper_disabled_interfaces.url index d885c203a2..276830d7a7 100644 --- a/resources/templates/honeycomb/oper_disabled_interfaces.url +++ b/resources/templates/honeycomb/oper_disabled_interfaces.url @@ -1 +1 @@ -/restconf/operational/v3po-context:disabled-interfaces
\ No newline at end of file +/restconf/operational{odl_url_part}/v3po-context:disabled-interfaces
\ No newline at end of file diff --git a/resources/templates/honeycomb/oper_lisp.url b/resources/templates/honeycomb/oper_lisp.url index 850d3174a1..95d19c05a8 100644 --- a/resources/templates/honeycomb/oper_lisp.url +++ b/resources/templates/honeycomb/oper_lisp.url @@ -1 +1 @@ -/restconf/operational/lisp:lisp-state
\ No newline at end of file +/restconf/operational{odl_url_part}/lisp:lisp-state
\ No newline at end of file diff --git a/resources/templates/honeycomb/oper_nat.url b/resources/templates/honeycomb/oper_nat.url index 1445f4064b..a0101bb6de 100644 --- a/resources/templates/honeycomb/oper_nat.url +++ b/resources/templates/honeycomb/oper_nat.url @@ -1 +1 @@ -/restconf/operational/ietf-nat:nat-state
\ No newline at end of file +/restconf/operational{odl_url_part}/ietf-nat:nat-state
\ No newline at end of file diff --git a/resources/templates/honeycomb/oper_network_topology.url b/resources/templates/honeycomb/oper_network_topology.url index e165d3f259..14e74ee3c7 100644 --- a/resources/templates/honeycomb/oper_network_topology.url +++ b/resources/templates/honeycomb/oper_network_topology.url @@ -1 +1 @@ -/restconf/operational/network-topology:network-topology
\ No newline at end of file +/restconf/operational{odl_url_part}/network-topology:network-topology
\ No newline at end of file diff --git a/resources/templates/honeycomb/oper_nsh.url b/resources/templates/honeycomb/oper_nsh.url index 5be706d9df..1b511b3a5a 100644 --- a/resources/templates/honeycomb/oper_nsh.url +++ b/resources/templates/honeycomb/oper_nsh.url @@ -1 +1 @@ -/restconf/operational/vpp-nsh:vpp-nsh-state
\ No newline at end of file +/restconf/operational{odl_url_part}/vpp-nsh:vpp-nsh-state
\ No newline at end of file diff --git a/resources/templates/honeycomb/oper_vpp_interfaces.url b/resources/templates/honeycomb/oper_vpp_interfaces.url index de6f950c0d..cae9e41b68 100644 --- a/resources/templates/honeycomb/oper_vpp_interfaces.url +++ b/resources/templates/honeycomb/oper_vpp_interfaces.url @@ -1 +1 @@ -/restconf/operational/ietf-interfaces:interfaces-state
\ No newline at end of file +/restconf/operational{odl_url_part}/ietf-interfaces:interfaces-state
\ No newline at end of file diff --git a/resources/templates/honeycomb/oper_vpp_version.url b/resources/templates/honeycomb/oper_vpp_version.url index 59759be8ea..fbb8820975 100644 --- a/resources/templates/honeycomb/oper_vpp_version.url +++ b/resources/templates/honeycomb/oper_vpp_version.url @@ -1 +1 @@ -/restconf/operational/v3po:vpp-state/version
\ No newline at end of file +/restconf/operational{odl_url_part}/v3po:vpp-state/version
\ No newline at end of file diff --git a/resources/templates/honeycomb/poll_oper_data.url b/resources/templates/honeycomb/poll_oper_data.url deleted file mode 100644 index 2fe04386f3..0000000000 --- a/resources/templates/honeycomb/poll_oper_data.url +++ /dev/null @@ -1 +0,0 @@ -/restconf/operations/v3po:vpp-poll-oper-data
\ No newline at end of file diff --git a/tests/func/honeycomb/__init__.robot b/tests/func/honeycomb/__init__.robot index 1b129d9c86..9057cef9f8 100644 --- a/tests/func/honeycomb/__init__.robot +++ b/tests/func/honeycomb/__init__.robot @@ -20,13 +20,22 @@ | Resource | resources/libraries/robot/default.robot | Resource | resources/libraries/robot/honeycomb/honeycomb.robot | Suite Setup | Run Keywords | Setup All DUTs Before Test | AND -| ... | Clear Persisted Honeycomb Configuration | ${node} | AND -| ... | Copy Java Libraries | ${node} | AND -| ... | Configure Unsecured Access | ${node} | AND -| ... | Enable Module Features | ${node} | AND -| ... | Configure Log Level | ${node} | TRACE | AND -| ... | Setup Honeycomb Service On DUTs | ${node} | AND +| ... | Configure Honeycomb for testing | ${node} | AND | ... | Set Global Variable | ${node} -| Suite Teardown | Run keywords -| ... | Stop Honeycomb Service On DUTs | ${node} | AND +| Suite Teardown | ... | Archive Honeycomb log file | ${node} + +*** Keywords *** +| Configure Honeycomb for testing +| | [Arguments] | ${node} +| | Copy Java Libraries | ${node} +| | Configure Unsecured Access | ${node} +| | Enable Module Features | ${node} +| | Configure Log Level | ${node} | TRACE +| | Configure Persistence | ${node} | disable +| | Clear Persisted Honeycomb Configuration | ${node} +| | Setup Honeycomb Service On DUTs | ${node} +| | ${use_odl_client}= | Find ODL client on node | ${node} +| | Set Global Variable | ${use_odl_client} +| | Run Keyword If | ${use_odl_client} +| | ... | Start ODL Client on node | ${node} diff --git a/tests/func/honeycomb/mgmt-cfg-acl-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-acl-apihc-apivat-func.robot index fdfc281d82..b50a48f9a1 100644 --- a/tests/func/honeycomb/mgmt-cfg-acl-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-acl-apihc-apivat-func.robot @@ -22,10 +22,10 @@ | Variables | resources/test_data/honeycomb/acl.py | Suite Teardown | Run keywords | ... | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| ... | Restart Honeycomb and VPP | ${node} | ... | AND | Clear all ACL settings | ${node} | Documentation | *Honeycomb access control lists test suite.* -| Force Tags | Honeycomb_sanity +| Force Tags | honeycomb_sanity | honeycomb_odl *** Test Cases *** | TC01: Honeycomb can create ACL classify table diff --git a/tests/func/honeycomb/mgmt-cfg-int-apihcnc-func.robot b/tests/func/honeycomb/mgmt-cfg-int-apihcnc-func.robot index 45a80a436d..8f5796a299 100644 --- a/tests/func/honeycomb/mgmt-cfg-int-apihcnc-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-int-apihcnc-func.robot @@ -23,7 +23,7 @@ | ... | REST API.* | Force Tags | honeycomb_sanity | Suite Teardown -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| ... | Restart Honeycomb and VPP | ${node} *** Variables *** | ${interface}= | ${node['interfaces']['port1']['name']} diff --git a/tests/func/honeycomb/mgmt-cfg-int-subint-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-int-subint-apihc-apivat-func.robot index f050a4dfa6..ca1ff9988c 100644 --- a/tests/func/honeycomb/mgmt-cfg-int-subint-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-int-subint-apihc-apivat-func.robot @@ -19,8 +19,8 @@ | Resource | resources/libraries/robot/honeycomb/interfaces.robot | Variables | resources/test_data/honeycomb/sub_interfaces.py | Suite Teardown -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} -| Force Tags | honeycomb_sanity +| ... | Restart Honeycomb and VPP | ${node} +| Force Tags | honeycomb_sanity | honeycomb_odl | Documentation | *Honeycomb sub-interface management test suite.* *** Variables *** diff --git a/tests/func/honeycomb/mgmt-cfg-intip4-intip6-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-intip4-intip6-apihc-apivat-func.robot index 6bc602371a..fc5069fee3 100644 --- a/tests/func/honeycomb/mgmt-cfg-intip4-intip6-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-intip4-intip6-apihc-apivat-func.robot @@ -39,10 +39,10 @@ | Resource | resources/libraries/robot/honeycomb/honeycomb.robot | Resource | resources/libraries/robot/testing_path.robot | Resource | resources/libraries/robot/ipv6.robot -| Force Tags | honeycomb_sanity +| Force Tags | honeycomb_sanity | honeycomb_odl | Suite Setup | Vpp nodes ra suppress link layer | ${nodes} | Suite Teardown -| | ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| | ... | Restart Honeycomb and VPP | ${node} | Documentation | *Honeycomb interface management test suite.* *** Test Cases *** diff --git a/tests/func/honeycomb/mgmt-cfg-inttap-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-inttap-apihc-apivat-func.robot index 05ca9dc28a..29eb0af5cc 100644 --- a/tests/func/honeycomb/mgmt-cfg-inttap-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-inttap-apihc-apivat-func.robot @@ -26,9 +26,9 @@ | Resource | resources/libraries/robot/honeycomb/honeycomb.robot | Resource | resources/libraries/robot/honeycomb/interfaces.robot | Resource | resources/libraries/robot/honeycomb/tap.robot -| Force Tags | honeycomb_sanity +| Force Tags | honeycomb_sanity | honeycomb_odl | Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| ... | Restart Honeycomb and VPP | ${node} | Documentation | *Honeycomb TAP management test suite.* *** Test Cases *** diff --git a/tests/func/honeycomb/mgmt-cfg-intvhost-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-intvhost-apihc-apivat-func.robot index 1f5719aff5..1e37918753 100644 --- a/tests/func/honeycomb/mgmt-cfg-intvhost-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-intvhost-apihc-apivat-func.robot @@ -26,9 +26,9 @@ | Resource | resources/libraries/robot/default.robot | Resource | resources/libraries/robot/honeycomb/honeycomb.robot | Resource | resources/libraries/robot/honeycomb/vhost_user.robot -| Force Tags | honeycomb_sanity +| Force Tags | honeycomb_sanity | honeycomb_odl | Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| ... | Restart Honeycomb and VPP | ${node} | Documentation | *Honeycomb vhost-user interface management test suite.* *** Test Cases *** diff --git a/tests/func/honeycomb/mgmt-cfg-l2bd-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-l2bd-apihc-apivat-func.robot index 05440ba9dc..dca6a60303 100644 --- a/tests/func/honeycomb/mgmt-cfg-l2bd-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-l2bd-apihc-apivat-func.robot @@ -30,9 +30,9 @@ | Resource | resources/libraries/robot/honeycomb/bridge_domain.robot | Suite Teardown | Run keywords | ... | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| ... | Restart Honeycomb and VPP | ${node} | ... | AND | Honeycomb removes all bridge domains | ${node} | @{interfaces} -| Force Tags | honeycomb_sanity +| Force Tags | honeycomb_sanity | honeycomb_odl | Documentation | *Honeycomb bridge domain management test suite.* *** Test Cases *** diff --git a/tests/func/honeycomb/mgmt-cfg-l2fib-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-l2fib-apihc-apivat-func.robot index 25891dd470..ef6a50ca4a 100644 --- a/tests/func/honeycomb/mgmt-cfg-l2fib-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-l2fib-apihc-apivat-func.robot @@ -24,11 +24,11 @@ | ... | Set test interface down | Suite Teardown | Run keywords | ... | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| ... | Restart Honeycomb and VPP | ${node} | ... | AND | ... | Honeycomb removes all bridge domains | ... | ${node} | ${interface} | ${interface2} -| Force tags | honeycomb_sanity +| Force tags | honeycomb_sanity | honeycomb_odl *** Variables *** # Interface to run tests on. diff --git a/tests/func/honeycomb/mgmt-cfg-lisp-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-lisp-apihc-apivat-func.robot index 2356e8b00a..aeb4782d5c 100644 --- a/tests/func/honeycomb/mgmt-cfg-lisp-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-lisp-apihc-apivat-func.robot @@ -26,8 +26,8 @@ | Variables | resources/test_data/honeycomb/lisp.py | Documentation | *Honeycomb Lisp test suite.* | Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} -| Force Tags | honeycomb_sanity +| ... | Restart Honeycomb and VPP | ${node} +| Force Tags | honeycomb_sanity | honeycomb_odl *** Test Cases *** | TC01: Honeycomb enables Lisp feature diff --git a/tests/func/honeycomb/mgmt-cfg-nsh-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-nsh-apihc-apivat-func.robot index aade075a7a..3f4b08795a 100644 --- a/tests/func/honeycomb/mgmt-cfg-nsh-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-nsh-apihc-apivat-func.robot @@ -23,9 +23,9 @@ | Variables | resources/test_data/honeycomb/vxlan_gpe.py | Documentation | *Honeycomb NSH test suite.* | Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| ... | Restart Honeycomb and VPP | ${node} # disabled pending NSH version 17.04 -#| Force Tags | honeycomb_sanity +#| Force Tags | honeycomb_sanity | honeycomb_odl *** Test Cases *** | TC01: Honeycomb can configure NSH entry diff --git a/tests/func/honeycomb/mgmt-cfg-pbb-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-pbb-apihc-apivat-func.robot index 6ae76e0ec9..e4353e8e45 100644 --- a/tests/func/honeycomb/mgmt-cfg-pbb-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-pbb-apihc-apivat-func.robot @@ -21,8 +21,8 @@ | Variables | resources/test_data/honeycomb/pbb/pbb.py | Documentation | *Honeycomb provider backbone bridge test suite.* | Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} -| Force Tags | honeycomb_sanity +| ... | Restart Honeycomb and VPP | ${node} +| Force Tags | honeycomb_sanity | honeycomb_odl *** Test Cases *** # TODO: add verifications once operational data or VPP dump is available. diff --git a/tests/func/honeycomb/mgmt-cfg-pluginacl-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-pluginacl-apihc-apivat-func.robot index cbc89ec34c..6a53cfd224 100644 --- a/tests/func/honeycomb/mgmt-cfg-pluginacl-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-pluginacl-apihc-apivat-func.robot @@ -48,9 +48,9 @@ | ... | AND | Clear plugin-acl settings | ${node} | ${dut_to_tg_if1} | Suite Setup | Vpp All ra suppress link layer | ${nodes} | Suite Teardown -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| ... | Restart Honeycomb and VPP | ${node} | Documentation | *Honeycomb access control lists test suite for ACL plugin.* -| Force Tags | Honeycomb_sanity +| Force Tags | honeycomb_sanity | honeycomb_odl *** Test Cases *** | TC01: ACL MAC filtering through plugin-acl node - bridged diff --git a/tests/func/honeycomb/mgmt-cfg-snat44-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-snat44-apihc-apivat-func.robot index 0b45c55573..f15a632f29 100644 --- a/tests/func/honeycomb/mgmt-cfg-snat44-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-snat44-apihc-apivat-func.robot @@ -21,8 +21,8 @@ | Variables | resources/test_data/honeycomb/nat.py | ${node} | ${interface} | Documentation | *Honeycomb NAT test suite.* | Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} -| Force Tags | honeycomb_sanity +| ... | Restart Honeycomb and VPP | ${node} +| Force Tags | honeycomb_sanity | honeycomb_odl *** Test Cases *** | TC01: Honeycomb configures NAT entry diff --git a/tests/func/honeycomb/mgmt-cfg-spanrx-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-spanrx-apihc-apivat-func.robot index 8beea9a42a..46bfc1a3d5 100644 --- a/tests/func/honeycomb/mgmt-cfg-spanrx-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-spanrx-apihc-apivat-func.robot @@ -20,7 +20,7 @@ # | Force Tags | honeycomb_sanity | Suite Setup | Add Interface local0 To Topology | ${node} | Suite Teardown | Run Keyword If Any Tests Failed -| | ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| | ... | Restart Honeycomb and VPP | ${node} | Documentation | *Honeycomb port mirroring test suite.* *** Variables *** diff --git a/tests/func/honeycomb/mgmt-cfg-vxlan-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-vxlan-apihc-apivat-func.robot index 1838f469a3..f4cec2712d 100644 --- a/tests/func/honeycomb/mgmt-cfg-vxlan-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-vxlan-apihc-apivat-func.robot @@ -32,9 +32,9 @@ | Resource | resources/libraries/robot/honeycomb/vxlan.robot # import additional VxLAN settings from resource file | Variables | resources/test_data/honeycomb/vxlan.py -| Force Tags | honeycomb_sanity +| Force Tags | honeycomb_sanity | honeycomb_odl | Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| ... | Restart Honeycomb and VPP | ${node} | Documentation | *Honeycomb VxLAN management test suite.* *** Test Cases *** diff --git a/tests/func/honeycomb/mgmt-cfg-vxlangpe-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-vxlangpe-apihc-apivat-func.robot index 78635ac48d..7902396e40 100644 --- a/tests/func/honeycomb/mgmt-cfg-vxlangpe-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-vxlangpe-apihc-apivat-func.robot @@ -39,9 +39,9 @@ # Import additional VxLAN GPE settings from resource file | Variables | resources/test_data/honeycomb/vxlan_gpe.py | Documentation | *Honeycomb VxLAN-GPE management test suite.* -| Force Tags | honeycomb_sanity +| Force Tags | honeycomb_sanity | honeycomb_odl | Suite Setup -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| ... | Restart Honeycomb and VPP | ${node} *** Test Cases *** | TC01: Honeycomb creates VxLAN GPE tunnel diff --git a/tests/func/honeycomb/mgmt-notif-apihcnc-func.robot b/tests/func/honeycomb/mgmt-notif-apihcnc-func.robot index 2b6802c205..a1bd91625f 100644 --- a/tests/func/honeycomb/mgmt-notif-apihcnc-func.robot +++ b/tests/func/honeycomb/mgmt-notif-apihcnc-func.robot @@ -30,9 +30,9 @@ | ... | Honeycomb creates TAP interface | ... | ${node} | ${tap_interface} | ${tap_settings} | Documentation | *Honeycomb notifications test suite.* -| Force Tags | honeycomb_sanity +| Force Tags | honeycomb_sanity | honeycomb_odl | Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| ... | Restart Honeycomb and VPP | ${node} *** Test Cases *** | TC01: Honeycomb sends notification on interface state change diff --git a/tests/func/honeycomb/mgmt-statepersist-apihc-func.robot b/tests/func/honeycomb/mgmt-statepersist-apihc-func.robot index 2c0067e14e..8aebe741cf 100644 --- a/tests/func/honeycomb/mgmt-statepersist-apihc-func.robot +++ b/tests/func/honeycomb/mgmt-statepersist-apihc-func.robot @@ -18,8 +18,10 @@ *** Settings *** | Resource | resources/libraries/robot/default.robot | Resource | resources/libraries/robot/honeycomb/persistence.robot -| Suite Setup | Restart Honeycomb And VPP And Clear Persisted Configuration -| ... | ${node} +| Suite Setup | Run Keywords +| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} +| ... | AND | Configure Persistence | ${node} | enable +| Suite Teardown | Configure Persistence | ${node} | disable | Force Tags | honeycomb_sanity | Documentation | *Honeycomb configuration persistence test suite.* |