diff options
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.* |