*** Variables ***
# DIDM suite variables
-${DEVICE_TYPE} mininet
-${DEVICE_DESCRIPTION} None
-${DEVICE_HW_INFO} Open vSwitch
-${DEVICE_SW_INFO} 2.0.0
-${DEVICE_MANUFACTURE} Nicira, Inc.
-${DEVICE_SERIAL_NUMBER} None
+${DEVICE_TYPE} mininet
+${DEVICE_DESCRIPTION} None
+${DEVICE_HW_INFO} Open vSwitch
+${DEVICE_SW_INFO} 2.0.0
+${DEVICE_MANUFACTURE} Nicira, Inc.
+${DEVICE_SERIAL_NUMBER} None
*** Settings ***
-Documentation Resource consisting purely of variable definitions useful for multiple project suites.
+Documentation Resource consisting purely of variable definitions useful for multiple project suites.
...
-... Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+... Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
...
-... This program and the accompanying materials are made available under the
-... terms of the Eclipse Public License v1.0 which accompanies this distribution,
-... and is available at http://www.eclipse.org/legal/epl-v10.html
+... This program and the accompanying materials are made available under the
+... terms of the Eclipse Public License v1.0 which accompanies this distribution,
+... and is available at http://www.eclipse.org/legal/epl-v10.html
...
...
-... These variables are considered global and immutable, so their names are in ALL_CAPS.
+... These variables are considered global and immutable, so their names are in ALL_CAPS.
...
-... If a variable is only specific to few projects, define it in csit/variables/{project}/Variables.robot file instead.
-... If a variable only affects few Resources, define it in csit/libraries/{resource}.robot file instead.
+... If a variable is only specific to few projects, define it in csit/variables/{project}/Variables.robot file instead.
+... If a variable only affects few Resources, define it in csit/libraries/{resource}.robot file instead.
...
-... Please include a short comment on why the variable is useful and why particular value was chosen.
-... Also a well-known variables provided by releng/builder script should be listed here,
-... the value should be a reasonable default.
+... Please include a short comment on why the variable is useful and why particular value was chosen.
+... Also a well-known variables provided by releng/builder script should be listed here,
+... the value should be a reasonable default.
...
-... Use ODL_SYSTEM instead of CONTROLLER and TOOLS_SYSTEM instead of MININET when referring to VMs.
+... Use ODL_SYSTEM instead of CONTROLLER and TOOLS_SYSTEM instead of MININET when referring to VMs.
+
*** Variables ***
# Keep this list sorted alphabetically.
-&{ACCEPT_EMPTY} # Empty accept header. ODL should send JSON data in this case. TODO: Hide into more specific Resource if possible.
-&{ACCEPT_JSON} Accept=application/json # Header for accpeting JSON data. TODO: Hide into more specific Resource if possible.
-&{ACCEPT_XML} Accept=application/xml # Header for accepting XML data. TODO: Hide into more specific Resource if possible.
-${ALERTFIELDCONTENTRULERECORD} /restconf/config/alertrule:alertFieldContentRuleRecord/ # FIXME: Move to a separate Centinel-related Resource and add description.
-${ALERTFIELDVALUERULERECORD} /restconf/config/alertrule:alertFieldValueRuleRecord # FIXME: Move to a separate Centinel-related Resource and add description.
-${ALERTMESSAGECOUNTRULERECORD} /restconf/config/alertrule:alertMessageCountRuleRecord/ # FIXME: Move to a separate Centinel-related Resource and add description.
-@{AUTH} ${ODL_RESTCONF_USER} ${ODL_RESTCONF_PASSWORD} # Authentication tuple for accessing ODL RESTCONF server. TODO: Migrate most suites to TemplatedRequests, then chose a more descriptive name.
-@{AUTH_ADMIN_SDN} admin secret # Authentication tuple for accessing Keystone API serveri
-@{AUTH_CSC_SDN} CSC_user cscuser # Authentication tuple for accessing Keystone API server
-@{AUTH_CSC_NO_ADMIN} CSC_user_no_admin cscusernoadmin # Authentication tuple for accessing Keystone API server
-@{AUTH_INVALID} invaliduser invinvuser # Authentication tuple for accessing ODL RESTCONF server with Keystone Authentication
-@{AUTH_SDN} sdnadmin sdnsdn # Authentication tuple for accessing ODL RESTCONF server with Keystone Authentication
-@{AUTH_SDN_DOMAIN} sdnadmin@sdn sdnsdn # Authentication tuple for accessing ODL RESTCONF server with Keystone Authentication
-@{AUTH_SDN_WRONG_DOM} sdnadmin@wrong sdnsdn # Authentication tuple for accessing ODL RESTCONF server with Keystone Authentication
-${AUTH_TOKEN_API} /oauth2/token # FIXME: Move to a separate AAA-related Resource and add description.
-${BGP_TOOL_PORT} 17900 # Tool side of BGP communication listens on this port.
-${BGPCEP_LOG_LEVEL} ${DEFAULT_BGPCEP_LOG_LEVEL} # Some suites temporarily override org.opendaylight.bgpcep Karaf log level to this value.
-${BUNDLEFOLDER} /opt/opendaylight # default location to find opendaylight root folder. Upstream CSIT overrides this on the pybot command line.
-${CONFIG_NODES_API} /restconf/config/opendaylight-inventory:nodes # FIXME: Move to a separate Resource and add description.
-${CONFIG_TOPO_API} /restconf/config/network-topology:network-topology # FIXME: Move to a separate Resource and add description.
-${CONFIG_API} /restconf/config # FIXME: Move to a separate Resource and add description.
-${CONTAINER} default # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${CONTROLLER} ${ODL_SYSTEM_IP} # Deprecated. FIXME: Eradicate.
-${CONTROLLER_PASSWORD} ${ODL_SYSTEM_PASSWORD} # Deprecated. FIXME: Eradicate.
-${CONTROLLER_PROMPT} ${DEFAULT_LINUX_PROMPT} # Deprecated. FIXME: Eradicate.
-${CONTROLLERS} ${ODL_SYSTEM_IP_LIST} # Deprecated. FIXME: Eradicate.
-${CONTROLLER_CONFIG_MOUNT} /restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount # FIXME: Move to a separate Resource and add description.
-${CONTROLLER_STOP_TIMEOUT} 120 # Max number of seconds test will wait for a controller to stop. FIXME: Hiden into a Resource and rename.
-${CREATE_PATHPOLICY_TOPOLOGY_FILE} topo-3sw-2host_multipath.py # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${CREATE_PATHPOLICY_TOPOLOGY_FILE_PATH} MininetTopo/${CREATE_PATHPOLICY_TOPOLOGY_FILE} # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${CREATE_VLAN_TOPOLOGY_FILE} vlan_vtn_test.py # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${CREATE_VLAN_TOPOLOGY_FILE_PATH} MininetTopo/${CREATE_VLAN_TOPOLOGY_FILE} # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${CTRLS} controllers # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${CTRLS_CREATE} controllers.json # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description
-${CUSTOMPROP} /tmp/${BUNDLEFOLDER}/etc/custom.properties # Full path of custom.properties file
-${DEFAULT_LINUX_PROMPT} > # Generic *_SYSTEM prompt for SSHLibrary.Read_Unti_Prompt. Current value is there for historic reasons. FIXME: Add -v to releng/builder and change this value to more common "$" (without quotes, with backslash). TODO: Replace usage with the strict version.
-${DEFAULT_LINUX_PROMPT_STRICT} ]> # A more strict prompt substring, this only matches Bash prompt, not Mininet prompt.
-${DEFAULT_BGPCEP_LOG_LEVEL} ${DEFAULT_ODL_LOG_LEVEL} # Fallback Karaf log level specific to org.opendaylight.bgpcep.
-${DEFAULT_ODL_LOG_LEVEL} INFO # Some suites allow to change overall Karaf log level, this is the default value to set or fall back.
-${DEFAULT_PASSWORD} ${EMPTY} # Generic *_SYSTEM linux password. If empty, SSHLibrary.Login_With_Public_Key is attempted instead of SSHLibrary.Login. TODO: Rename to DEFAULT_LINUX_PASSWORD.
-${DEFAULT_PROTOCOL_LOG_LEVEL} ${DEFAULT_ODL_LOG_LEVEL} # Fallback Karaf log level specific to org.opendaylight.protocol.
-${DEFAULT_USER} jenkins # Generic *_SYSTEM linux user name name. TODO: Rename to DEFUALT_LINUX_USER. FIXME: Add -v to releng/builder and change the value to something more common, e.g. "vagrant".
-${DEFAULT_TIMEOUT} 30s # Generic *_SYSTEM SSH.Login timeout. Some systems are slow to authenticate.
-${DEFAULT_TIMEOUT_HTTP} 5 # Used for HTTP connections
-${DELETE_DASHBOARDRECORD} /restconf/operations/dashboardrule:delete-dashboard # FIXME: Move to a separate Centinel-related Resource and add description.
-${ELASTICPORT} 9200 # Port to use when interacting with ElasticSearch. FIXME: Hide into a specific Resource.
-@{EMPTY_LIST} # Empty list for KWs with list parameters, see: https://github.com/robotframework/robotframework/issues/2243
-${ENABLE_GLOBAL_TEST_DEADLINES} True # Some suites need this to avoid getting stuck. FIXME: Move to the Resource which uses this.
-${ESCAPE_CHARACTER} \x1b # A more readable alias to the special escape character.
-${FAIL_ON_EXCEPTIONS} False # global flag (can/should be tweak on pybot command line) which suites can use if they are validating exceptions to pass/fail tests on
-${FIB_ENTRIES_URL} ${CONFIG_API}/odl-fib:fibEntries/
-${FLOWFILTERENTRIES_CREATE} flowfilterentries.json # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${FLOWFILTERS} flowfilters/in # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${FLOWFILTERS_CREATE} flowfilters.json # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${FLOWFILTERS_UPDATE} flowfilterentries # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${FLOWLISTS} flowlists # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${FLOWLISTS_CREATE} flowlists.json # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${FLOWLISTENTRIES_CREATE} flowlistentries.json # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${GBP_BASE_ENDPOINTS_API} /restconf/operational/base-endpoint:endpoints # FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
-${GBP_ENDPOINTS_API} /restconf/operational/endpoint:endpoints # FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
-${GBP_REGEP_API} /restconf/operations/endpoint:register-endpoint # FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
-${GBP_TENANTS_API} /restconf/config/policy:tenants # FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
-${GBP_TUNNELS_API} /restconf/config/opendaylight-inventory:nodes # FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
-${GBP_UNREGEP_API} /restconf/operations/endpoint:unregister-endpoint # FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
-${GENIUS_IFM_CONFIG_FLAG} ${KARAF_HOME}/etc/opendaylight/datastore/initial/config/genius-ifm-config.xml
-${GENIUS_ITM_CONFIG_FLAG} ${KARAF_HOME}/etc/opendaylight/datastore/initial/config/genius-itm-config.xml
-${GET_CONFIGURATION_URI} /restconf/operational/configuration:configurationRecord/ # FIXME: Move to a separate Centinel-related Resource and add description.
-${GET_DASHBOARDRECORD} /restconf/operational/dashboardrule:dashboardRecord/ # FIXME: Move to a separate Centinel-related Resource and add description.
-${GET_INTENTS_URI} /retconf/config/intent:intents # FIXME: Move to a separate Nemo-related Resource and add description.
-&{HEADERS} Content-Type=application/json # Deprecated. Sometimes conflicts with argument name. TODO: Migrate most suites to TemplatedRequests, then chose a more descriptive name.
-&{HEADERS_YANG_JSON} Content-Type=application/json # Content type for JSON data, used to work around Requests auto-serialization. FIXME: keep it as 'application/json' to make it work for both Bierman02 & RFC8040 URLs. Change it to RFC8040 media type once RFC8040 migration is completed.
-&{HEADERS_YANG_RFC8040_JSON} Content-Type=application/yang-data+json
-&{HEADERS_XML} Content-Type=application/xml # Content type for XML data. TODO: Hide into more specific Resource if possible.
-${KARAF_PROMPT_LOGIN} opendaylight-user # This is used for karaf console login.
-${ICMP_TYPE} 135
-${KARAF_DETAILED_PROMPT} @${ESCAPE_CHARACTER}\[0m${ESCAPE_CHARACTER}\[34mroot${ESCAPE_CHARACTER}\[0m> # Larger substring of Karaf prompt, shorter ones may result in false positives.
-${KARAF_HOME} ${WORKSPACE}${/}${BUNDLEFOLDER} # Karaf home directory path.
-${KARAF_LOG} ${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log # location of karaf.log in standard CSIT jobs
-${KARAF_PASSWORD} karaf # Plaintext password to authenticate to Karaf console.
-${KARAF_PROMPT} opendaylight-user.*root.*> # This is used for interactive read until prompt in regexp format.
-${KARAF_SHELL_PORT} 8101 # ODL provides SSH access to Karaf consoleon this port.
-${KARAF_USER} karaf # User name to authenticate to Karaf SSH console.
-${KEYFILE_PASS} any # Implementation detail related to SSHLibrary.Login_With_Public_Key. TODO: Hide in SSHKeywords.
-${KEYSTORE_PATH} /tmp/${BUNDLEFOLDER}/configuration/ssl/.keystore # Full path of keystore for TLS communication
-${KEYSTORE_RELATIVE_PATH} configuration/ssl/.keystore # Relative path of keystore for TLS communication
-${LFM_RPC_API} /restconf/operations/odl-mappingservice # FIXME: Move to a separate LispFlowMapping-related Resource and add description.
-${LFM_RPC_API_LI} /restconf/operations/lfm-mapping-database # FIXME: Move to a separate LispFlowMapping-related Resource and add description.
-${LFM_SB_RPC_API} /restconf/operations/odl-lisp-sb # FIXME: Move to a separate LispFlowMapping-related Resource and add description.
-${MODULES_API} /rests/data/ietf-yang-library:modules-state # FIXME: Move to a separate Resource and add description.
-${NEUTRON} 127.0.0.1 # FIXME: Move to a separate Neutron-related Resource and add description.
-${NEUTRONURL} http://${NEUTRON}:9696 # FIXME: Move to a separate Neutron-related Resource and add description.
-${NEUTRON_NB_API} /controller/nb/v2/neutron # FIXME: Move to a separate Neutron-related Resource and add description.
-${NEUTRON_NETWORKS_API} ${NEUTRON_NB_API}/networks # FIXME: Move to a separate Neutron-related Resource and add description.
-${NEUTRON_SUBNETS_API} ${NEUTRON_NB_API}/subnets # FIXME: Move to a separate Neutron-related Resource and add description.
-${NEUTRON_PORTS_API} ${NEUTRON_NB_API}/ports # FIXME: Move to a separate Neutron-related Resource and add description.
-${NEUTRON_ROUTERS_API} ${NEUTRON_NB_API}/routers # FIXME: Move to a separate Neutron-related Resource and add description.
-${ODL_AKKA_PORT} 2550 # Port number akka cluster communicates on
-${ODL_BGP_PORT} 1790 # ODL side of BGP communication listens on this port number.
-${ODL_CONTROLLER_SESSION} ${NONE} # Deprecated. Not clear if this refers to HTTP or SSH sessions. FIXME: Eradicate, or at least convert to a resource-private variable.
-${ODL_NETCONF_CONFIG_PORT} 1830 # Port number ODL NETCONF server of Config Subsystem listens on.
-${ODL_NETCONF_MDSAL_PORT} 2830 # Port number ODL NETCONF server of MD-SAL listens on.
-${ODL_NETCONF_NAMESPACE} urn:ietf:params:xml:ns:netconf:base:1.0 # Namespace of standardized NETCONF elements.
-${ODL_NETCONF_PASSWORD} ${ODL_RESTCONF_PASSWORD} # Both ODL Netconf servers require this password to authenticate.
-${ODL_NETCONF_PROMPT} ]]>]]> # Standard prompt string for NETCONF protocol.
-${ODL_NETCONF_USER} ${ODL_RESTCONF_USER} # Both ODL Netconf servers require this user name to authenticate.
-${ODL_OF_PLUGIN} lithium # Codename of OpenFlowPlugin implementation ODL is configured to use.
+&{ACCEPT_EMPTY} # Empty accept header. ODL should send JSON data in this case. TODO: Hide into more specific Resource if possible.
+# Header for accpeting JSON data. TODO: Hide into more specific Resource if possible.
+&{ACCEPT_JSON}
+... Accept=application/json
+# Header for accepting XML data. TODO: Hide into more specific Resource if possible.
+&{ACCEPT_XML}
+... Accept=application/xml
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${ALERTFIELDCONTENTRULERECORD}
+... /restconf/config/alertrule:alertFieldContentRuleRecord/
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${ALERTFIELDVALUERULERECORD}
+... /restconf/config/alertrule:alertFieldValueRuleRecord
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${ALERTMESSAGECOUNTRULERECORD}
+... /restconf/config/alertrule:alertMessageCountRuleRecord/
+# Authentication tuple for accessing ODL RESTCONF server. TODO: Migrate most suites to TemplatedRequests, then chose a more descriptive name.
+@{AUTH}
+... ${ODL_RESTCONF_USER}
+... ${ODL_RESTCONF_PASSWORD}
+# Authentication tuple for accessing Keystone API serveri
+@{AUTH_ADMIN_SDN}
+... admin
+... secret
+# Authentication tuple for accessing Keystone API server
+@{AUTH_CSC_SDN}
+... CSC_user
+... cscuser
+# Authentication tuple for accessing Keystone API server
+@{AUTH_CSC_NO_ADMIN}
+... CSC_user_no_admin
+... cscusernoadmin
+# Authentication tuple for accessing ODL RESTCONF server with Keystone Authentication
+@{AUTH_INVALID}
+... invaliduser
+... invinvuser
+# Authentication tuple for accessing ODL RESTCONF server with Keystone Authentication
+@{AUTH_SDN}
+... sdnadmin
+... sdnsdn
+# Authentication tuple for accessing ODL RESTCONF server with Keystone Authentication
+@{AUTH_SDN_DOMAIN}
+... sdnadmin@sdn
+... sdnsdn
+# Authentication tuple for accessing ODL RESTCONF server with Keystone Authentication
+@{AUTH_SDN_WRONG_DOM}
+... sdnadmin@wrong
+... sdnsdn
+# FIXME: Move to a separate AAA-related Resource and add description.
+${AUTH_TOKEN_API}
+... /oauth2/token
+${BGP_TOOL_PORT} 17900 # Tool side of BGP communication listens on this port.
+# Some suites temporarily override org.opendaylight.bgpcep Karaf log level to this value.
+${BGPCEP_LOG_LEVEL}
+... ${DEFAULT_BGPCEP_LOG_LEVEL}
+# default location to find opendaylight root folder. Upstream CSIT overrides this on the pybot command line.
+${BUNDLEFOLDER}
+... /opt/opendaylight
+# FIXME: Move to a separate Resource and add description.
+${CONFIG_NODES_API}
+... /restconf/config/opendaylight-inventory:nodes
+# FIXME: Move to a separate Resource and add description.
+${CONFIG_TOPO_API}
+... /restconf/config/network-topology:network-topology
+# FIXME: Move to a separate Resource and add description.
+${CONFIG_API}
+... /restconf/config
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${CONTAINER}
+... default
+${CONTROLLER} ${ODL_SYSTEM_IP} # Deprecated. FIXME: Eradicate.
+${CONTROLLER_PASSWORD} ${ODL_SYSTEM_PASSWORD} # Deprecated. FIXME: Eradicate.
+${CONTROLLER_PROMPT} ${DEFAULT_LINUX_PROMPT} # Deprecated. FIXME: Eradicate.
+${CONTROLLERS} ${ODL_SYSTEM_IP_LIST} # Deprecated. FIXME: Eradicate.
+# FIXME: Move to a separate Resource and add description.
+${CONTROLLER_CONFIG_MOUNT}
+... /restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount
+# Max number of seconds test will wait for a controller to stop. FIXME: Hiden into a Resource and rename.
+${CONTROLLER_STOP_TIMEOUT}
+... 120
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${CREATE_PATHPOLICY_TOPOLOGY_FILE}
+... topo-3sw-2host_multipath.py
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${CREATE_PATHPOLICY_TOPOLOGY_FILE_PATH}
+... MininetTopo/${CREATE_PATHPOLICY_TOPOLOGY_FILE}
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${CREATE_VLAN_TOPOLOGY_FILE}
+... vlan_vtn_test.py
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${CREATE_VLAN_TOPOLOGY_FILE_PATH}
+... MininetTopo/${CREATE_VLAN_TOPOLOGY_FILE}
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${CTRLS}
+... controllers
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description
+${CTRLS_CREATE}
+... controllers.json
+# Full path of custom.properties file
+${CUSTOMPROP}
+... /tmp/${BUNDLEFOLDER}/etc/custom.properties
+# Generic *_SYSTEM prompt for SSHLibrary.Read_Unti_Prompt. Current value is there for historic reasons. FIXME: Add -v to releng/builder and change this value to more common "$" (without quotes, with backslash). TODO: Replace usage with the strict version.
+${DEFAULT_LINUX_PROMPT}
+... >
+# A more strict prompt substring, this only matches Bash prompt, not Mininet prompt.
+${DEFAULT_LINUX_PROMPT_STRICT}
+... ]>
+# Fallback Karaf log level specific to org.opendaylight.bgpcep.
+${DEFAULT_BGPCEP_LOG_LEVEL}
+... ${DEFAULT_ODL_LOG_LEVEL}
+# Some suites allow to change overall Karaf log level, this is the default value to set or fall back.
+${DEFAULT_ODL_LOG_LEVEL}
+... INFO
+# Generic *_SYSTEM linux password. If empty, SSHLibrary.Login_With_Public_Key is attempted instead of SSHLibrary.Login. TODO: Rename to DEFAULT_LINUX_PASSWORD.
+${DEFAULT_PASSWORD}
+... ${EMPTY}
+# Fallback Karaf log level specific to org.opendaylight.protocol.
+${DEFAULT_PROTOCOL_LOG_LEVEL}
+... ${DEFAULT_ODL_LOG_LEVEL}
+# Generic *_SYSTEM linux user name name. TODO: Rename to DEFUALT_LINUX_USER. FIXME: Add -v to releng/builder and change the value to something more common, e.g. "vagrant".
+${DEFAULT_USER}
+... jenkins
+# Generic *_SYSTEM SSH.Login timeout. Some systems are slow to authenticate.
+${DEFAULT_TIMEOUT}
+... 30s
+${DEFAULT_TIMEOUT_HTTP} 5 # Used for HTTP connections
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${DELETE_DASHBOARDRECORD}
+... /restconf/operations/dashboardrule:delete-dashboard
+# Port to use when interacting with ElasticSearch. FIXME: Hide into a specific Resource.
+${ELASTICPORT}
+... 9200
+@{EMPTY_LIST} # Empty list for KWs with list parameters, see: https://github.com/robotframework/robotframework/issues/2243
+# Some suites need this to avoid getting stuck. FIXME: Move to the Resource which uses this.
+${ENABLE_GLOBAL_TEST_DEADLINES}
+... True
+${ESCAPE_CHARACTER} \x1b # A more readable alias to the special escape character.
+# global flag (can/should be tweak on pybot command line) which suites can use if they are validating exceptions to pass/fail tests on
+${FAIL_ON_EXCEPTIONS}
+... False
+${FIB_ENTRIES_URL} ${CONFIG_API}/odl-fib:fibEntries/
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${FLOWFILTERENTRIES_CREATE}
+... flowfilterentries.json
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${FLOWFILTERS}
+... flowfilters/in
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${FLOWFILTERS_CREATE}
+... flowfilters.json
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${FLOWFILTERS_UPDATE}
+... flowfilterentries
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${FLOWLISTS}
+... flowlists
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${FLOWLISTS_CREATE}
+... flowlists.json
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${FLOWLISTENTRIES_CREATE}
+... flowlistentries.json
+# FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
+${GBP_BASE_ENDPOINTS_API}
+... /restconf/operational/base-endpoint:endpoints
+# FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
+${GBP_ENDPOINTS_API}
+... /restconf/operational/endpoint:endpoints
+# FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
+${GBP_REGEP_API}
+... /restconf/operations/endpoint:register-endpoint
+# FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
+${GBP_TENANTS_API}
+... /restconf/config/policy:tenants
+# FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
+${GBP_TUNNELS_API}
+... /restconf/config/opendaylight-inventory:nodes
+# FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
+${GBP_UNREGEP_API}
+... /restconf/operations/endpoint:unregister-endpoint
+${GENIUS_IFM_CONFIG_FLAG}
+... ${KARAF_HOME}/etc/opendaylight/datastore/initial/config/genius-ifm-config.xml
+${GENIUS_ITM_CONFIG_FLAG}
+... ${KARAF_HOME}/etc/opendaylight/datastore/initial/config/genius-itm-config.xml
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${GET_CONFIGURATION_URI}
+... /restconf/operational/configuration:configurationRecord/
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${GET_DASHBOARDRECORD}
+... /restconf/operational/dashboardrule:dashboardRecord/
+# FIXME: Move to a separate Nemo-related Resource and add description.
+${GET_INTENTS_URI}
+... /retconf/config/intent:intents
+# Deprecated. Sometimes conflicts with argument name. TODO: Migrate most suites to TemplatedRequests, then chose a more descriptive name.
+&{HEADERS}
+... Content-Type=application/json
+# Content type for JSON data, used to work around Requests auto-serialization. FIXME: keep it as 'application/json' to make it work for both Bierman02 & RFC8040 URLs. Change it to RFC8040 media type once RFC8040 migration is completed.
+&{HEADERS_YANG_JSON}
+... Content-Type=application/json
+&{HEADERS_YANG_RFC8040_JSON} Content-Type=application/yang-data+json
+# Content type for XML data. TODO: Hide into more specific Resource if possible.
+&{HEADERS_XML}
+... Content-Type=application/xml
+${KARAF_PROMPT_LOGIN} opendaylight-user # This is used for karaf console login.
+${ICMP_TYPE} 135
+# Larger substring of Karaf prompt, shorter ones may result in false positives.
+${KARAF_DETAILED_PROMPT}
+... @${ESCAPE_CHARACTER}\[0m${ESCAPE_CHARACTER}\[34mroot${ESCAPE_CHARACTER}\[0m>
+${KARAF_HOME} ${WORKSPACE}${/}${BUNDLEFOLDER} # Karaf home directory path.
+# location of karaf.log in standard CSIT jobs
+${KARAF_LOG}
+... ${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log
+${KARAF_PASSWORD} karaf # Plaintext password to authenticate to Karaf console.
+# This is used for interactive read until prompt in regexp format.
+${KARAF_PROMPT}
+... opendaylight-user.*root.*>
+${KARAF_SHELL_PORT} 8101 # ODL provides SSH access to Karaf consoleon this port.
+${KARAF_USER} karaf # User name to authenticate to Karaf SSH console.
+# Implementation detail related to SSHLibrary.Login_With_Public_Key. TODO: Hide in SSHKeywords.
+${KEYFILE_PASS}
+... any
+# Full path of keystore for TLS communication
+${KEYSTORE_PATH}
+... /tmp/${BUNDLEFOLDER}/configuration/ssl/.keystore
+# Relative path of keystore for TLS communication
+${KEYSTORE_RELATIVE_PATH}
+... configuration/ssl/.keystore
+# FIXME: Move to a separate LispFlowMapping-related Resource and add description.
+${LFM_RPC_API}
+... /restconf/operations/odl-mappingservice
+# FIXME: Move to a separate LispFlowMapping-related Resource and add description.
+${LFM_RPC_API_LI}
+... /restconf/operations/lfm-mapping-database
+# FIXME: Move to a separate LispFlowMapping-related Resource and add description.
+${LFM_SB_RPC_API}
+... /restconf/operations/odl-lisp-sb
+# FIXME: Move to a separate Resource and add description.
+${MODULES_API}
+... /rests/data/ietf-yang-library:modules-state
+# FIXME: Move to a separate Neutron-related Resource and add description.
+${NEUTRON}
+... 127.0.0.1
+# FIXME: Move to a separate Neutron-related Resource and add description.
+${NEUTRONURL}
+... http://${NEUTRON}:9696
+# FIXME: Move to a separate Neutron-related Resource and add description.
+${NEUTRON_NB_API}
+... /controller/nb/v2/neutron
+# FIXME: Move to a separate Neutron-related Resource and add description.
+${NEUTRON_NETWORKS_API}
+... ${NEUTRON_NB_API}/networks
+# FIXME: Move to a separate Neutron-related Resource and add description.
+${NEUTRON_SUBNETS_API}
+... ${NEUTRON_NB_API}/subnets
+# FIXME: Move to a separate Neutron-related Resource and add description.
+${NEUTRON_PORTS_API}
+... ${NEUTRON_NB_API}/ports
+# FIXME: Move to a separate Neutron-related Resource and add description.
+${NEUTRON_ROUTERS_API}
+... ${NEUTRON_NB_API}/routers
+${ODL_AKKA_PORT} 2550 # Port number akka cluster communicates on
+${ODL_BGP_PORT} 1790 # ODL side of BGP communication listens on this port number.
+# Deprecated. Not clear if this refers to HTTP or SSH sessions. FIXME: Eradicate, or at least convert to a resource-private variable.
+${ODL_CONTROLLER_SESSION}
+... ${NONE}
+${ODL_NETCONF_CONFIG_PORT} 1830 # Port number ODL NETCONF server of Config Subsystem listens on.
+${ODL_NETCONF_MDSAL_PORT} 2830 # Port number ODL NETCONF server of MD-SAL listens on.
+# Namespace of standardized NETCONF elements.
+${ODL_NETCONF_NAMESPACE}
+... urn:ietf:params:xml:ns:netconf:base:1.0
+# Both ODL Netconf servers require this password to authenticate.
+${ODL_NETCONF_PASSWORD}
+... ${ODL_RESTCONF_PASSWORD}
+${ODL_NETCONF_PROMPT} ]]>]]> # Standard prompt string for NETCONF protocol.
+# Both ODL Netconf servers require this user name to authenticate.
+${ODL_NETCONF_USER}
+... ${ODL_RESTCONF_USER}
+# Codename of OpenFlowPlugin implementation ODL is configured to use.
+${ODL_OF_PLUGIN}
+... lithium
# TODO: get rid of all uses of ODL_OF_PORT and use ODL_OF_PORT_6633 instead, if 6653 is not acceptable
-${ODL_OF_PORT} 6633 # Port number ODL communicates using OpenFlow protocol on.
-${ODL_OF_PORT_6633} 6633 # Port number ODL communicates using OpenFlow protocol on.
-${ODL_OF_PORT_6653} 6653 # Port number ODL communicates using OpenFlow protocol on.
-${ODL_RESTCONF_USER} admin # Username for basic HTTP authentication used by requests against ODL RESTCONF server.
-${ODL_RESTCONF_PASSWORD} admin # Plaintext password for basic HTTP authentication used by requests against ODL RESTCONF server.
-${ODL_SYSTEM_1_IP} 127.0.0.1 # IP address of system hosting member 1 od ODL cluster.
-${ODL_SYSTEM_2_IP} 127.0.0.2 # IP address of system hosting member 2 od ODL cluster.
-${ODL_SYSTEM_3_IP} 127.0.0.3 # IP address of system hosting member 3 od ODL cluster.
-${ODL_SYSTEM_IP} ${ODL_SYSTEM_1_IP} # IP address of system hosting ODL for SSHLibrary to connect to. First node if ODL is a cluster.
-@{ODL_SYSTEM_IP_LIST} ${ODL_SYSTEM_1_IP} ${ODL_SYSTEM_2_IP} ${ODL_SYSTEM_3_IP} # Deprecated. List of ODL cluster member IP addresses. See ClusterManagement.robot for alternatives.
-${ODL_SYSTEM_USER} ${DEFAULT_USER} # Linux username specific for ODL systems.
-${ODL_SYSTEM_PASSWORD} ${DEFAULT_PASSWORD} # Linux password (or empty to use public key) specific for ODL systems.
-${ODL_SYSTEM_PROMPT} ${DEFAULT_LINUX_PROMPT} # Bash prompt substring specific for ODL systems.
-${OPERATIONAL_API} /restconf/operational # FIXME: Move to a separate Resource and add description.
-${OPERATIONS_API} /restconf/operations # FIXME: Move to a separate Resource and add description.
-${OPERATIONAL_GBP_TENANTS_API} /restconf/operational/policy:tenants # FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
-${OPERATIONAL_NODES_API} /restconf/operational/opendaylight-inventory:nodes # FIXME: Move to a separate Resource and add description.
-${OPERATIONAL_NODES_NETVIRT} /restconf/operational/network-topology:network-topology/topology/netvirt:1 \ # FIXME: Move to a separate Resource and add description.
-${OPERATIONAL_TOPO_API} /restconf/operational/network-topology:network-topology # FIXME: Move to a separate Resource and add description.
-${OS_SYSTEM_PROMPT} \$ # Prompt substring specific to OpenStack systems.
-${OS_SYSTEM_PROMPT_STRICT} \]$ # Prompt substring specific to OpenStack systems.
-${OS_CMD_SUCCESS} Command Returns 0
-${OSREST} /v2.0/networks # FIXME: Move to a separate Neutron-related Resource and add description.
-${OVSDBPORT} 6640 # Port number ODL uses for OVSDB protocol communication. TODO: Move to OVSDB-specific Resource.
-${PASSWORD} ${DEFAULT_PASSWORD} # Deprecated. FIXME: Eradicate.
-${PORTMAP_CREATE} portmap.json # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${PORT} 8080 # Deprecated. Generic HTTP port. FIXME: Eradicate.
-${PORTS} ports/detail.json # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${PREDEFINE_CONNECTION_URI} /restconf/config/nemo-object:connection-definitions # FIXME: Move to a separate Nemo-related Resource and add description.
-${PREDEFINE_NODE_URI} /restconf/config/nemo-object:node-definitions # FIXME: Move to a separate Nemo-related Resource and add description.
-${PREDEFINE_ROLE_URI} /restconf/config/nemo-user:user-roles # FIXME: Move to a separate Nemo-related Resource and add description.
-${PREFIX} http://${ODL_SYSTEM_IP}:${PORT} # Deprecated. FIXME: Name is to generic. Eradicate.
-${PROTOCOL_LOG_LEVEL} ${DEFAULT_PROTOCOL_LOG_LEVEL} # Some suites temporarily override org.opendaylight.protocol Karaf log level to this value.
-${PWD} ${ODL_RESTCONF_PASSWORD} # Deprecated. FIXME: Eradicate.
-${REGEX_IPROUTE} ip-route:169.254.169.254 via [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}
-${REGEX_IPV4} [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}
-${REGEX_NAMESERVER} nameserver [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}
-${REGEX_OBTAINED} [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3} obtained
-${REGEX_UUID} [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
-${REGISTER_TENANT_URI} /restconf/operations/nemo-intent:register-user # FIXME: Move to a separate Nemo-related Resource and add description.
-${RESTCONFPORT} 8181 # Primary port for ODL RESTCONF, although 8080 should also work.
-${RESTCONFPORT_TLS} 8443 # Port for ODL RESTCONF Secure (TLS) operations
-${RESTPORT} 8282 # Deprecated. Restconf port used by AD-SAL services. FIXME: Eradicate.
-${REST_API} /rests/data
-${REVOKE_TOKEN_API} /oauth2/revoke # FIXME: Move to a separate AAA-related Resource and add description.
-${SCOPE} sdn # Scope, used for some types of HTTP requests agains ODL RESTCONF. TODO: Migrate most suites to TemplatedRequests or AuthStandalone, then chose a more descriptive name.
-&{SEND_ACCEPT_XML_HEADERS} Content-Type=application/xml Accept=application/xml # Accept and Content type for XML data. TODO: Hide into more specific Resource if possible.
-${SET_ALERTFIELDCONTENTRULERECORD} /restconf/operations/alertrule:set-alert-field-content-rule # FIXME: Move to a separate Centinel-related Resource and add description.
-${SET_ALERTFIELDVALUERULERECORD} /restconf/operations/alertrule:set-alert-field-value-rule # FIXME: Move to a separate Centinel-related Resource and add description.
-${SET_ALERTMESSAGECOUNTRULERECORD} /restconf/operations/alertrule:set-alert-message-count-rule # FIXME: Move to a separate Centinel-related Resource and add description.
-${SET_CONFIGURATION_URI} /restconf/operations/configuration:set-centinel-configurations # FIXME: Move to a separate Centinel-related Resource and add description.
-${SET_DASHBOARDRECORD} /restconf/operations/dashboardrule:set-dashboard # FIXME: Move to a separate Centinel-related Resource and add description.
-${SET_STREAMRECORD} /restconf/operations/stream:set-stream # FIXME: Move to a separate Centinel-related Resource and add description.
-${SET_SUBSCRIBEUSER} /restconf/operations/subscribe:subscribe-user # FIXME: Move to a separate Centinel-related Resource and add description.
-${SSH_KEY} id_rsa # Implementation detail related to SSHLibrary.Login_With_Public_Key. TODO: Hide in SSHKeywords.
-${STREAMRECORD_CONFIG} /restconf/config/stream:streamRecord # FIXME: Move to a separate Centinel-related Resource and add description.
-${STRUCTURE_INTENT_URI} /restconf/operations/nemo-intent:structure-style-nemo-update # FIXME: Move to a separate Nemo-related Resource and add description.
-${SUBSCRIPTION} /restconf/config/subscribe:subscription/ # FIXME: Move to a separate Centinel-related Resource and add description.
-${SW} switches # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${TOOLS_SYSTEM_1_IP} 127.0.0.1 # IP address of first system hosting testing tools.
-${TOOLS_SYSTEM_2_IP} 127.0.0.2 # IP address of second system hosting testing tools.
-${TOOLS_SYSTEM_3_IP} 127.0.0.3 # IP address of third system hosting testing tools.
-${TOOLS_SYSTEM_IP} ${TOOLS_SYSTEM_1_IP} # IP address of primary system hosting testing tools.
-${TOOLS_SYSTEM_USER} ${DEFAULT_USER} # Linux user name specific for tools systems.
-${TOOLS_SYSTEM_PASSWORD} ${DEFAULT_PASSWORD} # Linux password specific for tools systems.
-${TOOLS_SYSTEM_PROMPT} ${DEFAULT_LINUX_PROMPT} # Bash prompt substring specific for tools systems.
-${TOPO_TREE_DEPTH} 3 # Part of Mininet configuration? FIXME: Find who uses this and eliminate, or at least add a good description.
-${TOPO_TREE_FANOUT} 2 # Part of Mininet configuration? FIXME: Find who uses this and eliminate, or at least add a good description.
-${TOPO_TREE_LEVEL} 2 # Part of Mininet configuration? FIXME: Find who uses this and eliminate, or at least add a good description.
-${TOPOLOGY_URL} network-topology:network-topology/topology # FIXME: Move to a separate Resource and add description.
-${USER} ${ODL_RESTCONF_USER} # Deprecated. FIXME: Eradicate.
-${VBRIFS} interfaces # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${VBRIFS_CREATE} interfaces.json # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${VBRS} vbridges # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${VBRS_CREATE} vbridges.json # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${VLANMAP_CREATE} vlanmaps.json # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${VTNC} 127.0.0.1 # IP address where VTN Coordinator application is running. TODO: Move to a VTN-specific Resource.
-&{VTNC_HEADERS} Content-Type=application/json username=admin password=adminpass # Dict of headers to use for HTTP requests against VTN Coordinator. TODO: Move to a VTN-specific Resource.
-${VTNC_PREFIX} http://${VTNC}:${VTNCPORT} # Shorthand for composing HTTP requests. TODO: Move to a VTN-specific Resource.
-${VTNCPORT} 8083 # Port number VTN Coordinator listens on. TODO: Move to a VTN-specific Resource.
-${VTN_INVENTORY_NODE_API} /restconf/operational/vtn-inventory:vtn-nodes # Path part of restconf URL towards operational vtn-nodes. TODO: Move to a VTN-specific Resource.
-${VTNS} vtns # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${VTNS_CREATE} vtns.json # A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
-${VTNWEBAPI} /vtn-webapi # Directory part of URI used when sending HTTP requests to VTN Coordinator. TODO: Move to a VTN-specific Resource.
+${ODL_OF_PORT} 6633 # Port number ODL communicates using OpenFlow protocol on.
+${ODL_OF_PORT_6633} 6633 # Port number ODL communicates using OpenFlow protocol on.
+${ODL_OF_PORT_6653} 6653 # Port number ODL communicates using OpenFlow protocol on.
+# Username for basic HTTP authentication used by requests against ODL RESTCONF server.
+${ODL_RESTCONF_USER}
+... admin
+# Plaintext password for basic HTTP authentication used by requests against ODL RESTCONF server.
+${ODL_RESTCONF_PASSWORD}
+... admin
+${ODL_SYSTEM_1_IP} 127.0.0.1 # IP address of system hosting member 1 od ODL cluster.
+${ODL_SYSTEM_2_IP} 127.0.0.2 # IP address of system hosting member 2 od ODL cluster.
+${ODL_SYSTEM_3_IP} 127.0.0.3 # IP address of system hosting member 3 od ODL cluster.
+# IP address of system hosting ODL for SSHLibrary to connect to. First node if ODL is a cluster.
+${ODL_SYSTEM_IP}
+... ${ODL_SYSTEM_1_IP}
+# Deprecated. List of ODL cluster member IP addresses. See ClusterManagement.robot for alternatives.
+@{ODL_SYSTEM_IP_LIST}
+... ${ODL_SYSTEM_1_IP}
+... ${ODL_SYSTEM_2_IP}
+... ${ODL_SYSTEM_3_IP}
+${ODL_SYSTEM_USER} ${DEFAULT_USER} # Linux username specific for ODL systems.
+# Linux password (or empty to use public key) specific for ODL systems.
+${ODL_SYSTEM_PASSWORD}
+... ${DEFAULT_PASSWORD}
+# Bash prompt substring specific for ODL systems.
+${ODL_SYSTEM_PROMPT}
+... ${DEFAULT_LINUX_PROMPT}
+# FIXME: Move to a separate Resource and add description.
+${OPERATIONAL_API}
+... /restconf/operational
+# FIXME: Move to a separate Resource and add description.
+${OPERATIONS_API}
+... /restconf/operations
+# FIXME: Move to a separate GroupBasedPolicy-related Resource and add description.
+${OPERATIONAL_GBP_TENANTS_API}
+... /restconf/operational/policy:tenants
+# FIXME: Move to a separate Resource and add description.
+${OPERATIONAL_NODES_API}
+... /restconf/operational/opendaylight-inventory:nodes
+# FIXME: Move to a separate Resource and add description.
+${OPERATIONAL_NODES_NETVIRT}
+... /restconf/operational/network-topology:network-topology/topology/netvirt:1
+... \
+# FIXME: Move to a separate Resource and add description.
+${OPERATIONAL_TOPO_API}
+... /restconf/operational/network-topology:network-topology
+${OS_SYSTEM_PROMPT} \$ # Prompt substring specific to OpenStack systems.
+${OS_SYSTEM_PROMPT_STRICT} \]$ # Prompt substring specific to OpenStack systems.
+${OS_CMD_SUCCESS} Command Returns 0
+# FIXME: Move to a separate Neutron-related Resource and add description.
+${OSREST}
+... /v2.0/networks
+# Port number ODL uses for OVSDB protocol communication. TODO: Move to OVSDB-specific Resource.
+${OVSDBPORT}
+... 6640
+${PASSWORD} ${DEFAULT_PASSWORD} # Deprecated. FIXME: Eradicate.
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${PORTMAP_CREATE}
+... portmap.json
+${PORT} 8080 # Deprecated. Generic HTTP port. FIXME: Eradicate.
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${PORTS}
+... ports/detail.json
+# FIXME: Move to a separate Nemo-related Resource and add description.
+${PREDEFINE_CONNECTION_URI}
+... /restconf/config/nemo-object:connection-definitions
+# FIXME: Move to a separate Nemo-related Resource and add description.
+${PREDEFINE_NODE_URI}
+... /restconf/config/nemo-object:node-definitions
+# FIXME: Move to a separate Nemo-related Resource and add description.
+${PREDEFINE_ROLE_URI}
+... /restconf/config/nemo-user:user-roles
+# Deprecated. FIXME: Name is to generic. Eradicate.
+${PREFIX}
+... http://${ODL_SYSTEM_IP}:${PORT}
+# Some suites temporarily override org.opendaylight.protocol Karaf log level to this value.
+${PROTOCOL_LOG_LEVEL}
+... ${DEFAULT_PROTOCOL_LOG_LEVEL}
+${PWD} ${ODL_RESTCONF_PASSWORD} # Deprecated. FIXME: Eradicate.
+${REGEX_IPROUTE}
+... ip-route:169.254.169.254 via [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}
+${REGEX_IPV4} [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}
+${REGEX_NAMESERVER} nameserver [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}
+${REGEX_OBTAINED} [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3} obtained
+${REGEX_UUID} [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
+# FIXME: Move to a separate Nemo-related Resource and add description.
+${REGISTER_TENANT_URI}
+... /restconf/operations/nemo-intent:register-user
+${RESTCONFPORT} 8181 # Primary port for ODL RESTCONF, although 8080 should also work.
+${RESTCONFPORT_TLS} 8443 # Port for ODL RESTCONF Secure (TLS) operations
+# Deprecated. Restconf port used by AD-SAL services. FIXME: Eradicate.
+${RESTPORT}
+... 8282
+${REST_API} /rests/data
+# FIXME: Move to a separate AAA-related Resource and add description.
+${REVOKE_TOKEN_API}
+... /oauth2/revoke
+# Scope, used for some types of HTTP requests agains ODL RESTCONF. TODO: Migrate most suites to TemplatedRequests or AuthStandalone, then chose a more descriptive name.
+${SCOPE}
+... sdn
+# Accept and Content type for XML data. TODO: Hide into more specific Resource if possible.
+&{SEND_ACCEPT_XML_HEADERS}
+... Content-Type=application/xml
+... Accept=application/xml
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${SET_ALERTFIELDCONTENTRULERECORD}
+... /restconf/operations/alertrule:set-alert-field-content-rule
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${SET_ALERTFIELDVALUERULERECORD}
+... /restconf/operations/alertrule:set-alert-field-value-rule
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${SET_ALERTMESSAGECOUNTRULERECORD}
+... /restconf/operations/alertrule:set-alert-message-count-rule
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${SET_CONFIGURATION_URI}
+... /restconf/operations/configuration:set-centinel-configurations
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${SET_DASHBOARDRECORD}
+... /restconf/operations/dashboardrule:set-dashboard
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${SET_STREAMRECORD}
+... /restconf/operations/stream:set-stream
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${SET_SUBSCRIBEUSER}
+... /restconf/operations/subscribe:subscribe-user
+# Implementation detail related to SSHLibrary.Login_With_Public_Key. TODO: Hide in SSHKeywords.
+${SSH_KEY}
+... id_rsa
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${STREAMRECORD_CONFIG}
+... /restconf/config/stream:streamRecord
+# FIXME: Move to a separate Nemo-related Resource and add description.
+${STRUCTURE_INTENT_URI}
+... /restconf/operations/nemo-intent:structure-style-nemo-update
+# FIXME: Move to a separate Centinel-related Resource and add description.
+${SUBSCRIPTION}
+... /restconf/config/subscribe:subscription/
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${SW}
+... switches
+${TOOLS_SYSTEM_1_IP} 127.0.0.1 # IP address of first system hosting testing tools.
+${TOOLS_SYSTEM_2_IP} 127.0.0.2 # IP address of second system hosting testing tools.
+${TOOLS_SYSTEM_3_IP} 127.0.0.3 # IP address of third system hosting testing tools.
+# IP address of primary system hosting testing tools.
+${TOOLS_SYSTEM_IP}
+... ${TOOLS_SYSTEM_1_IP}
+${TOOLS_SYSTEM_USER} ${DEFAULT_USER} # Linux user name specific for tools systems.
+${TOOLS_SYSTEM_PASSWORD} ${DEFAULT_PASSWORD} # Linux password specific for tools systems.
+# Bash prompt substring specific for tools systems.
+${TOOLS_SYSTEM_PROMPT}
+... ${DEFAULT_LINUX_PROMPT}
+# Part of Mininet configuration? FIXME: Find who uses this and eliminate, or at least add a good description.
+${TOPO_TREE_DEPTH}
+... 3
+# Part of Mininet configuration? FIXME: Find who uses this and eliminate, or at least add a good description.
+${TOPO_TREE_FANOUT}
+... 2
+# Part of Mininet configuration? FIXME: Find who uses this and eliminate, or at least add a good description.
+${TOPO_TREE_LEVEL}
+... 2
+# FIXME: Move to a separate Resource and add description.
+${TOPOLOGY_URL}
+... network-topology:network-topology/topology
+${USER} ${ODL_RESTCONF_USER} # Deprecated. FIXME: Eradicate.
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${VBRIFS}
+... interfaces
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${VBRIFS_CREATE}
+... interfaces.json
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${VBRS}
+... vbridges
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${VBRS_CREATE}
+... vbridges.json
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${VLANMAP_CREATE}
+... vlanmaps.json
+# IP address where VTN Coordinator application is running. TODO: Move to a VTN-specific Resource.
+${VTNC}
+... 127.0.0.1
+# Dict of headers to use for HTTP requests against VTN Coordinator. TODO: Move to a VTN-specific Resource.
+&{VTNC_HEADERS}
+... Content-Type=application/json
+... username=admin
+... password=adminpass
+# Shorthand for composing HTTP requests. TODO: Move to a VTN-specific Resource.
+${VTNC_PREFIX}
+... http://${VTNC}:${VTNCPORT}
+# Port number VTN Coordinator listens on. TODO: Move to a VTN-specific Resource.
+${VTNCPORT}
+... 8083
+# Path part of restconf URL towards operational vtn-nodes. TODO: Move to a VTN-specific Resource.
+${VTN_INVENTORY_NODE_API}
+... /restconf/operational/vtn-inventory:vtn-nodes
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${VTNS}
+... vtns
+# A shorthand. FIXME: Find who uses this and eliminate, or at least add a good description.
+${VTNS_CREATE}
+... vtns.json
+# Directory part of URI used when sending HTTP requests to VTN Coordinator. TODO: Move to a VTN-specific Resource.
+${VTNWEBAPI}
+... /vtn-webapi
# Keep this list sorted alphabetically.
*** Settings ***
-Documentation A resource file containing all global Yangman GUI variables
-... to help Yangman GUI and functional testing.
-Resource Variables.robot
+Documentation A resource file containing all global Yangman GUI variables
+... to help Yangman GUI and functional testing.
+
+Resource Variables.robot
+
*** Variables ***
-${YANGMAN_LOGO} //img[contains(@ng-src, "assets/images/logo_yangman.png") and contains(@id, "page_logo")]
-${TOGGLE_MENU_BUTTON} //a[@id="toggleMenu"]
-${LOGOUT_BUTTON} //a[@id="logout-button"]
+${YANGMAN_LOGO}
+... //img[contains(@ng-src, "assets/images/logo_yangman.png") and contains(@id, "page_logo")]
+${TOGGLE_MENU_BUTTON} //a[@id="toggleMenu"]
+${LOGOUT_BUTTON} //a[@id="logout-button"]
# Left Panel
-${MODULES_TAB_NAME} Modules
-${HISTORY_TAB_NAME} History
-${COLLECTIONS_TAB_NAME} Collections
-${LEFT_TAB_AREA} //md-tab-content[@id="tab-content-0"]
-${MODULES_TAB_SELECTED} ${LEFT_TAB_AREA}//md-tab-item[@aria-selected="true"]/span[contains(text(), "${MODULES_TAB_NAME}")]
-${MODULES_TAB_UNSELECTED} ${LEFT_TAB_AREA}//md-tab-item[@aria-selected="false"]/span[contains(text(), "${MODULES_TAB_NAME}")]
-${HISTORY_TAB_SELECTED} ${LEFT_TAB_AREA}//md-tab-item[@aria-selected="true"]/span[contains(text(), "${HISTORY_TAB_NAME}")]
-${HISTORY_TAB_UNSELECTED} ${LEFT_TAB_AREA}//md-tab-item[@aria-selected="false"]/span[contains(text(), "${HISTORY_TAB_NAME}")]
-${COLLECTIONS_TAB_SELECTED} ${LEFT_TAB_AREA}//md-tab-item[@aria-selected="true"]/span[contains(text(), "${COLLECTIONS_TAB_NAME}")]
-${COLLECTIONS_TAB_UNSELECTED} ${LEFT_TAB_AREA}//md-tab-item[@aria-selected="false"]/span[contains(text(), "${COLLECTIONS_TAB_NAME}")]
-${MODULES_WERE_LOADED_ALERT} //span[contains(text(), "Modules were loaded.")]
-${TOGGLE_MODULE_DETAIL_BUTTON_LEFT} //md-icon[@class="arrow-switcher material-icons" and @id="toggle-module-detail"]
-${TOGGLE_MODULE_DETAIL_BUTTON_RIGHT} //md-icon[@class="arrow-switcher material-icons arrow-switcher__left"" and @id="toggle-module-detail"]
+${MODULES_TAB_NAME} Modules
+${HISTORY_TAB_NAME} History
+${COLLECTIONS_TAB_NAME} Collections
+${LEFT_TAB_AREA} //md-tab-content[@id="tab-content-0"]
+${MODULES_TAB_SELECTED}
+... ${LEFT_TAB_AREA}//md-tab-item[@aria-selected="true"]/span[contains(text(), "${MODULES_TAB_NAME}")]
+${MODULES_TAB_UNSELECTED}
+... ${LEFT_TAB_AREA}//md-tab-item[@aria-selected="false"]/span[contains(text(), "${MODULES_TAB_NAME}")]
+${HISTORY_TAB_SELECTED}
+... ${LEFT_TAB_AREA}//md-tab-item[@aria-selected="true"]/span[contains(text(), "${HISTORY_TAB_NAME}")]
+${HISTORY_TAB_UNSELECTED}
+... ${LEFT_TAB_AREA}//md-tab-item[@aria-selected="false"]/span[contains(text(), "${HISTORY_TAB_NAME}")]
+${COLLECTIONS_TAB_SELECTED}
+... ${LEFT_TAB_AREA}//md-tab-item[@aria-selected="true"]/span[contains(text(), "${COLLECTIONS_TAB_NAME}")]
+${COLLECTIONS_TAB_UNSELECTED}
+... ${LEFT_TAB_AREA}//md-tab-item[@aria-selected="false"]/span[contains(text(), "${COLLECTIONS_TAB_NAME}")]
+${MODULES_WERE_LOADED_ALERT} //span[contains(text(), "Modules were loaded.")]
+${TOGGLE_MODULE_DETAIL_BUTTON_LEFT}
+... //md-icon[@class="arrow-switcher material-icons" and @id="toggle-module-detail"]
+${TOGGLE_MODULE_DETAIL_BUTTON_RIGHT}
+... //md-icon[@class="arrow-switcher material-icons arrow-switcher__left"" and @id="toggle-module-detail"]
# Modules Tab Left Panel
-${MODULE_TAB_CONTENT} //*[@id="tab-content-2"]
-${MODULE_SEARCH_INPUT} //input[@id="search-modules"]
-${MODULE_ID_LABEL} module_
-${MODULE_LIST_ITEM} ${MODULE_TAB_CONTENT}//md-list-item[contains(@id, "${MODULE_ID_LABEL}")]//div[@class="pointer title layout-align-center-center layout-row"]
-${MODULE_LIST_ITEM_COLLAPSED} ${MODULE_LIST_ITEM}//following-sibling::md-list[@aria-hidden="true"]
-${MODULE_LIST_ITEM_EXPANDED} ${MODULE_LIST_ITEM}//following-sibling::md-list[@aria-hidden="false"]
-${MODULE_LIST_MODULE_NAME_XPATH} ${MODULE_LIST_ITEM}//p[@class="top-element flex"]
-${OPERATIONS_LABEL} operations
-${OPERATIONAL_LABEL} operational
-${CONFIG_LABEL} config
-${TESTING_MODULE_NAME} ${EMPTY}
-${TESTING_MODULE_XPATH} ${MODULE_TAB_CONTENT}//p[contains(., "${TESTING_MODULE_NAME}")]//ancestor::md-list-item[contains(@id, "${MODULE_ID_LABEL}")]
+${MODULE_TAB_CONTENT} //*[@id="tab-content-2"]
+${MODULE_SEARCH_INPUT} //input[@id="search-modules"]
+${MODULE_ID_LABEL} module_
+${MODULE_LIST_ITEM}
+... ${MODULE_TAB_CONTENT}//md-list-item[contains(@id, "${MODULE_ID_LABEL}")]//div[@class="pointer title layout-align-center-center layout-row"]
+${MODULE_LIST_ITEM_COLLAPSED}
+... ${MODULE_LIST_ITEM}//following-sibling::md-list[@aria-hidden="true"]
+${MODULE_LIST_ITEM_EXPANDED}
+... ${MODULE_LIST_ITEM}//following-sibling::md-list[@aria-hidden="false"]
+${MODULE_LIST_MODULE_NAME_XPATH} ${MODULE_LIST_ITEM}//p[@class="top-element flex"]
+${OPERATIONS_LABEL} operations
+${OPERATIONAL_LABEL} operational
+${CONFIG_LABEL} config
+${TESTING_MODULE_NAME} ${EMPTY}
+${TESTING_MODULE_XPATH}
+... ${MODULE_TAB_CONTENT}//p[contains(., "${TESTING_MODULE_NAME}")]//ancestor::md-list-item[contains(@id, "${MODULE_ID_LABEL}")]
# Module Detail
-${MODULE_DETAIL_CONTENT} //*[@id="tab-content-1"]
-${MODULE_DETAIL_MODULE_NAME_LABEL} ${MODULE_DETAIL_CONTENT}//h4
-${MODULE_DETAIL_OPERATIONS_TAB_SELECTED} ${MODULE_DETAIL_CONTENT}//md-tab-item[@aria-selected="true"]//span[contains(text(), "${OPERATIONS_LABEL}")]
-${MODULE_DETAIL_OPERATIONS_TAB_DESELECTED} ${MODULE_DETAIL_CONTENT}//md-tab-item[@aria-selected="false"]//span[contains(text(), "${OPERATIONS_LABEL}")]
-${MODULE_DETAIL_OPERATIONAL_TAB_SELECTED} ${MODULE_DETAIL_CONTENT}//md-tab-item[@aria-selected="true"]//span[contains(text(), "${OPERATIONAL_LABEL}")]
-${MODULE_DETAIL_OPERATIONAL_TAB_DESELECTED} ${MODULE_DETAIL_CONTENT}//md-tab-item[@aria-selected="false"]//span[contains(text(), "${OPERATIONAL_LABEL}")]
-${MODULE_DETAIL_CONFIG_TAB_SELECTED} ${MODULE_DETAIL_CONTENT}//md-tab-item[@aria-selected="true"]//span[contains(text(), "${CONFIG_LABEL}")]
-${MODULE_DETAIL_CONFIG_TAB_DESELECTED} ${MODULE_DETAIL_CONTENT}//md-tab-item[@aria-selected="false"]//span[contains(text(), "${CONFIG_LABEL}")]
-${MODULE_DETAIL_TAB_CONTENT_LABEL} tab-content-
-${MODULE_DETAIL_ACTIVE_TAB_CONTENT} ${MODULE_DETAIL_CONTENT}//md-tab-content[contains(@class, "md-active")]
-${MODULE_DETAIL_EXPAND_BRANCH_BUTTON} ${MODULE_DETAIL_ACTIVE_TAB_CONTENT}//md-icon[contains(., "add")]
-${MODULE_DETAIL_COLLAPSE_BRANCH_BUTTON} ${MODULE_DETAIL_ACTIVE_TAB_CONTENT}//md-list-item//md-icon[contains(., "remove")]
-${BRANCH_LABEL} ${EMPTY}
-${NETWORK_TOPOLOGY_LABEL} network-topology
-${TOPOLOGY_TOPOLOGY_ID_LABEL} topology {topology-id}
-${NODE_NODE_ID_LABEL} node {node-id}
-${LINK_LINK_ID_LABEL} link {link-id}
-${BRANCH_ID_LABEL} branch-
-${MODULE_DETAIL_BRANCH} ${MODULE_DETAIL_ACTIVE_TAB_CONTENT}//md-list-item[contains(@id, "${BRANCH_ID_LABEL}")]
-${MODULE_DETAIL_BRANCH_BUTTON} ${MODULE_DETAIL_BRANCH}/button
-${MODULE_DETAIL_BRANCH_LABEL} ${MODULE_DETAIL_BRANCH}//span[contains(@class, "indented tree-label ng-binding flex") and contains(text(), "${BRANCH_LABEL}")]
+${MODULE_DETAIL_CONTENT} //*[@id="tab-content-1"]
+${MODULE_DETAIL_MODULE_NAME_LABEL} ${MODULE_DETAIL_CONTENT}//h4
+${MODULE_DETAIL_OPERATIONS_TAB_SELECTED}
+... ${MODULE_DETAIL_CONTENT}//md-tab-item[@aria-selected="true"]//span[contains(text(), "${OPERATIONS_LABEL}")]
+${MODULE_DETAIL_OPERATIONS_TAB_DESELECTED}
+... ${MODULE_DETAIL_CONTENT}//md-tab-item[@aria-selected="false"]//span[contains(text(), "${OPERATIONS_LABEL}")]
+${MODULE_DETAIL_OPERATIONAL_TAB_SELECTED}
+... ${MODULE_DETAIL_CONTENT}//md-tab-item[@aria-selected="true"]//span[contains(text(), "${OPERATIONAL_LABEL}")]
+${MODULE_DETAIL_OPERATIONAL_TAB_DESELECTED}
+... ${MODULE_DETAIL_CONTENT}//md-tab-item[@aria-selected="false"]//span[contains(text(), "${OPERATIONAL_LABEL}")]
+${MODULE_DETAIL_CONFIG_TAB_SELECTED}
+... ${MODULE_DETAIL_CONTENT}//md-tab-item[@aria-selected="true"]//span[contains(text(), "${CONFIG_LABEL}")]
+${MODULE_DETAIL_CONFIG_TAB_DESELECTED}
+... ${MODULE_DETAIL_CONTENT}//md-tab-item[@aria-selected="false"]//span[contains(text(), "${CONFIG_LABEL}")]
+${MODULE_DETAIL_TAB_CONTENT_LABEL} tab-content-
+${MODULE_DETAIL_ACTIVE_TAB_CONTENT}
+... ${MODULE_DETAIL_CONTENT}//md-tab-content[contains(@class, "md-active")]
+${MODULE_DETAIL_EXPAND_BRANCH_BUTTON}
+... ${MODULE_DETAIL_ACTIVE_TAB_CONTENT}//md-icon[contains(., "add")]
+${MODULE_DETAIL_COLLAPSE_BRANCH_BUTTON}
+... ${MODULE_DETAIL_ACTIVE_TAB_CONTENT}//md-list-item//md-icon[contains(., "remove")]
+${BRANCH_LABEL} ${EMPTY}
+${NETWORK_TOPOLOGY_LABEL} network-topology
+${TOPOLOGY_TOPOLOGY_ID_LABEL} topology {topology-id}
+${NODE_NODE_ID_LABEL} node {node-id}
+${LINK_LINK_ID_LABEL} link {link-id}
+${BRANCH_ID_LABEL} branch-
+${MODULE_DETAIL_BRANCH}
+... ${MODULE_DETAIL_ACTIVE_TAB_CONTENT}//md-list-item[contains(@id, "${BRANCH_ID_LABEL}")]
+${MODULE_DETAIL_BRANCH_BUTTON} ${MODULE_DETAIL_BRANCH}/button
+${MODULE_DETAIL_BRANCH_LABEL}
+... ${MODULE_DETAIL_BRANCH}//span[contains(@class, "indented tree-label ng-binding flex") and contains(text(), "${BRANCH_LABEL}")]
#History Tab Left Panel
-${HISTORY_SEARCH_INPUT} //input[@id="search-history"]
-${SAVE_HISTORY_REQUEST_TO_COLLECTION_BUTTON} //button[@id="history-save-requests"]
-${DELETE_HISTORY_REQUEST_MENU} //button[@id="history-delete-menu"]
-${DELETE_SELECTED_HISTORY_REQUEST_BUTTON} //button[@id="history-delete-selected"]
-${DELETE_ALL_HISTORY_REQUESTS_BUTTON} //button[@id="history-delete-all"]
-${SELECT_HISTORY_REQUEST_MENU} //button[@id="history-select-menu"]
-${SELECT_ALL_HISTORY_REQUESTS_BUTTON} //button[@id="history-select-all"]
-${DESELECT_ALL_HISTORY_REQUESTS_BUTTON} //button[@id="history-deselect-all"]
+${HISTORY_SEARCH_INPUT} //input[@id="search-history"]
+${SAVE_HISTORY_REQUEST_TO_COLLECTION_BUTTON} //button[@id="history-save-requests"]
+${DELETE_HISTORY_REQUEST_MENU} //button[@id="history-delete-menu"]
+${DELETE_SELECTED_HISTORY_REQUEST_BUTTON} //button[@id="history-delete-selected"]
+${DELETE_ALL_HISTORY_REQUESTS_BUTTON} //button[@id="history-delete-all"]
+${SELECT_HISTORY_REQUEST_MENU} //button[@id="history-select-menu"]
+${SELECT_ALL_HISTORY_REQUESTS_BUTTON} //button[@id="history-select-all"]
+${DESELECT_ALL_HISTORY_REQUESTS_BUTTON} //button[@id="history-deselect-all"]
#Collections Tab Left Panel
-${COLLECTIONS_SEARCH_INPUT} //input[@id="search-collections"]
-${SAVE_SELECTED_REQUEST_TO_COLLECTION_BUTTON} //button[@id="collections-save-selected"]
-${IMPORT_COLLECTION_BUTTON} //button[@id="importCollection"]
-${DELETE_HISTORY_REQUEST_MENU} //button[@id="history-delete-menu"]
-${DELETE_SELECTED_HISTORY_REQUEST_BUTTON} //button[@id="history-delete-selected"]
-${DELETE_ALL_HISTORY_REQUESTS_BUTTON} //button[@id="history-delete-all"]
-${SELECT_HISTORY_REQUEST_MENU} //button[@id="history-select-menu"]
-${SELECT_ALL_HISTORY_REQUESTS_BUTTON} //button[@id="history-select-all"]
-${DESELECT_ALL_HISTORY_REQUESTS_BUTTON} //button[@id="history-deselect-all"]
+${COLLECTIONS_SEARCH_INPUT} //input[@id="search-collections"]
+${SAVE_SELECTED_REQUEST_TO_COLLECTION_BUTTON} //button[@id="collections-save-selected"]
+${IMPORT_COLLECTION_BUTTON} //button[@id="importCollection"]
+${DELETE_HISTORY_REQUEST_MENU} //button[@id="history-delete-menu"]
+${DELETE_SELECTED_HISTORY_REQUEST_BUTTON} //button[@id="history-delete-selected"]
+${DELETE_ALL_HISTORY_REQUESTS_BUTTON} //button[@id="history-delete-all"]
+${SELECT_HISTORY_REQUEST_MENU} //button[@id="history-select-menu"]
+${SELECT_ALL_HISTORY_REQUESTS_BUTTON} //button[@id="history-select-all"]
+${DESELECT_ALL_HISTORY_REQUESTS_BUTTON} //button[@id="history-deselect-all"]
#Right Panel Header
-${OPERATION_NAME} EMPTY
-${OPERATION_SELECT_INPUT} //md-select[@id="request-selected-operation"]
-${OPERATION_SELECT_INPUT_CLICKABLE} ${OPERATION_SELECT_INPUT}//parent::md-input-container
-${SELECT_BACKDROP} //md-backdrop[@class="md-select-backdrop md-click-catcher ng-scope"]
-${OPERATION_SELECT_MENU_EXPANDED} //div[contains(@aria-hidden, "false") and contains(@id,"select_container_10")]
-${GET_OPTION} //*[@id="select_option_12"]
-${POST_OPTION} //*[@id="select_option_13"]
-${PUT_OPTION} //*[@id="select_option_14"]
-${DELETE_OPTION} //*[@id="select_option_15"]
-${SELECTED_OPERATION_XPATH} ${OPERATION_SELECT_INPUT}//span/div[contains(text(), "${OPERATION_NAME}")]
-${REQUEST_URL_INPUT} //*[@id="request-url"]
-${SEND_BUTTON} //*[@id="send-request"]
-${SAVE_BUTTON} //*[@id="save-request"]
-${PARAMETERS_BUTTON} //*[@id="show-parameters"]
-${FORM_RADIOBUTTON_SELECTED} //md-radio-button[contains(@id, "shown-data-type-form") and contains(@aria-checked, "true")]
-${FORM_RADIOBUTTON_UNSELECTED} //md-radio-button[contains(@id, "shown-data-type-form") and contains(@aria-checked, "false")]
-${JSON_RADIOBUTTON_SELECTED} //md-radio-button[contains(@id, "shown-data-type-json") and contains(@aria-checked, "true")]
-${JSON_RADIOBUTTON_UNSELECTED} //md-radio-button[contains(@id, "shown-data-type-json") and contains(@aria-checked, "false")]
-${FILL_FORM_WITH_RECEIVED_DATA_CHECKBOX_SELECTED} //span[contains(text(), "Fill form with received data after execution")]//ancestor::md-checkbox[@aria-checked="true"]
-${FILL_FORM_WITH_RECEIVED_DATA_CHECKBOX_UNSELECTED} //span[contains(text(), "Fill form with received data after execution")]//ancestor::md-checkbox[@aria-checked="false"]
-${SHOW_SENT_DATA_CHECKBOX_SELECTED} //md-checkbox[@id="show-sent-data-checkbox" and @aria-checked="true"]
-${SHOW_SENT_DATA_CHECKBOX_UNSELECTED} //md-checkbox[@id="show-sent-data-checkbox" and @aria-checked="false"]
-${SHOW_RECEIVED_DATA_CHECKBOX_SELECTED} //md-checkbox[@id="show-received-data-checkbox" and @aria-checked="true"]
-${SHOW_RECEIVED_DATA_CHECKBOX_UNSELECTED} //md-checkbox[@id="show-received-data-checkbox" and @aria-checked="false"]
-${MILLISECONDS_LABEL} ms
-${STATUS_LABEL} //span[contains(text(), "Status:")]
-${STATUS_VALUE} //span[@id="info-request-status"]
-${THREE_DOTS_DEFAULT_STATUS_AND_TIME} ...
-${20X_REQUEST_CODE_REGEX} .*([2][0][0-6]).*
-${40X_REQUEST_CODE_REGEX} .*([4][0-1][0-9]).*
-${20X_OR_40X_REQUEST_CODE_REGEX} .*([24][0-1][0-9]).*
-${TIME_LABEL} //span[contains(text(), "Time:")]
-${TIME_VALUE} //span[@id="info-request-execution-time"]
-${API_PATH} //section[contains(@class, "yangmanModule__right-panel__header")]//section[@class="layout-wrap layout-row flex"]
-${HEADER_LINEAR_PROGRESSION_BAR_HIDDEN} //section[contains(@class, "yangmanModule__right-panel__header")]/md-progress-linear[@aria-hidden="true"]
+${OPERATION_NAME} EMPTY
+${OPERATION_SELECT_INPUT} //md-select[@id="request-selected-operation"]
+${OPERATION_SELECT_INPUT_CLICKABLE} ${OPERATION_SELECT_INPUT}//parent::md-input-container
+${SELECT_BACKDROP}
+... //md-backdrop[@class="md-select-backdrop md-click-catcher ng-scope"]
+${OPERATION_SELECT_MENU_EXPANDED}
+... //div[contains(@aria-hidden, "false") and contains(@id,"select_container_10")]
+${GET_OPTION} //*[@id="select_option_12"]
+${POST_OPTION} //*[@id="select_option_13"]
+${PUT_OPTION} //*[@id="select_option_14"]
+${DELETE_OPTION} //*[@id="select_option_15"]
+${SELECTED_OPERATION_XPATH}
+... ${OPERATION_SELECT_INPUT}//span/div[contains(text(), "${OPERATION_NAME}")]
+${REQUEST_URL_INPUT} //*[@id="request-url"]
+${SEND_BUTTON} //*[@id="send-request"]
+${SAVE_BUTTON} //*[@id="save-request"]
+${PARAMETERS_BUTTON} //*[@id="show-parameters"]
+${FORM_RADIOBUTTON_SELECTED}
+... //md-radio-button[contains(@id, "shown-data-type-form") and contains(@aria-checked, "true")]
+${FORM_RADIOBUTTON_UNSELECTED}
+... //md-radio-button[contains(@id, "shown-data-type-form") and contains(@aria-checked, "false")]
+${JSON_RADIOBUTTON_SELECTED}
+... //md-radio-button[contains(@id, "shown-data-type-json") and contains(@aria-checked, "true")]
+${JSON_RADIOBUTTON_UNSELECTED}
+... //md-radio-button[contains(@id, "shown-data-type-json") and contains(@aria-checked, "false")]
+${FILL_FORM_WITH_RECEIVED_DATA_CHECKBOX_SELECTED}
+... //span[contains(text(), "Fill form with received data after execution")]//ancestor::md-checkbox[@aria-checked="true"]
+${FILL_FORM_WITH_RECEIVED_DATA_CHECKBOX_UNSELECTED}
+... //span[contains(text(), "Fill form with received data after execution")]//ancestor::md-checkbox[@aria-checked="false"]
+${SHOW_SENT_DATA_CHECKBOX_SELECTED}
+... //md-checkbox[@id="show-sent-data-checkbox" and @aria-checked="true"]
+${SHOW_SENT_DATA_CHECKBOX_UNSELECTED}
+... //md-checkbox[@id="show-sent-data-checkbox" and @aria-checked="false"]
+${SHOW_RECEIVED_DATA_CHECKBOX_SELECTED}
+... //md-checkbox[@id="show-received-data-checkbox" and @aria-checked="true"]
+${SHOW_RECEIVED_DATA_CHECKBOX_UNSELECTED}
+... //md-checkbox[@id="show-received-data-checkbox" and @aria-checked="false"]
+${MILLISECONDS_LABEL} ms
+${STATUS_LABEL} //span[contains(text(), "Status:")]
+${STATUS_VALUE} //span[@id="info-request-status"]
+${THREE_DOTS_DEFAULT_STATUS_AND_TIME} ...
+${20X_REQUEST_CODE_REGEX} .*([2][0][0-6]).*
+${40X_REQUEST_CODE_REGEX} .*([4][0-1][0-9]).*
+${20X_OR_40X_REQUEST_CODE_REGEX} .*([24][0-1][0-9]).*
+${TIME_LABEL} //span[contains(text(), "Time:")]
+${TIME_VALUE} //span[@id="info-request-execution-time"]
+${API_PATH}
+... //section[contains(@class, "yangmanModule__right-panel__header")]//section[@class="layout-wrap layout-row flex"]
+${HEADER_LINEAR_PROGRESSION_BAR_HIDDEN}
+... //section[contains(@class, "yangmanModule__right-panel__header")]/md-progress-linear[@aria-hidden="true"]
#Right Panel Json Content
-${SENT_DATA_CODE_MIRROR_DISPLAYED} //div[@id="sentData" and @aria-hidden="false"]
-${SENT_DATA_CODE_MIRROR_CODE} ${SENT_DATA_CODE_MIRROR_DISPLAYED}//div[@class="CodeMirror-code"]
-${SENT_DATA_LABEL} ${SENT_DATA_CODE_MIRROR_DISPLAYED}//h5[contains(text(), Sent data)]
-${SENT_DATA_ENLARGE_FONT_SIZE_BUTTON} ${SENT_DATA_CODE_MIRROR_DISPLAYED}//button[contains(@aria-label, arrow_drop_up)]
-${SENT_DATA_REDUCE_FONT_SIZE_BUTTON} ${SENT_DATA_CODE_MIRROR_DISPLAYED}//button[contains(@aria-label, arrow_drop_down)]
-${RECEIVED_DATA_CODE_MIRROR_DISPLAYED} //div[@id="ReceiveData" and @aria-hidden="false"]
-${RECEIVED_DATA_CODE_MIRROR_CODE} ${RECEIVED_DATA_CODE_MIRROR_DISPLAYED}//div[@class="CodeMirror-code"]
-${RECEIVED_DATA_LABEL} ${RECEIVED_DATA_CODE_MIRROR_DISPLAYED}//h5[contains(text(), Received data)]
-${RECEIVED_DATA_ENLARGE_FONT_SIZE_BUTTON} ${RECEIVED_DATA_CODE_MIRROR_DISPLAYED}//button[contains(@aria-label, arrow_drop_up)]
-${RECEIVED_DATA_REDUCE_FONT_SIZE_BUTTON} ${RECEIVED_DATA_CODE_MIRROR_DISPLAYED}//button[contains(@aria-label, arrow_drop_down)]
-${JSON_ERROR_MESSAGE_INPUT_IS_MISSING} Error parsing input: Input is missing some of the keys of
-${JSON_ERROR_MESSAGE_CONTENT_DOES_NOT_EXIST} Request could not be completed because the relevant data model content does not exist
-${JSON_ERROR_MESSAGE_DATA_DOES_NOT_EXIST_FOR_PATH} Data does not exist for path
-${JSON_ERROR_MESSAGE_INPUT_IS_REQUIRED} Input is required.
+${SENT_DATA_CODE_MIRROR_DISPLAYED} //div[@id="sentData" and @aria-hidden="false"]
+${SENT_DATA_CODE_MIRROR_CODE}
+... ${SENT_DATA_CODE_MIRROR_DISPLAYED}//div[@class="CodeMirror-code"]
+${SENT_DATA_LABEL}
+... ${SENT_DATA_CODE_MIRROR_DISPLAYED}//h5[contains(text(), Sent data)]
+${SENT_DATA_ENLARGE_FONT_SIZE_BUTTON}
+... ${SENT_DATA_CODE_MIRROR_DISPLAYED}//button[contains(@aria-label, arrow_drop_up)]
+${SENT_DATA_REDUCE_FONT_SIZE_BUTTON}
+... ${SENT_DATA_CODE_MIRROR_DISPLAYED}//button[contains(@aria-label, arrow_drop_down)]
+${RECEIVED_DATA_CODE_MIRROR_DISPLAYED} //div[@id="ReceiveData" and @aria-hidden="false"]
+${RECEIVED_DATA_CODE_MIRROR_CODE}
+... ${RECEIVED_DATA_CODE_MIRROR_DISPLAYED}//div[@class="CodeMirror-code"]
+${RECEIVED_DATA_LABEL}
+... ${RECEIVED_DATA_CODE_MIRROR_DISPLAYED}//h5[contains(text(), Received data)]
+${RECEIVED_DATA_ENLARGE_FONT_SIZE_BUTTON}
+... ${RECEIVED_DATA_CODE_MIRROR_DISPLAYED}//button[contains(@aria-label, arrow_drop_up)]
+${RECEIVED_DATA_REDUCE_FONT_SIZE_BUTTON}
+... ${RECEIVED_DATA_CODE_MIRROR_DISPLAYED}//button[contains(@aria-label, arrow_drop_down)]
+${JSON_ERROR_MESSAGE_INPUT_IS_MISSING} Error parsing input: Input is missing some of the keys of
+${JSON_ERROR_MESSAGE_CONTENT_DOES_NOT_EXIST}
+... Request could not be completed because the relevant data model content does not exist
+${JSON_ERROR_MESSAGE_DATA_DOES_NOT_EXIST_FOR_PATH} Data does not exist for path
+${JSON_ERROR_MESSAGE_INPUT_IS_REQUIRED} Input is required.
# Right Panel Form Content
-${TOPOLOGY_ID_LABEL} topology-id
-${FORM_ERROR_MESSAGE} ${EMPTY}
-${FORM_CONTENT} //section[contains(@class, "yangmanModule__right-panel__form bottom-content ng-scope") and contains(@aria-hidden, "false")]
-${ERROR_MESSAGE_IDENTIFIERS_IN_PATH_REQUIRED} Identifiers in path are required. Please fill empty identifiers for successful request execution.
-${FORM_ERROR_MESSAGE_XPATH} //p[contains(@id, "form-error-message") and contains (text(), "${FORM_ERROR_MESSAGE}")]
-${FORM_TOP_ELEMENT_CONTAINER} ${FORM_CONTENT}//div[contains(@class, "yangmanModule__right-panel__form__element-container ng-scope")]
-${FORM_TOP_ELEMENT_POINTER} ${FORM_TOP_ELEMENT_CONTAINER}//p[contains(@class, "top-element pointer")]
-${FORM_TOP_ELEMENT_LABEL_XPATH} ${FORM_TOP_ELEMENT_POINTER}//span[contains(@class, "ng-binding ng-scope")]
-${FORM_TOP_ELEMENT_YANGMENU} ${FORM_TOP_ELEMENT_CONTAINER}//yang-form-menu
-${FORM_TOP_ELEMENT_LIST_ITEM_ROW} ${FORM_TOP_ELEMENT_CONTAINER}//section[@class="yangmanModule__right-panel__form__list__paginator ng-scope layout-column flex"]
-${FORM_TOP_ELEMENT_LIST_ITEM} ${FORM_TOP_ELEMENT_LIST_ITEM_ROW}//md-tab-item[contains(@class, "md-tab ng-scope ng-isolate-scope md-ink-ripple")]
-${FORM_TOP_ELEMENT_LIST_ITEM_LABEL} ${FORM_TOP_ELEMENT_LIST_ITEM}/span
-${YANGMENU_ADD_LIST_ITEM_BUTTON} ${FORM_CONTENT}//yang-form-menu//button[@ng-click="addListItemFunc(); closeMenu();"]
-${YANGMENU_SHOW_ALL_LIST_ITEMS} ${FORM_CONTENT}//yang-form-menu//button[@ng-click="switchSection('items'); setItemList();"]
-${YANGMENU_AUGMENTATIONS_BUTTON} ${FORM_CONTENT}//yang-form-menu//button[ng-click="switchSection('augmentations')"]
-${FORM_SHOW_PREVIOUS_ITEM_ARROW} //md-prev-button[@aria-label="Previous Page"]
-${FORM_SHOW_NEXT_ITEM_ARROW} //md-next-button[@aria-label="Next Page"]
+${TOPOLOGY_ID_LABEL} topology-id
+${FORM_ERROR_MESSAGE} ${EMPTY}
+${FORM_CONTENT}
+... //section[contains(@class, "yangmanModule__right-panel__form bottom-content ng-scope") and contains(@aria-hidden, "false")]
+${ERROR_MESSAGE_IDENTIFIERS_IN_PATH_REQUIRED}
+... Identifiers in path are required. Please fill empty identifiers for successful request execution.
+${FORM_ERROR_MESSAGE_XPATH}
+... //p[contains(@id, "form-error-message") and contains (text(), "${FORM_ERROR_MESSAGE}")]
+${FORM_TOP_ELEMENT_CONTAINER}
+... ${FORM_CONTENT}//div[contains(@class, "yangmanModule__right-panel__form__element-container ng-scope")]
+${FORM_TOP_ELEMENT_POINTER}
+... ${FORM_TOP_ELEMENT_CONTAINER}//p[contains(@class, "top-element pointer")]
+${FORM_TOP_ELEMENT_LABEL_XPATH}
+... ${FORM_TOP_ELEMENT_POINTER}//span[contains(@class, "ng-binding ng-scope")]
+${FORM_TOP_ELEMENT_YANGMENU} ${FORM_TOP_ELEMENT_CONTAINER}//yang-form-menu
+${FORM_TOP_ELEMENT_LIST_ITEM_ROW}
+... ${FORM_TOP_ELEMENT_CONTAINER}//section[@class="yangmanModule__right-panel__form__list__paginator ng-scope layout-column flex"]
+${FORM_TOP_ELEMENT_LIST_ITEM}
+... ${FORM_TOP_ELEMENT_LIST_ITEM_ROW}//md-tab-item[contains(@class, "md-tab ng-scope ng-isolate-scope md-ink-ripple")]
+${FORM_TOP_ELEMENT_LIST_ITEM_LABEL} ${FORM_TOP_ELEMENT_LIST_ITEM}/span
+${YANGMENU_ADD_LIST_ITEM_BUTTON}
+... ${FORM_CONTENT}//yang-form-menu//button[@ng-click="addListItemFunc(); closeMenu();"]
+${YANGMENU_SHOW_ALL_LIST_ITEMS}
+... ${FORM_CONTENT}//yang-form-menu//button[@ng-click="switchSection('items'); setItemList();"]
+${YANGMENU_AUGMENTATIONS_BUTTON}
+... ${FORM_CONTENT}//yang-form-menu//button[ng-click="switchSection('augmentations')"]
+${FORM_SHOW_PREVIOUS_ITEM_ARROW} //md-prev-button[@aria-label="Previous Page"]
+${FORM_SHOW_NEXT_ITEM_ARROW} //md-next-button[@aria-label="Next Page"]
*** Settings ***
-Documentation Resource consisting purely of variable definitions useful for multiple project suites.
+Documentation Resource consisting purely of variable definitions useful for multiple project suites.
+
*** Variables ***
-${EXP_DIR} /tmp/Export
-${EXP_DATA_FILE} odl_backup_config.json
-${EXP_OPER_FILE} odl_backup_operational.json
-${RELATIVE_BEFORE_BACKUP_DIR} beforeBackup
-${RELATIVE_AFTER_RESTORE_DIR} afterRestore
+${EXP_DIR} /tmp/Export
+${EXP_DATA_FILE} odl_backup_config.json
+${EXP_OPER_FILE} odl_backup_operational.json
+${RELATIVE_BEFORE_BACKUP_DIR} beforeBackup
+${RELATIVE_AFTER_RESTORE_DIR} afterRestore
*** Settings ***
-Documentation Resource consisting purely of variable definitions useful for multiple project suites.
+Documentation Resource consisting purely of variable definitions useful for multiple project suites.
+
*** Variables ***
-${CANCEL_EXPORT_URL} /rests/operations/data-export-import:cancel-export
-${EXPORT_FILE} ${CURDIR}/schedule_export.json
-${EXPORT_INCLUDE_FILE} ${CURDIR}/schedule_export_include.json
-${EXP_DIR} /tmp/Export
-${EXPORT_EXCLUDE_FILE} ${CURDIR}/schedule_export_exclude.json
-${EXPORT_INCEXCLUDE_FILE} ${CURDIR}/schedule_export_include_exclude.json
-${SCHEDULE_EXPORT_URL} /rests/operations/data-export-import:schedule-export
-${EXP_DATA_FILE} odl_backup_config.json
-${EXP_OPER_FILE} odl_backup_operational.json
-${MODELS_FILE} odl_backup_models.json
-${STATUS_EXPORT_URL} /rests/operations/data-export-import:status-export
-${NETCONF_PAYLOAD_JSON} ../variables/daexim/netconf_mount.json
-${NETCONF_NODE_URL} /rests/data/network-topology:network-topology/topology=topology-netconf/node
-${TOPOLOGY_URL} /rests/data/network-topology:network-topology
-${NETCONF_EP_NAME} CONTROLLER1
-${EXPORT_INITIAL_STATUS} initial
-${EXPORT_SCHEDULED_STATUS} scheduled
-${EXPORT_COMPLETE_STATUS} complete
-${EXPORT_SKIPPED_STATUS} skipped
-${FIRST_CONTROLLER_INDEX} 1
-${SECOND_CONTROLLER_INDEX} 2
-${THIRD_CONTROLLER_INDEX} 3
-${NETCONF_PORT} 1830
-${NTCF_OPR_STATUS} connected
-${DAEXIM_DATA_DIRECTORY} ../variables/daexim/daexim
-${MDL_DEF_FLAG} false
-${STR_DEF_FLAG} data
-${IMPORT_PAYLOAD} ../variables/daexim/import.json
-${IMPORT_URL} /rests/operations/data-export-import:immediate-import
+${CANCEL_EXPORT_URL} /rests/operations/data-export-import:cancel-export
+${EXPORT_FILE} ${CURDIR}/schedule_export.json
+${EXPORT_INCLUDE_FILE} ${CURDIR}/schedule_export_include.json
+${EXP_DIR} /tmp/Export
+${EXPORT_EXCLUDE_FILE} ${CURDIR}/schedule_export_exclude.json
+${EXPORT_INCEXCLUDE_FILE} ${CURDIR}/schedule_export_include_exclude.json
+${SCHEDULE_EXPORT_URL} /rests/operations/data-export-import:schedule-export
+${EXP_DATA_FILE} odl_backup_config.json
+${EXP_OPER_FILE} odl_backup_operational.json
+${MODELS_FILE} odl_backup_models.json
+${STATUS_EXPORT_URL} /rests/operations/data-export-import:status-export
+${NETCONF_PAYLOAD_JSON} ../variables/daexim/netconf_mount.json
+${NETCONF_NODE_URL} /rests/data/network-topology:network-topology/topology=topology-netconf/node
+${TOPOLOGY_URL} /rests/data/network-topology:network-topology
+${NETCONF_EP_NAME} CONTROLLER1
+${EXPORT_INITIAL_STATUS} initial
+${EXPORT_SCHEDULED_STATUS} scheduled
+${EXPORT_COMPLETE_STATUS} complete
+${EXPORT_SKIPPED_STATUS} skipped
+${FIRST_CONTROLLER_INDEX} 1
+${SECOND_CONTROLLER_INDEX} 2
+${THIRD_CONTROLLER_INDEX} 3
+${NETCONF_PORT} 1830
+${NTCF_OPR_STATUS} connected
+${DAEXIM_DATA_DIRECTORY} ../variables/daexim/daexim
+${MDL_DEF_FLAG} false
+${STR_DEF_FLAG} data
+${IMPORT_PAYLOAD} ../variables/daexim/import.json
+${IMPORT_URL} /rests/operations/data-export-import:immediate-import
*** Settings ***
-Documentation Project specific constants.
+Documentation Project specific constants.
+
*** Variables ***
-${NETWORK_CLIENT_GROUP} ccc5e444-573c-11e5-885d-feff819cdc9f
-${UUID_NO_DASHES} [0-9a-f]{8}[0-9a-f]{4}[0-9a-f]{4}[0-9a-f]{4}[0-9a-f]{12}
-${UUID_PATTERN} [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
-${NAME_PATTERN} [a-zA-Z]([a-zA-Z0-9\-_.])*
-${MAC_ADDRESS_PATTERN} [0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}
+${NETWORK_CLIENT_GROUP} ccc5e444-573c-11e5-885d-feff819cdc9f
+${UUID_NO_DASHES} [0-9a-f]{8}[0-9a-f]{4}[0-9a-f]{4}[0-9a-f]{4}[0-9a-f]{12}
+${UUID_PATTERN} [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
+${NAME_PATTERN} [a-zA-Z]([a-zA-Z0-9\-_.])*
+${MAC_ADDRESS_PATTERN}
+... [0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}
*** Settings ***
-Documentation Resource consisting purely of variable definitions useful for multiple project suites.
+Documentation Resource consisting purely of variable definitions useful for multiple project suites.
+
*** Variables ***
-${JSONRPCCONFIG_MODULE_JSON} ${CURDIR}/jsonrpcconfig_module.json
-${JSONRPCCONFIG_DATA_JSON} ${CURDIR}/jsonrpcconfig_data.json
-${READ_SERVICE_PEER_URL} /rests/data/jsonrpc:config/configured-endpoints
-${READ_SERVICE_PEER_PAYLOAD} ${CURDIR}/readservice_peer_payload.json
-${READ_SERVICE_PEER_MOUNT_PATH} /yang-ext:mount/jsonrpc:config
-${DEFAULT_ENDPOINT} foo
-${DEFAULT_PORT} 4444
-${FIRST_CONTROLLER_INDEX} 1
-${CENTOS_PIP} sudo yum -y install python-pip
-${UB_PIP} sudo apt-get install -y python-pip
-${READ_SERVICE_SCRIPT} ${CURDIR}/odl-jsonrpc-test-read
+${JSONRPCCONFIG_MODULE_JSON} ${CURDIR}/jsonrpcconfig_module.json
+${JSONRPCCONFIG_DATA_JSON} ${CURDIR}/jsonrpcconfig_data.json
+${READ_SERVICE_PEER_URL} /rests/data/jsonrpc:config/configured-endpoints
+${READ_SERVICE_PEER_PAYLOAD} ${CURDIR}/readservice_peer_payload.json
+${READ_SERVICE_PEER_MOUNT_PATH} /yang-ext:mount/jsonrpc:config
+${DEFAULT_ENDPOINT} foo
+${DEFAULT_PORT} 4444
+${FIRST_CONTROLLER_INDEX} 1
+${CENTOS_PIP} sudo yum -y install python-pip
+${UB_PIP} sudo apt-get install -y python-pip
+${READ_SERVICE_SCRIPT} ${CURDIR}/odl-jsonrpc-test-read
${JSONRPCCONFIG_MODULE_DEFAULT_DATA} jsonrpc:config
-${READSERVICE_NAME} foo
+${READSERVICE_NAME} foo
*** Settings ***
-Resource ../../variables/netvirt/Variables.robot
+Resource ../../variables/netvirt/Variables.robot
+
*** Variables ***
#Configurable Variables
-${OS_IP} ${OS_CONTROL_NODE_IP}
-${OVS_IP} ${OS_COMPUTE_1_IP}
-${OVS2_IP} ${OS_COMPUTE_2_IP}
-${HWVTEP_IP} ${TOOLS_SYSTEM_1_IP}
-${HWVTEP2_IP} ${TOOLS_SYSTEM_2_IP}
-${ODL_IP} ${ODL_SYSTEM_1_IP}
-${OS_PASSWORD} ${EMPTY}
-${HWVTEP_BRIDGE} br-hwvtep-blue
-${HWVTEP2_BRIDGE} br-hwvtep-red
-${DEVSTACK_DEPLOY_PATH} /home/stack/devstack
-${HWVTEP_NS1} NS1
-${HWVTEP_NS2} NS2
-${HWVTEP2_NS1} NS3
-${HWVTEP2_NS2} NS4
-${HWVTEP_PORT_1} HWVPORT1
-${HWVTEP_PORT_2} HWVPORT2
-${HWVTEP_PORT_3} HWVPORT3
-${HWVTEP2_PORT_1} HWVPORT4
-${HWVTEP2_PORT_2} HWVPORT5
-${L2GW_NAME1} GW1
-${L2GW_NAME2} GW2
-${L2GW_NAME3} GW3
-${L2GW_NAME4} GW4
-${NET_1_SEGID} 1063
-${NET_1} NETHWV1
-${NET_2_SEGID} 1064
-${NET_2} NETHWV2
-${NS_PORT1} PORT1
-${NS_PORT2} PORT2
-${NS_PORT3} PORT3
-${NS2_PORT1} PORT4
-${NS2_PORT2} PORT5
-${NS_TAP1} TAP1
-${NS_TAP2} TAP2
-${NS_TAP3} TAP3
-${NS2_TAP1} TAP4
-${NS3_TAP1} TAP5
-${NS4_TAP1} TAP6
-${OVS_PORT_1} OVSPORT1
-${OVS_PORT_2} OVSPORT2
-${OVS2_PORT_1} OVSPORT3
-${OVS2_PORT_2} OVSPORT4
-${OVS_VM1_NAME} VM1
-${OVS_VM2_NAME} VM2
-${OVS2_VM1_NAME} VM3
-${OVS_VM2_NAME} VM4
-${SECURITY_GROUP_L2GW} sg-l2gateway
-${SECURITY_GROUP_L2GW_NONE} --no-security-groups
-${SUBNET_1} HWV-SUB1
-${SUBNET_2} HWV-SUB2
-${SUBNET_RANGE1} 13.0.0.0/24
-${SUBNET_RANGE2} 14.0.0.0/24
+${OS_IP} ${OS_CONTROL_NODE_IP}
+${OVS_IP} ${OS_COMPUTE_1_IP}
+${OVS2_IP} ${OS_COMPUTE_2_IP}
+${HWVTEP_IP} ${TOOLS_SYSTEM_1_IP}
+${HWVTEP2_IP} ${TOOLS_SYSTEM_2_IP}
+${ODL_IP} ${ODL_SYSTEM_1_IP}
+${OS_PASSWORD} ${EMPTY}
+${HWVTEP_BRIDGE} br-hwvtep-blue
+${HWVTEP2_BRIDGE} br-hwvtep-red
+${DEVSTACK_DEPLOY_PATH} /home/stack/devstack
+${HWVTEP_NS1} NS1
+${HWVTEP_NS2} NS2
+${HWVTEP2_NS1} NS3
+${HWVTEP2_NS2} NS4
+${HWVTEP_PORT_1} HWVPORT1
+${HWVTEP_PORT_2} HWVPORT2
+${HWVTEP_PORT_3} HWVPORT3
+${HWVTEP2_PORT_1} HWVPORT4
+${HWVTEP2_PORT_2} HWVPORT5
+${L2GW_NAME1} GW1
+${L2GW_NAME2} GW2
+${L2GW_NAME3} GW3
+${L2GW_NAME4} GW4
+${NET_1_SEGID} 1063
+${NET_1} NETHWV1
+${NET_2_SEGID} 1064
+${NET_2} NETHWV2
+${NS_PORT1} PORT1
+${NS_PORT2} PORT2
+${NS_PORT3} PORT3
+${NS2_PORT1} PORT4
+${NS2_PORT2} PORT5
+${NS_TAP1} TAP1
+${NS_TAP2} TAP2
+${NS_TAP3} TAP3
+${NS2_TAP1} TAP4
+${NS3_TAP1} TAP5
+${NS4_TAP1} TAP6
+${OVS_PORT_1} OVSPORT1
+${OVS_PORT_2} OVSPORT2
+${OVS2_PORT_1} OVSPORT3
+${OVS2_PORT_2} OVSPORT4
+${OVS_VM1_NAME} VM1
+${OVS_VM2_NAME} VM2
+${OVS2_VM1_NAME} VM3
+${OVS_VM2_NAME} VM4
+${SECURITY_GROUP_L2GW} sg-l2gateway
+${SECURITY_GROUP_L2GW_NONE} --no-security-groups
+${SUBNET_1} HWV-SUB1
+${SUBNET_2} HWV-SUB2
+${SUBNET_RANGE1} 13.0.0.0/24
+${SUBNET_RANGE2} 14.0.0.0/24
#Dont Change The Below Entries
-${GREP_OVSDB_DUMP_PHYSICAL_SWITCH} sudo ovsdb-client dump hardware_vtep -f csv | grep -A2 "Physical_Switch table"
-${ADD_VTEP_PS} sudo vtep-ctl add-ps
-${CREATE VTEP} sudo ovsdb-tool create /etc/openvswitch/vtep.db ${OVS_HOME}/vtep.ovsschema
-${CREATE_OVS_BRIDGE} sudo ovs-vsctl add-br
-${CREATE_OVS_PORT} sudo ovs-vsctl add-port
-${CREATE_OVSDB} sudo ovsdb-tool create /etc/openvswitch/ovs.db ${OVS_HOME}/vswitch.ovsschema
-${DEL_OVS_BRIDGE} sudo ovs-vsctl del-br
-${DETACH_VSWITCHD} sudo ovs-vswitchd --pidfile --detach
-${GET_DPNID} printf "%d\\n" 0x`sudo ovs-ofctl show -O Openflow13 ${INTEGRATION_BRIDGE} | head -1 | awk -F "dpid:" '{print $2}'`
-${GET_PORT_URL} neutron:neutron/ports/port
-${GREP_OVS} ps -ef | grep ovs
-${GREP_OVSDB_DUMP_MANAGER_TABLE} sudo ovsdb-client dump hardware_vtep -f csv | grep -A2 "Manager table"
-${HW_ETHER} hw ether
-${HWVTEP_NETWORK_TOPOLOGY} /restconf/operational/network-topology:network-topology/topology/hwvtep:1/
-${IFCONF} ifconfig
-${INIT_VSCTL} sudo ovs-vsctl --no-wait init
-${IP_LINK_ADD} ${IP_LINK} add
-${IP_LINK_DEL} ${IP_LINK} del
-${IP_LINK_SET} ${IP_LINK} set
-${IP_LINK} sudo ip link
-${IPLINK_SET} ip link set dev
-${KILL_OVSDB_PROC} sudo killall -9 ovsdb-server
-${KILL_VSWITCHD_PROC} sudo killall -9 ovs-vswitchd
-${KILL_VTEP_PROC} sudo killall -9 python
-${L2GW_CONN_CREATE} neutron l2-gateway-connection-create --default-segmentation-id 0
-${L2GW_CONN_DELETE} neutron l2-gateway-connection-delete
-${L2GW_LIST_REST_URL} /restconf/config/neutron:neutron/l2gateways/
-${L2GW_CONN_LIST_REST_URL} /restconf/config/neutron:neutron/l2gatewayConnections/
-${L2GW_CREATE} neutron l2-gateway-create --device
-${L2GW_UPDATE} neutron l2-gateway-update --device
-${L2GW_DELETE} neutron l2-gateway-delete
-${L2GW_GET_CONN_YAML} neutron l2-gateway-connection-list -f yaml
-${L2GW_GET_CONN} neutron l2-gateway-connection-list
-${L2GW_GET_YAML} neutron l2-gateway-list -f yaml
-${L2GW_GET} neutron l2-gateway-list
-${L2GW_SHOW} neutron l2-gateway-show
-${NET_ADDT_ARG} --provider-network-type vxlan --provider-segment
-${NETNS_ADD} ${NETNS} add
-${NETNS_DEL} ${NETNS} del
-${NETNS_EXEC} ${NETNS} exec
-${NETNS} sudo ip netns
-${NETSTAT} sudo netstat -nap
-${PACKET_LOSS} , 100% packet loss
-${ODL_STREAM} dummy
-${OVS_DEL_CTRLR} sudo ovs-vsctl del-controller
-${OVS_DEL_MGR} sudo ovs-vsctl del-manager
-${OVS_HOME} /usr/share/openvswitch/
-${OVS_RESTART} sudo service openvswitch-switch restart
-${OVS_SET_CTRLR} sudo ovs-vsctl set-controller
-${OVS_SET_MGR} sudo ovs-vsctl set-manager tcp
-${OVS_SHOW} sudo ovs-vsctl show
-${OVSDB_CLIENT_DUMP} sudo ovsdb-client dump hardware_vtep
-${OVSDB_NETWORK_TOPOLOGY} /restconf/operational/network-topology:network-topology/topology/ovsdb:1/
-${REM_OVSDB} sudo rm /etc/openvswitch/ovs.db
-${REM_VTEPDB} sudo rm /etc/openvswitch/vtep.db
-${SET_FAIL_MODE} sudo ovs-vsctl set-fail-mode
-${SET_VTEP_PS} sudo vtep-ctl set ${PHYSICAL_SWITCH_TABLE}
-${SLEEP1S} sleep 1
-${START_OVSDB_SERVER} sudo ovsdb-server --pidfile --detach --log-file --remote punix:/var/run/openvswitch/db.sock --remote=db:hardware_vtep,Global,managers /etc/openvswitch/ovs.db /etc/openvswitch/vtep.db
-${START_OVSVTEP} sudo /usr/share/openvswitch/scripts/ovs-vtep --log-file=/var/log/openvswitch/ovs-vtep.log --pidfile=/var/run/openvswitch/ovs-vtep.pid --detach
-${STR_VIF_REPLACE} "neutron-binding:vif-type":"ovs"
-${STR_VIF_TYPE} "neutron-binding:vif-type":"unbound"
-${STR_VNIC_REPLACE} "neutron-binding:vnic-type":"direct"
-${STR_VNIC_TYPE} "neutron-binding:vnic-type":"normal"
-${SUBNET_ADDT_ARG} --dhcp
-${UUID_COL_NAME} _uuid
-${VTEP LIST} sudo vtep-ctl list
-${VTEP_ADD_MGR} sudo vtep-ctl set-manager tcp
-${VTEP_DEL_MGR} sudo vtep-ctl del-manager
-${VTEP_LIST_COLUMN} sudo vtep-ctl --columns=
+${GREP_OVSDB_DUMP_PHYSICAL_SWITCH} sudo ovsdb-client dump hardware_vtep -f csv | grep -A2 "Physical_Switch table"
+${ADD_VTEP_PS} sudo vtep-ctl add-ps
+${CREATE VTEP} sudo ovsdb-tool create /etc/openvswitch/vtep.db ${OVS_HOME}/vtep.ovsschema
+${CREATE_OVS_BRIDGE} sudo ovs-vsctl add-br
+${CREATE_OVS_PORT} sudo ovs-vsctl add-port
+${CREATE_OVSDB} sudo ovsdb-tool create /etc/openvswitch/ovs.db ${OVS_HOME}/vswitch.ovsschema
+${DEL_OVS_BRIDGE} sudo ovs-vsctl del-br
+${DETACH_VSWITCHD} sudo ovs-vswitchd --pidfile --detach
+${GET_DPNID}
+... printf "%d\\n" 0x`sudo ovs-ofctl show -O Openflow13 ${INTEGRATION_BRIDGE} | head -1 | awk -F "dpid:" '{print $2}'`
+${GET_PORT_URL} neutron:neutron/ports/port
+${GREP_OVS} ps -ef | grep ovs
+${GREP_OVSDB_DUMP_MANAGER_TABLE} sudo ovsdb-client dump hardware_vtep -f csv | grep -A2 "Manager table"
+${HW_ETHER} hw ether
+${HWVTEP_NETWORK_TOPOLOGY} /restconf/operational/network-topology:network-topology/topology/hwvtep:1/
+${IFCONF} ifconfig
+${INIT_VSCTL} sudo ovs-vsctl --no-wait init
+${IP_LINK_ADD} ${IP_LINK} add
+${IP_LINK_DEL} ${IP_LINK} del
+${IP_LINK_SET} ${IP_LINK} set
+${IP_LINK} sudo ip link
+${IPLINK_SET} ip link set dev
+${KILL_OVSDB_PROC} sudo killall -9 ovsdb-server
+${KILL_VSWITCHD_PROC} sudo killall -9 ovs-vswitchd
+${KILL_VTEP_PROC} sudo killall -9 python
+${L2GW_CONN_CREATE} neutron l2-gateway-connection-create --default-segmentation-id 0
+${L2GW_CONN_DELETE} neutron l2-gateway-connection-delete
+${L2GW_LIST_REST_URL} /restconf/config/neutron:neutron/l2gateways/
+${L2GW_CONN_LIST_REST_URL} /restconf/config/neutron:neutron/l2gatewayConnections/
+${L2GW_CREATE} neutron l2-gateway-create --device
+${L2GW_UPDATE} neutron l2-gateway-update --device
+${L2GW_DELETE} neutron l2-gateway-delete
+${L2GW_GET_CONN_YAML} neutron l2-gateway-connection-list -f yaml
+${L2GW_GET_CONN} neutron l2-gateway-connection-list
+${L2GW_GET_YAML} neutron l2-gateway-list -f yaml
+${L2GW_GET} neutron l2-gateway-list
+${L2GW_SHOW} neutron l2-gateway-show
+${NET_ADDT_ARG} --provider-network-type vxlan --provider-segment
+${NETNS_ADD} ${NETNS} add
+${NETNS_DEL} ${NETNS} del
+${NETNS_EXEC} ${NETNS} exec
+${NETNS} sudo ip netns
+${NETSTAT} sudo netstat -nap
+${PACKET_LOSS} , 100% packet loss
+${ODL_STREAM} dummy
+${OVS_DEL_CTRLR} sudo ovs-vsctl del-controller
+${OVS_DEL_MGR} sudo ovs-vsctl del-manager
+${OVS_HOME} /usr/share/openvswitch/
+${OVS_RESTART} sudo service openvswitch-switch restart
+${OVS_SET_CTRLR} sudo ovs-vsctl set-controller
+${OVS_SET_MGR} sudo ovs-vsctl set-manager tcp
+${OVS_SHOW} sudo ovs-vsctl show
+${OVSDB_CLIENT_DUMP} sudo ovsdb-client dump hardware_vtep
+${OVSDB_NETWORK_TOPOLOGY} /restconf/operational/network-topology:network-topology/topology/ovsdb:1/
+${REM_OVSDB} sudo rm /etc/openvswitch/ovs.db
+${REM_VTEPDB} sudo rm /etc/openvswitch/vtep.db
+${SET_FAIL_MODE} sudo ovs-vsctl set-fail-mode
+${SET_VTEP_PS} sudo vtep-ctl set ${PHYSICAL_SWITCH_TABLE}
+${SLEEP1S} sleep 1
+${START_OVSDB_SERVER}
+... sudo ovsdb-server --pidfile --detach --log-file --remote punix:/var/run/openvswitch/db.sock --remote=db:hardware_vtep,Global,managers /etc/openvswitch/ovs.db /etc/openvswitch/vtep.db
+${START_OVSVTEP}
+... sudo /usr/share/openvswitch/scripts/ovs-vtep --log-file=/var/log/openvswitch/ovs-vtep.log --pidfile=/var/run/openvswitch/ovs-vtep.pid --detach
+${STR_VIF_REPLACE} "neutron-binding:vif-type":"ovs"
+${STR_VIF_TYPE} "neutron-binding:vif-type":"unbound"
+${STR_VNIC_REPLACE} "neutron-binding:vnic-type":"direct"
+${STR_VNIC_TYPE} "neutron-binding:vnic-type":"normal"
+${SUBNET_ADDT_ARG} --dhcp
+${UUID_COL_NAME} _uuid
+${VTEP LIST} sudo vtep-ctl list
+${VTEP_ADD_MGR} sudo vtep-ctl set-manager tcp
+${VTEP_DEL_MGR} sudo vtep-ctl del-manager
+${VTEP_LIST_COLUMN} sudo vtep-ctl --columns=
#HWVTEP Table Names
-${LOGICAL_SWITCH_TABLE} Logical_Switch
-${GLOBAL_TABLE} Global
-${MANAGER_TABLE} Manager
-${MCAST_MACS_LOCAL_TABLE} Mcast_Macs_Local
-${MCAST_MACS_REMOTE_TABLE} Mcast_Macs_Remote
-${PHYSICAL_LOCATOR_TABLE} Physical_Locator
-${PHYSICAL_PORT_TABLE} Physical_Port
-${PHYSICAL_SWITCH_TABLE} Physical_Switch
-${TUNNEL_TABLE} Tunnel
-${UCAST_MACS_LOCALE_TABLE} Ucast_Macs_Local
-${UCAST_MACS_REMOTE_TABLE} Ucast_Macs_Remote
+${LOGICAL_SWITCH_TABLE} Logical_Switch
+${GLOBAL_TABLE} Global
+${MANAGER_TABLE} Manager
+${MCAST_MACS_LOCAL_TABLE} Mcast_Macs_Local
+${MCAST_MACS_REMOTE_TABLE} Mcast_Macs_Remote
+${PHYSICAL_LOCATOR_TABLE} Physical_Locator
+${PHYSICAL_PORT_TABLE} Physical_Port
+${PHYSICAL_SWITCH_TABLE} Physical_Switch
+${TUNNEL_TABLE} Tunnel
+${UCAST_MACS_LOCALE_TABLE} Ucast_Macs_Local
+${UCAST_MACS_REMOTE_TABLE} Ucast_Macs_Remote
#Regular Expressions
-${VLAN_BINDING_REGEX} vlan_bindings+\\s+:\\s+[{]0[=]
-${NETSTAT_OVSDB_REGEX} ${ODL_SYSTEM_IP}:${OVSDBPORT}\\s+ESTABLISHED\\s
-${NETSTAT_OF_REGEX} ${ODL_SYSTEM_IP}:${ODL_OF_PORT}\\s+ESTABLISHED\\s
+${VLAN_BINDING_REGEX} vlan_bindings+\\s+:\\s+[{]0[=]
+${NETSTAT_OVSDB_REGEX} ${ODL_SYSTEM_IP}:${OVSDBPORT}\\s+ESTABLISHED\\s
+${NETSTAT_OF_REGEX} ${ODL_SYSTEM_IP}:${ODL_OF_PORT}\\s+ESTABLISHED\\s
*** Settings ***
-Documentation Variables for Netvirt Test Suites
+Documentation Variables for Netvirt Test Suites
+
*** Variables ***
# Exceptions for which we will not create a failure
-@{NETVIRT_DIAG_SERVICES} OPENFLOW IFM ITM DATASTORE ELAN OVSDB
-${CIRROS_stable/queens} cirros-0.3.5-x86_64-disk
-${CIRROS_stable/rocky} cirros-0.3.5-x86_64-disk
-${CIRROS_stable/stein} cirros-0.4.0-x86_64-disk
-${PASSWORD_CIRROS_stable/stein} gocubsgo
-${PASSWORD_CIRROS_stable/rocky} cubswin:)
-${PASSWORD_CIRROS_stable/queens} cubswin:)
-${CIRROS_master} cirros-0.4.0-x86_64-disk
-${DEFAULT_PING_COUNT} 3
-${PRE_CLEAN_OPENSTACK_ALL} False
-${EXTERNAL_NET_NAME} external-net
-${EXTERNAL_SUBNET_NAME} external-subnet
-${INTEGRATION_BRIDGE} br-int
-${EXTERNAL_GATEWAY} 10.10.10.250
-${EXTERNAL_SUBNET} 10.10.10.0/24
-${EXTERNAL_SUBNET_ALLOCATION_POOL} start=10.10.10.2,end=10.10.10.249
-${NET1_IPV6_ADDR_POOL} --allocation-pool start=2001:db8:0:2::2,end=2001:db8:0:2:ffff:ffff:ffff:fffe
-${NET2_IPV6_ADDR_POOL} --allocation-pool start=2001:db8:0:3::2,end=2001:db8:0:3:ffff:ffff:ffff:fffe
-${RESP_CODE} 200
-${RESP_ERROR_CODE} 400
-${MAC_REGEX} ([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})
-${IP_REGEX} (([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
-${IP6_REGEX} (2001:([0-9A-Fa-f]{0,4}:){1,6}([0-9A-Fa-f]{1,4}))
-${IP6_SUBNET_CIDR_SUFFIX} ::/64
-${IP6_ADDR_SUFFIX} (:[a-f0-9]{,4}){,4}
-${PING_REGEXP} , 0% packet loss
-${NO_PING_REGEXP} , 100% packet loss
+@{NETVIRT_DIAG_SERVICES} OPENFLOW IFM ITM DATASTORE ELAN OVSDB
+${CIRROS_stable/queens} cirros-0.3.5-x86_64-disk
+${CIRROS_stable/rocky} cirros-0.3.5-x86_64-disk
+${CIRROS_stable/stein} cirros-0.4.0-x86_64-disk
+${PASSWORD_CIRROS_stable/stein} gocubsgo
+${PASSWORD_CIRROS_stable/rocky} cubswin:)
+${PASSWORD_CIRROS_stable/queens} cubswin:)
+${CIRROS_master} cirros-0.4.0-x86_64-disk
+${DEFAULT_PING_COUNT} 3
+${PRE_CLEAN_OPENSTACK_ALL} False
+${EXTERNAL_NET_NAME} external-net
+${EXTERNAL_SUBNET_NAME} external-subnet
+${INTEGRATION_BRIDGE} br-int
+${EXTERNAL_GATEWAY} 10.10.10.250
+${EXTERNAL_SUBNET} 10.10.10.0/24
+${EXTERNAL_SUBNET_ALLOCATION_POOL} start=10.10.10.2,end=10.10.10.249
+${NET1_IPV6_ADDR_POOL} --allocation-pool start=2001:db8:0:2::2,end=2001:db8:0:2:ffff:ffff:ffff:fffe
+${NET2_IPV6_ADDR_POOL} --allocation-pool start=2001:db8:0:3::2,end=2001:db8:0:3:ffff:ffff:ffff:fffe
+${RESP_CODE} 200
+${RESP_ERROR_CODE} 400
+${MAC_REGEX} ([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})
+${IP_REGEX}
+... (([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
+${IP6_REGEX} (2001:([0-9A-Fa-f]{0,4}:){1,6}([0-9A-Fa-f]{1,4}))
+${IP6_SUBNET_CIDR_SUFFIX} ::/64
+${IP6_ADDR_SUFFIX} (:[a-f0-9]{,4}){,4}
+${PING_REGEXP} , 0% packet loss
+${NO_PING_REGEXP} , 100% packet loss
# Values passed for extra routes
-${RT_OPTIONS} --route
-${RT_CLEAR} --no-route
-${ARP_RESPONSE_REGEX} arp,arp_op=2 actions=CONTROLLER:65535,resubmit\\(,${ELAN_BASETABLE}\\)
-${ARP_RESPONSE_REGEX_FLUORINE} arp,arp_op=2 actions=resubmit\\(,${ARP_PUNT_TABLE}\\),resubmit\\(,${ARP_LEARN_TABLE}\\),resubmit\\(,${ELAN_BASETABLE}\\)
-${ARP_PUNT_RESPONSE_REGEX} arp actions=CONTROLLER:65535,learn
-${ARP_REQUEST_REGEX} arp,arp_op=1 actions=group:\\d+
-${ARP_REQUEST_GROUP_REGEX} actions=CONTROLLER:65535,bucket=actions=resubmit\\(,${ELAN_BASETABLE}\\),bucket=actions=resubmit\\(,${ARP_RESPONSE_TABLE}\\)
-${ARP_REQUEST_GROUP_REGEX_FLUORINE} actions=resubmit\\(,${ARP_RESPONSE_TABLE}\\)
-${ARP_CHECK_TABLE} 43
-${ARP_PUNT_TABLE} 195
-${ARP_LEARN_TABLE} 196
-${ARP_RESPONSE_TABLE} 81
+${RT_OPTIONS} --route
+${RT_CLEAR} --no-route
+${ARP_RESPONSE_REGEX} arp,arp_op=2 actions=CONTROLLER:65535,resubmit\\(,${ELAN_BASETABLE}\\)
+${ARP_RESPONSE_REGEX_FLUORINE}
+... arp,arp_op=2 actions=resubmit\\(,${ARP_PUNT_TABLE}\\),resubmit\\(,${ARP_LEARN_TABLE}\\),resubmit\\(,${ELAN_BASETABLE}\\)
+${ARP_PUNT_RESPONSE_REGEX} arp actions=CONTROLLER:65535,learn
+${ARP_REQUEST_REGEX} arp,arp_op=1 actions=group:\\d+
+${ARP_REQUEST_GROUP_REGEX}
+... actions=CONTROLLER:65535,bucket=actions=resubmit\\(,${ELAN_BASETABLE}\\),bucket=actions=resubmit\\(,${ARP_RESPONSE_TABLE}\\)
+${ARP_REQUEST_GROUP_REGEX_FLUORINE} actions=resubmit\\(,${ARP_RESPONSE_TABLE}\\)
+${ARP_CHECK_TABLE} 43
+${ARP_PUNT_TABLE} 195
+${ARP_LEARN_TABLE} 196
+${ARP_RESPONSE_TABLE} 81
# Values passed for BFD Tunnel monitoring
-${TUNNEL_MONITOR_ON} Tunnel Monitoring (for VXLAN tunnels): On
-${TUNNEL_MONITOR_OFF} Tunnel Monitoring (for VXLAN tunnels): Off
-${MONITORING_INTERVAL} Tunnel Monitoring Interval (for VXLAN tunnels)
-${INTERVAL_1000} 1000
-${TMI_1000} :1000
-${TMI_2000} :2000
-${TMI_20000} :20000
-${TMI_30000} :30000
-${TMI_31000} :31000
-${TMI_50} :50
-${TMI_0} :0
-${TMI_NEG} :-100
-${BFD} bfd
-${LLDP} lldp
-${TEP_SHOW} tep:show
-${TEP_SHOW_STATE} tep:show-state
-${VXLAN_SHOW} vxlan:show
-${RUN_CONFIG} show running-config
-${MONITOR_INTERVAL_NEW} ${CONFIG_API}/itm-config:tunnel-monitor-interval/
-${INTERVAL_50} {"tunnel-monitor-interval":{"interval":50}}
-${INTERVAL_0} {"tunnel-monitor-interval":{"interval":0}}
-${INTERVAL_NEG} {"tunnel-monitor-interval":{"interval":-100}}
-${INTERVAL_31000} {"tunnel-monitor-interval":{"interval":31000}}
+${TUNNEL_MONITOR_ON} Tunnel Monitoring (for VXLAN tunnels): On
+${TUNNEL_MONITOR_OFF} Tunnel Monitoring (for VXLAN tunnels): Off
+${MONITORING_INTERVAL} Tunnel Monitoring Interval (for VXLAN tunnels)
+${INTERVAL_1000} 1000
+${TMI_1000} :1000
+${TMI_2000} :2000
+${TMI_20000} :20000
+${TMI_30000} :30000
+${TMI_31000} :31000
+${TMI_50} :50
+${TMI_0} :0
+${TMI_NEG} :-100
+${BFD} bfd
+${LLDP} lldp
+${TEP_SHOW} tep:show
+${TEP_SHOW_STATE} tep:show-state
+${VXLAN_SHOW} vxlan:show
+${RUN_CONFIG} show running-config
+${MONITOR_INTERVAL_NEW} ${CONFIG_API}/itm-config:tunnel-monitor-interval/
+${INTERVAL_50} {"tunnel-monitor-interval":{"interval":50}}
+${INTERVAL_0} {"tunnel-monitor-interval":{"interval":0}}
+${INTERVAL_NEG} {"tunnel-monitor-interval":{"interval":-100}}
+${INTERVAL_31000} {"tunnel-monitor-interval":{"interval":31000}}
#ODL Rest URLs
-${NETWORK_URL} ${CONFIG_API}/neutron:neutron/networks
-${SUBNETWORK_URL} ${CONFIG_API}/neutron:neutron/subnets/
-${PORT_URL} ${CONFIG_API}/neutron:neutron/ports/
-${ROUTER_URL} ${CONFIG_API}/neutron:neutron/routers/
-${FIB_ENTRY_URL} ${CONFIG_API}/odl-fib:fibEntries/
-${VPN_IFACES_URL} ${CONFIG_API}/l3vpn:vpn-interfaces/
-${VPN_INST_IFACES_URL} ${CONFIG_API}/l3vpn-instances-interfaces:vpn-interfaces/
-${VPN_PORT_DATA_URL} ${CONFIG_API}/neutronvpn:neutron-vpn-portip-port-data/
-${TUNNEL_MONITOR_URL} ${OPERATIONAL_API}/itm-config:tunnel-monitor-params/
-${MONITOR_INTERVAL_URL} ${OPERATIONAL_API}/itm-config:tunnel-monitor-interval/
-${TUNNEL_TRANSPORTZONE} ${CONFIG_API}/itm:transport-zones
-${TUNNEL_INTERFACES} ${CONFIG_API}/ietf-interfaces:interfaces/
-${LEARNT_VIP} ${OPERATIONAL_API}/odl-l3vpn:learnt-vpn-vip-to-port-data/
-${DISPATCHER_TABLE} 17
-${GWMAC_TABLE} 19
-${L3_TABLE} 21
-${L3_PUNT_TABLE} 22
-${PDNAT_TABLE} 25
-${PSNAT_TABLE} 26
-${DNAT_TABLE} 27
-${SNAT_TABLE} 28
-${INTERNAL_TUNNEL_TABLE} 36
-${IPV6_TABLE} 45
-${SNAT_PUNT_TABLE} 46
-${ELAN_BASETABLE} 48
-${ELAN_SMACTABLE} 50
-${ELAN_DMACTABLE} 51
-${ELAN_UNKNOWNMACTABLE} 52
-${INGRESS_ACL_REMOTE_ACL_TABLE} 211
-${EGRESS_ACL_TABLE} 240
-${VLAN_INTERFACE_INGRESS_TABLE} 0
-${EGRESS_LPORT_DISPATCHER_TABLE} 220
-${EGRESS_LEARN_ACL_FILTER_TABLE} 244
-@{DEFAULT_FLOW_TABLES} 18 19 20 22 23 24 43
-... 45 48 50 51 60 80 81
-... 90 210 211 212 213 214 215
-... 216 217 239 240 241 242 243
-... 244 245 246 247
-${TRANSPORT_ZONE_ENDPOINT_URL} ${CONFIG_API}/itm:transport-zones/transport-zone
-${GENIUS_VAR_DIR} ${CURDIR}/../../variables/genius
-${TEP_NOT_HOSTED_ZONE_URL} ${OPERATIONAL_API}/itm:not-hosted-transport-zones
+${NETWORK_URL} ${CONFIG_API}/neutron:neutron/networks
+${SUBNETWORK_URL} ${CONFIG_API}/neutron:neutron/subnets/
+${PORT_URL} ${CONFIG_API}/neutron:neutron/ports/
+${ROUTER_URL} ${CONFIG_API}/neutron:neutron/routers/
+${FIB_ENTRY_URL} ${CONFIG_API}/odl-fib:fibEntries/
+${VPN_IFACES_URL} ${CONFIG_API}/l3vpn:vpn-interfaces/
+${VPN_INST_IFACES_URL} ${CONFIG_API}/l3vpn-instances-interfaces:vpn-interfaces/
+${VPN_PORT_DATA_URL} ${CONFIG_API}/neutronvpn:neutron-vpn-portip-port-data/
+${TUNNEL_MONITOR_URL} ${OPERATIONAL_API}/itm-config:tunnel-monitor-params/
+${MONITOR_INTERVAL_URL} ${OPERATIONAL_API}/itm-config:tunnel-monitor-interval/
+${TUNNEL_TRANSPORTZONE} ${CONFIG_API}/itm:transport-zones
+${TUNNEL_INTERFACES} ${CONFIG_API}/ietf-interfaces:interfaces/
+${LEARNT_VIP} ${OPERATIONAL_API}/odl-l3vpn:learnt-vpn-vip-to-port-data/
+${DISPATCHER_TABLE} 17
+${GWMAC_TABLE} 19
+${L3_TABLE} 21
+${L3_PUNT_TABLE} 22
+${PDNAT_TABLE} 25
+${PSNAT_TABLE} 26
+${DNAT_TABLE} 27
+${SNAT_TABLE} 28
+${INTERNAL_TUNNEL_TABLE} 36
+${IPV6_TABLE} 45
+${SNAT_PUNT_TABLE} 46
+${ELAN_BASETABLE} 48
+${ELAN_SMACTABLE} 50
+${ELAN_DMACTABLE} 51
+${ELAN_UNKNOWNMACTABLE} 52
+${INGRESS_ACL_REMOTE_ACL_TABLE} 211
+${EGRESS_ACL_TABLE} 240
+${VLAN_INTERFACE_INGRESS_TABLE} 0
+${EGRESS_LPORT_DISPATCHER_TABLE} 220
+${EGRESS_LEARN_ACL_FILTER_TABLE} 244
+@{DEFAULT_FLOW_TABLES} 18 19 20 22 23 24 43
+... 45 48 50 51 60 80 81
+... 90 210 211 212 213 214 215
+... 216 217 239 240 241 242 243
+... 244 245 246 247
+${TRANSPORT_ZONE_ENDPOINT_URL} ${CONFIG_API}/itm:transport-zones/transport-zone
+${GENIUS_VAR_DIR} ${CURDIR}/../../variables/genius
+${TEP_NOT_HOSTED_ZONE_URL} ${OPERATIONAL_API}/itm:not-hosted-transport-zones
*** Settings ***
-Documentation Resource file containing OpenFlow Plugin variables.
+Documentation Resource file containing OpenFlow Plugin variables.
+
*** Variables ***
-${RFC8040_RESTCONF_ROOT} /rests
-${RFC8040_DATA_RESOURCE} ${RFC8040_RESTCONF_ROOT}/data
-${RFC8040_CONFIG_CONTENT} content=config
-${RFC8040_OPERATIONAL_CONTENT} content=nonconfig
-${RFC8040_NODES_API} ${RFC8040_DATA_RESOURCE}/opendaylight-inventory:nodes
-${RFC8040_CONFIG_NODES_API} ${RFC8040_NODES_API}?${RFC8040_CONFIG_CONTENT}
-${RFC8040_OPERATIONAL_NODES_API} ${RFC8040_NODES_API}?${RFC8040_OPERATIONAL_CONTENT}
-${RFC8040_TOPO_API} ${RFC8040_DATA_RESOURCE}/network-topology:network-topology
-${RFC8040_OPERATIONAL_TOPO_API} ${RFC8040_TOPO_API}?${RFC8040_OPERATIONAL_CONTENT}
-${RFC8040_OPERATIONAL_TOPO_FLOW1_API} ${RFC8040_TOPO_API}/topology=flow%3A1?${RFC8040_OPERATIONAL_CONTENT}
+${RFC8040_RESTCONF_ROOT} /rests
+${RFC8040_DATA_RESOURCE} ${RFC8040_RESTCONF_ROOT}/data
+${RFC8040_CONFIG_CONTENT} content=config
+${RFC8040_OPERATIONAL_CONTENT} content=nonconfig
+${RFC8040_NODES_API} ${RFC8040_DATA_RESOURCE}/opendaylight-inventory:nodes
+${RFC8040_CONFIG_NODES_API} ${RFC8040_NODES_API}?${RFC8040_CONFIG_CONTENT}
+${RFC8040_OPERATIONAL_NODES_API} ${RFC8040_NODES_API}?${RFC8040_OPERATIONAL_CONTENT}
+${RFC8040_TOPO_API} ${RFC8040_DATA_RESOURCE}/network-topology:network-topology
+${RFC8040_OPERATIONAL_TOPO_API} ${RFC8040_TOPO_API}?${RFC8040_OPERATIONAL_CONTENT}
+${RFC8040_OPERATIONAL_TOPO_FLOW1_API} ${RFC8040_TOPO_API}/topology=flow%3A1?${RFC8040_OPERATIONAL_CONTENT}
*** Settings ***
-Documentation Resource file containing OVSDB variables.
+Documentation Resource file containing OVSDB variables.
+
*** Variables ***
-${OVSDB_NODE_PORT} 6634
-${RFC8040_RESTCONF_ROOT} /rests
-${RFC8040_DATA_RESOURCE} ${RFC8040_RESTCONF_ROOT}/data
-${RFC8040_CONFIG_CONTENT} content=config
-${RFC8040_OPERATIONAL_CONTENT} content=nonconfig
-${RFC8040_TOPO_API} ${RFC8040_DATA_RESOURCE}/network-topology:network-topology
-${RFC8040_CONFIG_TOPO_API} ${RFC8040_TOPO_API}?${RFC8040_CONFIG_CONTENT}
-${RFC8040_OPERATIONAL_TOPO_API} ${RFC8040_TOPO_API}?${RFC8040_OPERATIONAL_CONTENT}
-${RFC8040_TOPO_OVSDB1_API} ${RFC8040_TOPO_API}/topology=ovsdb%3A1
-${RFC8040_CONFIG_TOPO_OVSDB1_API} ${RFC8040_TOPO_OVSDB1_API}?${RFC8040_CONFIG_CONTENT}
-${RFC8040_OPERATIONAL_TOPO_OVSDB1_API} ${RFC8040_TOPO_OVSDB1_API}?${RFC8040_OPERATIONAL_CONTENT}
-${RFC8040_SOUTHBOUND_NODE_API} ${RFC8040_TOPO_OVSDB1_API}/node=ovsdb%3A%2F%2F
-${RFC8040_SOUTHBOUND_NODE_TOOLS_API} ${RFC8040_SOUTHBOUND_NODE_API}${TOOLS_SYSTEM_IP}%3A${OVSDB_NODE_PORT}
-${RFC8040_SOUTHBOUND_NODE_HOST1_API} ${RFC8040_TOPO_OVSDB1_API}/node=ovsdb%3AHOST1
+${OVSDB_NODE_PORT} 6634
+${RFC8040_RESTCONF_ROOT} /rests
+${RFC8040_DATA_RESOURCE} ${RFC8040_RESTCONF_ROOT}/data
+${RFC8040_CONFIG_CONTENT} content=config
+${RFC8040_OPERATIONAL_CONTENT} content=nonconfig
+${RFC8040_TOPO_API} ${RFC8040_DATA_RESOURCE}/network-topology:network-topology
+${RFC8040_CONFIG_TOPO_API} ${RFC8040_TOPO_API}?${RFC8040_CONFIG_CONTENT}
+${RFC8040_OPERATIONAL_TOPO_API} ${RFC8040_TOPO_API}?${RFC8040_OPERATIONAL_CONTENT}
+${RFC8040_TOPO_OVSDB1_API} ${RFC8040_TOPO_API}/topology=ovsdb%3A1
+${RFC8040_CONFIG_TOPO_OVSDB1_API} ${RFC8040_TOPO_OVSDB1_API}?${RFC8040_CONFIG_CONTENT}
+${RFC8040_OPERATIONAL_TOPO_OVSDB1_API} ${RFC8040_TOPO_OVSDB1_API}?${RFC8040_OPERATIONAL_CONTENT}
+${RFC8040_SOUTHBOUND_NODE_API} ${RFC8040_TOPO_OVSDB1_API}/node=ovsdb%3A%2F%2F
+${RFC8040_SOUTHBOUND_NODE_TOOLS_API} ${RFC8040_SOUTHBOUND_NODE_API}${TOOLS_SYSTEM_IP}%3A${OVSDB_NODE_PORT}
+${RFC8040_SOUTHBOUND_NODE_HOST1_API} ${RFC8040_TOPO_OVSDB1_API}/node=ovsdb%3AHOST1
*** Variables ***
# Generic Service Function Chaining URIs
-${REST_CONFIG} /restconf/config
-${REST_OPER} /restconf/operational
-${OPERATIONAL_RSPS_URI} ${REST_OPER}/rendered-service-path:rendered-service-paths
-${OPERATIONAL_RSP_URI} ${REST_OPER}/rendered-service-path:rendered-service-paths/rendered-service-path
-${OVSDB_TOPOLOGY_URI} ${REST_OPER}/network-topology:network-topology/topology/ovsdb:1
-${RENDERED_SERVICE_PATHS_URI} ${REST_CONFIG}/rendered-service-path:rendered-service-paths
-${SERVICE_CHAINS_URI} ${REST_CONFIG}/service-function-chain:service-function-chains
-${SERVICE_CHAIN_URI} ${SERVICE_CHAINS_URI}/service-function-chain
-${SERVICE_CLASSIFIERS_URI} ${REST_CONFIG}/service-function-classifier:service-function-classifiers
-${SERVICE_FORWARDERS_URI} ${REST_CONFIG}/service-function-forwarder:service-function-forwarders
-${SERVICE_FORWARDER_URI} ${SERVICE_FORWARDERS_URI}/service-function-forwarder
-${SERVICE_FUNCTIONS_URI} ${REST_CONFIG}/service-function:service-functions
-${SERVICE_FUNCTION_URI} ${SERVICE_FUNCTIONS_URI}/service-function
-${SERVICE_FUNCTION_ACLS_URI} ${REST_CONFIG}/ietf-access-control-list:access-lists
-${SERVICE_FUNCTION_PATHS_STATE_URI} ${REST_OPER}/service-function-path:service-function-paths-state
-${SERVICE_FUNCTION_PATH_STATE_URI} ${SERVICE_FUNCTION_PATHS_STATE_URI}/service-function-path-state
-${SERVICE_FUNCTION_PATHS_URI} ${REST_CONFIG}/service-function-path:service-function-paths
-${SERVICE_FUNCTION_PATH_URI} ${SERVICE_FUNCTION_PATHS_URI}/service-function-path
-${SERVICE_FUNCTION_TYPES_URI} ${REST_CONFIG}/service-function-type:service-function-types
-${SERVICE_METADATA_URI} ${REST_CONFIG}/service-function-path-metadata:service-function-metadata
-${SERVICE_NODES_URI} ${REST_CONFIG}/service-node:service-nodes
-${SERVICE_NODE_URI} ${SERVICE_NODES_URI}/service-node
-${SERVICE_SCHED_TYPES_URI} ${REST_CONFIG}/service-function-scheduler-type:service-function-scheduler-types
-${SERVICE_SCHED_TYPE_URI_BASE} ${SERVICE_SCHED_TYPES_URI}/service-function-scheduler-type/service-function-scheduler-type:
-${SERVICE_RANDOM_SCHED_TYPE_URI} ${SERVICE_SCHED_TYPE_URI_BASE}random
-${SERVICE_LOADBALANCE_SCHED_TYPE_URI} ${SERVICE_SCHED_TYPE_URI_BASE}load-balance
-${SERVICE_ROUNDROBIN_SCHED_TYPE_URI} ${SERVICE_SCHED_TYPE_URI_BASE}round-robin
-${SERVICE_SHORTESTPATH_SCHED_TYPE_URI} ${SERVICE_SCHED_TYPE_URI_BASE}shortest-path
+${REST_CONFIG} /restconf/config
+${REST_OPER} /restconf/operational
+${OPERATIONAL_RSPS_URI} ${REST_OPER}/rendered-service-path:rendered-service-paths
+${OPERATIONAL_RSP_URI}
+... ${REST_OPER}/rendered-service-path:rendered-service-paths/rendered-service-path
+${OVSDB_TOPOLOGY_URI} ${REST_OPER}/network-topology:network-topology/topology/ovsdb:1
+${RENDERED_SERVICE_PATHS_URI} ${REST_CONFIG}/rendered-service-path:rendered-service-paths
+${SERVICE_CHAINS_URI} ${REST_CONFIG}/service-function-chain:service-function-chains
+${SERVICE_CHAIN_URI} ${SERVICE_CHAINS_URI}/service-function-chain
+${SERVICE_CLASSIFIERS_URI} ${REST_CONFIG}/service-function-classifier:service-function-classifiers
+${SERVICE_FORWARDERS_URI} ${REST_CONFIG}/service-function-forwarder:service-function-forwarders
+${SERVICE_FORWARDER_URI} ${SERVICE_FORWARDERS_URI}/service-function-forwarder
+${SERVICE_FUNCTIONS_URI} ${REST_CONFIG}/service-function:service-functions
+${SERVICE_FUNCTION_URI} ${SERVICE_FUNCTIONS_URI}/service-function
+${SERVICE_FUNCTION_ACLS_URI} ${REST_CONFIG}/ietf-access-control-list:access-lists
+${SERVICE_FUNCTION_PATHS_STATE_URI} ${REST_OPER}/service-function-path:service-function-paths-state
+${SERVICE_FUNCTION_PATH_STATE_URI} ${SERVICE_FUNCTION_PATHS_STATE_URI}/service-function-path-state
+${SERVICE_FUNCTION_PATHS_URI} ${REST_CONFIG}/service-function-path:service-function-paths
+${SERVICE_FUNCTION_PATH_URI} ${SERVICE_FUNCTION_PATHS_URI}/service-function-path
+${SERVICE_FUNCTION_TYPES_URI} ${REST_CONFIG}/service-function-type:service-function-types
+${SERVICE_METADATA_URI} ${REST_CONFIG}/service-function-path-metadata:service-function-metadata
+${SERVICE_NODES_URI} ${REST_CONFIG}/service-node:service-nodes
+${SERVICE_NODE_URI} ${SERVICE_NODES_URI}/service-node
+${SERVICE_SCHED_TYPES_URI}
+... ${REST_CONFIG}/service-function-scheduler-type:service-function-scheduler-types
+${SERVICE_SCHED_TYPE_URI_BASE}
+... ${SERVICE_SCHED_TYPES_URI}/service-function-scheduler-type/service-function-scheduler-type:
+${SERVICE_RANDOM_SCHED_TYPE_URI} ${SERVICE_SCHED_TYPE_URI_BASE}random
+${SERVICE_LOADBALANCE_SCHED_TYPE_URI} ${SERVICE_SCHED_TYPE_URI_BASE}load-balance
+${SERVICE_ROUNDROBIN_SCHED_TYPE_URI} ${SERVICE_SCHED_TYPE_URI_BASE}round-robin
+${SERVICE_SHORTESTPATH_SCHED_TYPE_URI} ${SERVICE_SCHED_TYPE_URI_BASE}shortest-path