Unification TP Inside Inventory test reworked.
This patch should be submitted after this change
https://git.opendaylight.org/gerrit/#/c/33854/
will be merged
Change-Id: I1b4a1d17cb2bcc0a18475df4dc859d60b5088e7a
Signed-off-by: Andrej Záň <andrej.zan@pantheon.sk>
Signed-off-by: Branislav Janošík <branislav.janosik@pantheon.sk>
Should Contain ${output} ${feature_name}
[Return] ${output}
-Verify Feature Is Not Installed
- [Arguments] ${feature_name} ${controller}=${ODL_SYSTEM_IP} ${karaf_port}=${KARAF_SHELL_PORT}
- [Documentation] Will Succeed if the given ${feature_name} is NOT found in the output of "feature:list -i"
- ${output}= Issue Command On Karaf Console feature:list -i | grep ${feature_name} ${controller} ${karaf_port}
- Should Not Contain ${output} ${feature_name}
- [Return] ${output}
-
Issue Command On Karaf Console
[Arguments] ${cmd} ${controller}=${ODL_SYSTEM_IP} ${karaf_port}=${KARAF_SHELL_PORT} ${timeout}=5
[Documentation] Will execute the given ${cmd} by ssh'ing to the karaf console running on ${ODL_SYSTEM_IP}
*** Settings ***
Variables ../variables/Variables.py
Variables ../variables/topoprocessing/Topologies.py
+Variables ../variables/topoprocessing/TopologyRequests.py
Library RequestsLibrary
Library SSHLibrary
Library XML
Issue Command On Karaf Console log:set DEBUG org.opendaylight.topoprocessing
Install a Feature odl-restconf-noauth timeout=30
Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${SEND_ACCEPT_XML_HEADERS}
- ${features} Get Installed Features
+ ${features} Issue Command On Karaf Console feature:list -i
${lines} Get Lines Containing String ${features} odl-topoprocessing-framework
${length} Get Length ${lines}
Install a Feature odl-openflowplugin-nsf-model-li odl-topoprocessing-framework odl-topoprocessing-network-topology odl-topoprocessing-inventory odl-mdsal-models odl-ovsdb-southbound-impl timeout=120
Insert Underlay Topologies
[Documentation] Insert underlay topologies used by following tests
Log Inserting underlay topologies
- # Network underlay topology 1
- ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/network-topo:1 data=${NETWORK_UNDERLAY_TOPOLOGY_1}
- Log ${resp.content}
- Should Be Equal As Strings ${resp.status_code} 200
- # Network underlay topology 2
- ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/network-topo:2 data=${NETWORK_UNDERLAY_TOPOLOGY_2}
- Log ${resp.content}
- Should Be Equal As Strings ${resp.status_code} 200
+ # Network underlay topologies
+ : FOR ${index} IN RANGE 1 6
+ \ ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/network-topo:${index} data=${NETWORK_UNDERLAY_TOPOLOGY_${index}}
+ \ Log ${resp.content}
+ \ Should Be Equal As Strings ${resp.status_code} 200
# Openflow underlay nodes
${resp} Put Request session ${CONFIG_API}/opendaylight-inventory:nodes data=${OPENFLOW_UNDERLAY_NODES}
Log ${resp.content}
Should Be Equal As Strings ${resp.status_code} 200
- # Openflow underlay topology 1
- ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/openflow-topo:1 data=${OPENFLOW_UNDERLAY_TOPOLOGY_1}
- Log ${resp.content}
- Should Be Equal As Strings ${resp.status_code} 200
- # Openflow underlay topology 2
- ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/openflow-topo:2 data=${OPENFLOW_UNDERLAY_TOPOLOGY_2}
- Log ${resp.content}
- Should Be Equal As Strings ${resp.status_code} 200
+ # Openflow underlay topologies
+ : FOR ${index} IN RANGE 1 6
+ \ ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/openflow-topo:${index} data=${OPENFLOW_UNDERLAY_TOPOLOGY_${index}}
+ \ Log ${resp.content}
+ \ Should Be Equal As Strings ${resp.status_code} 200
Issue Command On Karaf Console log:clear
Log ${resp.content}
Prepare Unification Inside Topology Request
- [Arguments] ${request_template} ${model} ${correlation_item} ${target-field} ${underlay_topo1}
+ [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo1}
[Documentation] Prepare topology request for unification inside from template
${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model
${request_template} Set Element Text ${request_template} aggregation-only xpath=.//correlations/correlation/type
${request_template} Set Element Text ${request_template} unification xpath=.//correlation/aggregation/aggregation-type
${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[1]/input-model
${request_template} Set Element Text ${request_template} ${underlay_topo1} xpath=.//correlation/aggregation/mapping[1]/underlay-topology
- ${request_template} Set Element Text ${request_template} ${target-field} xpath=.//correlation/aggregation/mapping[1]/target-field
${request_template} Element to String ${request_template}
[Return] ${request_template}
Prepare Unification Topology Request
- [Arguments] ${request_template} ${model} ${correlation_item} ${target-field} ${underlay_topo1} ${underlay_topo2}
+ [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo1} ${underlay_topo2}
[Documentation] Prepare topology request for unification on two topologies from template
- ${request_template} Prepare Unification Inside Topology Request ${request_template} ${model} ${correlation_item} ${target-field} ${underlay_topo1}
+ ${request_template} Prepare Unification Inside Topology Request ${request_template} ${model} ${correlation_item} ${underlay_topo1}
${request_template} Set Element Text ${request_template} ${underlay_topo2} xpath=.//correlation/aggregation/mapping[2]/underlay-topology
- ${request_template} Set Element Text ${request_template} ${target-field} xpath=.//correlation/aggregation/mapping[2]/target-field
${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[2]/input-model
${request_template} Element to String ${request_template}
[Return] ${request_template}
-Get Installed Features
- [Documentation] Returns list of installed features as String
- Open Connection ${ODL_SYSTEM_IP} port=${KARAF_SHELL_PORT} prompt=${KARAF_PROMPT} timeout=5
- Flexible SSH Login ${KARAF_USER} ${KARAF_PASSWORD}
- Write feature:list -i
- ${features} Read until prompt
- Close Connection
- Log Installed features:
- Log ${features}
- [Return] ${features}
+Prepare Unification Filtration Topology Request
+ [Arguments] ${request_template} ${model} ${target-field} ${underlay_topo2}
+ [Documentation] Prepare topology request for unification on two topologies from template
+ ${request_template} Set Element Text ${request_template} ${underlay_topo2} xpath=.//correlation/aggregation/mapping[2]/underlay-topology
+ ${request_template} Set Element Text ${request_template} ${target-field} xpath=.//correlation/aggregation/mapping[2]/target-field[1]/target-field-path
+ ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[2]/input-model
+ ${request_template} Element to String ${request_template}
+ [Return] ${request_template}
+
+Prepare Unification Filtration Inside Topology Request
+ [Arguments] ${request_template} ${model} ${correlation_item} ${target-field} ${underlay_topo}
+ [Documentation] Prepare topology request for unification filtration inside from template
+ ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model
+ ${request_template} Set Element Text ${request_template} filtration-aggregation xpath=.//correlations/correlation/type
+ ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item
+ ${request_template} Set Element Text ${request_template} unification xpath=.//correlation/aggregation/aggregation-type
+ ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[1]/input-model
+ ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/aggregation/mapping[1]/underlay-topology
+ ${request_template} Set Element Text ${request_template} ${target-field} xpath=.//correlation/aggregation/mapping[1]/target-field[1]/target-field-path
+ ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/filtration/underlay-topology
+ ${request_template} Element to String ${request_template}
+ [Return] ${request_template}
+
+Prepare Filtration Topology Request
+ [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo}
+ [Documentation] Prepare topology request for filtration from template
+ ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model
+ ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item
+ ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/filtration/underlay-topology
+ [Return] ${request_template}
+
+Insert Target Field
+ [Arguments] ${request_template} ${mapping_index} ${target_field_path} ${matching_key}
+ [Documentation] Add target field to request
+ ${target_field_template} Set Element Text ${TARGET_FIELD} ${target_field_path} xpath=.//target-field-path
+ ${target_field_template} Set Element Text ${target_field_template} ${matching_key} xpath=.//matching-key
+ ${request_template} Add Element ${request_template} ${target_field_template} xpath=.//correlation/aggregation/mapping[${mapping_index}]
+ ${request_template} Element to String ${request_template}
+ [Return] ${request_template}
+
+Insert Filter
+ [Arguments] ${request_template} ${filter_template} ${target_field}
+ [Documentation] Add filter to filtration
+ ${request_template} Add Element ${request_template} ${filter_template} xpath=.//correlation/filtration
+ ${model} Get Element Text ${request_template} xpath=.//correlations/output-model
+ ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/filtration/filter/input-model
+ ${request_template} Set Element Text ${request_template} ${target_field} xpath=.//correlation/filtration/filter/target-field
+ [Return] ${request_template}
+
+Set IPV4 Filter
+ [Arguments] ${request_template} ${ip_address}
+ [Documentation] Set filter ipv4 address
+ ${request_template} Set Element Text ${request_template} ${ip_address} xpath=.//correlation/filtration/filter/ipv4-address-filter/ipv4-address
+ ${request_template} Element to String ${request_template}
+ [Return] ${request_template}
+
+Set Range Number Filter
+ [Arguments] ${request_template} ${min_number} ${max_number}
+ [Documentation] Set filter minimum and maximum number values
+ ${request_template} Set Element Text ${request_template} ${min_number} xpath=.//correlation/filtration/filter/range-number-filter/min-number-value
+ ${request_template} Set Element Text ${request_template} ${max_number} xpath=.//correlation/filtration/filter/range-number-filter/max-number-value
+ ${request_template} Element to String ${request_template}
+ [Return] ${request_template}
+
+Set Range String Filter
+ [Arguments] ${request_template} ${min_value} ${max_value}
+ [Documentation] Set filter minimum and maximum string values
+ ${request_template} Set Element Text ${request_template} ${min_value} xpath=.//correlation/filtration/filter/range-string-filter/min-string-value
+ ${request_template} Set Element Text ${request_template} ${max_value} xpath=.//correlation/filtration/filter/range-string-filter/max-string-value
+ ${request_template} Element to String ${request_template}
+ [Return] ${request_template}
+
+Set Specific Number Filter
+ [Arguments] ${request_template} ${number}
+ [Documentation] Set filter number value
+ ${request_template} Set Element Text ${request_template} ${number} xpath=.//correlation/filtration/filter/specific-number-filter/specific-number
+ ${request_template} Element to String ${request_template}
+ [Return] ${request_template}
+
+Set Specific String Filter
+ [Arguments] ${request_template} ${string_value}
+ [Documentation] Set filter string value
+ ${request_template} Set Element Text ${request_template} ${string_value} xpath=.//correlation/filtration/filter/specific-string-filter/specific-string
+ ${request_template} Element to String ${request_template}
+ [Return] ${request_template}
+
+Set IPV6 Filter
+ [Arguments] ${request_template} ${ip_address}
+ [Documentation] Set filter ipv6 address
+ ${request_template} Set Element Text ${request_template} ${ip_address} xpath=.//correlation/filtration/filter/ipv6-address-filter/ipv6-address
+ ${request_template} Element to String ${request_template}
+ [Return] ${request_template}
+
+Set Script Filter
+ [Arguments] ${request_template} ${script_language} ${script}
+ [Documentation] Set filter script
+ ${request_template} Set Element Text ${request_template} ${script_language} xpath=.//correlation/filtration/filter/script-filter/scripting/language
+ ${request_template} Set Element Text ${request_template} ${script} xpath=.//correlation/filtration/filter/script-filter/scripting/script
+ ${request_template} Element to String ${request_template}
+ [Return] ${request_template}
+
+Insert Link Computation Inside
+ [Arguments] ${request_template} ${link_computation_template} ${input_model} ${underlay_topology}
+ [Documentation] Add link computation to request
+ ${request_template} Add Element ${request_template} ${link_computation_template} xpath=.
+ ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/node-info/input-model
+ ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info/input-model
+ ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/output-model
+ ${request_template} Set Element Text ${request_template} ${underlay_topology} xpath=.//link-computation/link-info/link-topology
+ ${request_template} Set Element Attribute ${request_template} xmlns:n urn:opendaylight:topology:correlation xpath=./link-computation
+ ${request_template} Element to String ${request_template}
+ [Return] ${request_template}
+
+Insert Link Computation
+ [Arguments] ${request_template} ${link_computation_template} ${input_model} ${underlay_topology_1} ${underlay_topology_2}
+ [Documentation] Add link computation to request
+ ${request_template} Add Element ${request_template} ${link_computation_template} xpath=.
+ ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/node-info/input-model
+ ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info[1]/input-model
+ ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info[2]/input-model
+ ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/output-model
+ ${request_template} Set Element Text ${request_template} ${underlay_topology_1} xpath=.//link-computation/link-info[1]/link-topology
+ ${request_template} Set Element Text ${request_template} ${underlay_topology_2} xpath=.//link-computation/link-info[2]/link-topology
+ ${request_template} Set Element Attribute ${request_template} xmlns:n urn:opendaylight:topology:correlation xpath=./link-computation
+ ${request_template} Element to String ${request_template}
+ [Return] ${request_template}
Insert Scripting into Request
[Arguments] ${request} ${language} ${script}
*** Test Cases ***
Unification Node
[Documentation] Test unification operation on Network Topology model
- ${request} Prepare Unification Topology Request ${UNIFICATION_NT} network-topology-model node l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4 network-topo:1
- ... network-topo:2
+ ${request} Prepare Unification Topology Request ${UNIFICATION_NT} network-topology-model node network-topo:1 network-topo:2
+ ${request} Insert Target Field ${request} 0 l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4 0
+ ${request} Insert Target Field ${request} 1 l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4 0
${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
Should Contain ${resp.content} <topology-id>topo:1</topology-id>
Should Contain X Times ${resp.content} <node-id>node: 9
Unification Node Inventory
[Documentation] Test unification operation on inventory model
- ${request} Prepare Unification Topology Request ${UNIFICATION_NT} opendaylight-inventory-model node flow-node-inventory:ip-address openflow-topo:1
- ... openflow-topo:2
+ ${request} Prepare Unification Topology Request ${UNIFICATION_NT} opendaylight-inventory-model node openflow-topo:1 openflow-topo:2
+ ${request} Insert Target Field ${request} 0 flow-node-inventory:ip-address 0
+ ${request} Insert Target Field ${request} 1 flow-node-inventory:ip-address 0
${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
Should Contain ${resp.content} <topology-id>topo:1</topology-id>
Should Contain X Times ${resp.content} <node-id>node: 8
Unification Scripting Node
[Documentation] Test unification operation on Network Topology model using scripting
- ${request} Prepare Unification Topology Request ${UNIFICATION_NT} network-topology-model node l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4 network-topo:1
- ... network-topo:2
- ${request} Insert Scripting into Request ${request} javascript if (originalItem.getLeafNode().getValue().indexOf("192.168.1.1") > -1 && newItem.getLeafNode().getValue().indexOf("192.168.1.3") > -1 || originalItem.getLeafNode().getValue().indexOf("192.168.1.3") > -1 && newItem.getLeafNode().getValue().indexOf("192.168.1.1") > -1) {aggregable.setResult(true);} else { aggregable.setResult(false);}
+ ${request} Prepare Unification Topology Request ${UNIFICATION_NT} network-topology-model node network-topo:1 network-topo:2
+ ${request} Insert Target Field ${request} 0 l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4 0
+ ${request} Insert Target Field ${request} 1 l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4 0
+ ${request} Insert Scripting into Request ${request} javascript if (originalItem.getLeafNodes().get(java.lang.Integer.valueOf('0')).getValue().indexOf("192.168.1.1") > -1 && newItem.getLeafNodes().get(java.lang.Integer.valueOf('0')).getValue().indexOf("192.168.1.3") > -1 || originalItem.getLeafNodes().get(java.lang.Integer.valueOf('0')).getValue().indexOf("192.168.1.3") > -1 && newItem.getLeafNodes().get(java.lang.Integer.valueOf('0')).getValue().indexOf("192.168.1.1") > -1) {aggregable.setResult(true);} else { aggregable.setResult(false);}
${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
Should Contain ${resp.content} <topology-id>topo:1</topology-id>
Should Contain X Times ${resp.content} <node-id>node: 9
Unification Scripting Node Inventory
[Documentation] Test unification operation on inventory model using scripting
- ${request} Prepare Unification Topology Request ${UNIFICATION_NT} opendaylight-inventory-model node flow-node-inventory:ip-address openflow-topo:1
- ... openflow-topo:2
- ${request} Insert Scripting into Request ${request} javascript if (originalItem.getLeafNode().getValue().indexOf("192.168.1.2") > -1 && newItem.getLeafNode().getValue().indexOf("192.168.1.4") > -1 || originalItem.getLeafNode().getValue().indexOf("192.168.1.4") > -1 && newItem.getLeafNode().getValue().indexOf("192.168.1.2") > -1) {aggregable.setResult(true);} else { aggregable.setResult(false);}
+ ${request} Prepare Unification Topology Request ${UNIFICATION_NT} opendaylight-inventory-model node openflow-topo:1 openflow-topo:2
+ ${request} Insert Target Field ${request} 0 flow-node-inventory:ip-address 0
+ ${request} Insert Target Field ${request} 1 flow-node-inventory:ip-address 0
+ ${request} Insert Scripting into Request ${request} javascript if (originalItem.getLeafNodes().get(java.lang.Integer.valueOf('0')).getValue().indexOf("192.168.1.2") > -1 && newItem.getLeafNodes().get(java.lang.Integer.valueOf('0')).getValue().indexOf("192.168.1.4") > -1 || originalItem.getLeafNodes().get(java.lang.Integer.valueOf('0')).getValue().indexOf("192.168.1.4") > -1 && newItem.getLeafNodes().get(java.lang.Integer.valueOf('0')).getValue().indexOf("192.168.1.2") > -1) {aggregable.setResult(true);} else { aggregable.setResult(false);}
${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
Should Contain ${resp.content} <topology-id>topo:1</topology-id>
Should Contain X Times ${resp.content} <node-id>node: 9
Unification Node Inside
[Documentation] Test of unification type of aggregation inside on nodes on Network Topology model
- ${request} Prepare Unification Inside Topology Request ${UNIFICATION_NT_AGGREGATE_INSIDE} network-topology-model node l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4 network-topo:1
+ ${request} Prepare Unification Inside Topology Request ${UNIFICATION_NT_AGGREGATE_INSIDE} network-topology-model node network-topo:1
+ ${request} Insert Target Field ${request} 0 l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4 0
${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
Should Contain ${resp.content} <topology-id>topo:1</topology-id>
Should Contain X Times ${resp.content} <node-id>node: 4
Unification Node Inside Inventory
[Documentation] Test of unification type of aggregation inside on nodes on Inventory model
- ${request} Prepare Unification Inside Topology Request ${UNIFICATION_NT_AGGREGATE_INSIDE} opendaylight-inventory-model node flow-node-inventory:ip-address openflow-topo:2
+ ${request} Prepare Unification Inside Topology Request ${UNIFICATION_NT_AGGREGATE_INSIDE} opendaylight-inventory-model node openflow-topo:2
+ ${request} Insert Target Field ${request} 0 flow-node-inventory:ip-address 0
${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
Should Contain ${resp.content} <topology-id>topo:1</topology-id>
Should Contain X Times ${resp.content} <node-id>node: 4
Unification Termination Point Inside
[Documentation] Test aggregate inside operation on termination points
- ${request} Prepare Unification Inside Topology Request ${UNIFICATION_NT_AGGREGATE_INSIDE} network-topology-model termination-point ovsdb:ofport network-topo:1
+ ${request} Prepare Unification Inside Topology Request ${UNIFICATION_NT_AGGREGATE_INSIDE} network-topology-model termination-point network-topo:1
+ ${request} Insert Target Field ${request} 0 ovsdb:ofport 0
${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
Should Contain ${resp.content} <topology-id>topo:1</topology-id>
- ${response_xml} Get Element ${resp.content} xpath=.//topology[topology-id='topo:1']
- ${response_xml} Element to String ${response_xml}
Should Contain X Times ${resp.content} <node-id>node: 5
- Should Contain X Times ${response_xml} <termination-point> 6
- ${node} Get Element ${response_xml} xpath=.//node/supporting-node[node-ref='bgp:1']/..
+ Should Contain X Times ${resp.content} <termination-point> 6
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:1']/..
${node} Element to String ${node}
Should Contain X Times ${node} <termination-point> 2
- ${node} Get Element ${response_xml} xpath=.//node/supporting-node[node-ref='bgp:3']/..
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:3']/..
${node} Element to String ${node}
Should Contain X Times ${node} <termination-point> 2
- ${node} Get Element ${response_xml} xpath=.//node/supporting-node[node-ref='bgp:4']/..
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:4']/..
${node} Element to String ${node}
Should Contain X Times ${node} <termination-point> 1
- ${node} Get Element ${response_xml} xpath=.//node/supporting-node[node-ref='bgp:5']/..
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:5']/..
${node} Element to String ${node}
Should Contain X Times ${node} <termination-point> 1
- [Teardown] Run Keywords Aggregation Test Teardown
- ... AND Report_Failure_Due_To_Bug 4750
Unification Termination Point Inside Inventory
[Documentation] Test aggregate inside operation on termination points
- ${request} Prepare Unification Inside Topology Request ${UNIFICATION_NT_AGGREGATE_INSIDE} opendaylight-inventory-model termination-point flow-node-inventory:port-number openflow-topo:1
+ ${request} Prepare Unification Inside Topology Request ${UNIFICATION_NT_AGGREGATE_INSIDE} opendaylight-inventory-model termination-point openflow-topo:1
+ ${request} Insert Target Field ${request} 0 flow-node-inventory:port-number 0
${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
Should Contain ${resp.content} <topology-id>topo:1</topology-id>
- ${response_xml} Get Element ${resp.content} xpath=.//topology[topology-id='topo:1']
- ${response_xml} Element to String ${response_xml}
Should Contain X Times ${resp.content} <node-id>node: 5
- Should Contain X Times ${response_xml} <termination-point> 7
- ${node} Get Element ${response_xml} xpath=.//node/supporting-node[node-ref='of-node:1']/..
+ Should Contain X Times ${resp.content} <termination-point> 8
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:1']/..
${node} Element to String ${node}
Should Contain X Times ${node} <termination-point> 1
- ${node} Get Element ${response_xml} xpath=.//node/supporting-node[node-ref='of-node:2']/..
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:2']/..
${node} Element to String ${node}
- Should Contain X Times ${node} <termination-point> 2
- ${node} Get Element ${response_xml} xpath=.//node/supporting-node[node-ref='of-node:3']/..
+ Should Contain X Times ${node} <termination-point> 3
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:3']/..
${node} Element to String ${node}
Should Contain X Times ${node} <termination-point> 2
- ${node} Get Element ${response_xml} xpath=.//node/supporting-node[node-ref='of-node:4']/..
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:4']/..
${node} Element to String ${node}
Should Contain X Times ${node} <termination-point> 1
- ${node} Get Element ${response_xml} xpath=.//node/supporting-node[node-ref='of-node:5']/..
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:5']/..
${node} Element to String ${node}
Should Contain X Times ${node} <termination-point> 1
[Teardown] Run Keywords Aggregation Test Teardown
*** Keywords ***
Aggregation Test Teardown
Test Teardown network-topology:network-topology/topology/topo:1
- Report_Failure_Due_To_Bug 4673
+ Report_Failure_Due_To_Bug 5157
--- /dev/null
+*** Settings ***
+Documentation Test suite to verify fitration operation on different models.
+... Before test starts, configurational file have to be rewriten to change listners registration datastore type from CONFIGURATION to OPERATIONAL.
+... Need for this change is also a reason why main feature (odl-topoprocessing-framework) is installed after file change and not during boot.
+... Tests themselves install feature required for specific model, clear karaf logs for futher synchronization, send configurational xmls and verify output.
+... Topology-id on the end of each urls must match topology-id from xml. Yang models of components in topology are defined in xmls.
+Suite Setup Setup Environment
+Suite Teardown Clean Environment
+Test Teardown Filtration Nodes Test Teardown
+Library RequestsLibrary
+Library SSHLibrary
+Library XML
+Variables ../../../variables/topoprocessing/TopologyRequests.py
+Variables ../../../variables/Variables.py
+Resource ../../../libraries/KarafKeywords.robot
+Resource ../../../libraries/Utils.robot
+Resource ../../../libraries/TopoprocessingKeywords.robot
+
+*** Test Cases ***
+Filtration IPV4 Network Topology Model
+ [Documentation] Test of ipv4 type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model node network-topo:1
+ ${request} Insert Filter ${request} ${FILTER_IPV4} l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4
+ ${request} Set IPV4 Filter ${request} 192.168.1.1/24
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 2
+ Should Contain X Times ${resp.content} <node-ref>bgp:1</node-ref> 1
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:1']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 3
+ Should Contain ${node} <tp-id>tp:1:1</tp-id>
+ Should Contain ${node} <tp-id>tp:1:2</tp-id>
+ Should Contain ${node} <tp-id>tp:1:3</tp-id>
+ Should Contain X Times ${resp.content} <node-ref>bgp:2</node-ref> 1
+
+Filtration IPV4 Inventory Model
+ [Documentation] Test of ipv4 type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model node openflow-topo:1
+ ${request} Insert Filter ${request} ${FILTER_IPV4} flow-node-inventory:ip-address
+ ${request} Set IPV4 Filter ${request} 192.168.1.1/24
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 3
+ : FOR ${index} IN RANGE 1 3
+ \ Should Contain X Times ${resp.content} <node-ref>of-node:${index}</node-ref> 1
+ [Teardown] Run Keywords Filtration Nodes Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4683
+
+Filtration Range Number Network Topology Model
+ [Documentation] Test of range number type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model node network-topo:2
+ ${request} Insert Filter ${request} ${FILTER_RANGE_NUMBER} ovsdb:ovs-version
+ ${request} Set Range Number Filter ${request} 20 25
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 4
+ : FOR ${index} IN RANGE 7 10
+ \ Should Contain X Times ${resp.content} <node-ref>bgp:${index}</node-ref> 1
+ Should Contain X Times ${resp.content} <termination-point> 5
+ Should Contain ${resp.content} <tp-id>tp:7:1</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:7:2</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:8:1</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:9:1</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:10:1</tp-id>
+
+Filtration Range Number Inventory Model
+ [Documentation] Test of range number type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model node openflow-topo:2
+ ${request} Insert Filter ${request} ${FILTER_RANGE_NUMBER} flow-node-inventory:serial-number
+ ${request} Set Range Number Filter ${request} 20 25
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 3
+ : FOR ${index} IN RANGE 8 10
+ \ Should Contain X Times ${resp.content} <node-ref>of-node:${index}</node-ref> 1
+ [Teardown] Run Keywords Filtration Nodes Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4683
+
+Filtration Specific Number Network Topology Model
+ [Documentation] Test of specific number type of filtration operation on Network Topology model
+ Pass Execution Test is being passed due to incorrect target field. Test will be included in execution when corrected.
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model node network-topo:2
+ ${request} Insert Filter ${request} ${FILTER_SPECIFIC_NUMBER} ovsdb:ovs-version
+ ${request} Set Specific Number Filter ${request} 25
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 2
+ Should Contain X Times ${resp.content} <node-ref>bgp:9</node-ref> 1
+ Should Contain X Times ${resp.content} <node-ref>bgp:10</node-ref> 1
+ Should Contain X Times ${resp.content} <termination-point> 2
+ Should Contain ${resp.content} <tp-id>tp:9:1</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:10:1</tp-id>
+ [Teardown] Run Keywords Filtration Nodes Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4721
+
+Filtration Specific Number Inventory Model
+ [Documentation] Test of specific number type of filtration operation on Inventory model
+ Pass Execution Test is being passed due to incorrect target field. Test will be included in execution when corrected.
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model node openflow-topo:2
+ ${request} Insert Filter ${request} ${FILTER_SPECIFIC_NUMBER} flow-node-inventory:serial-number
+ ${request} Set Specific Number Filter ${request} 21
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 2
+ Should Contain X Times ${resp.content} <node-ref>of-node:8</node-ref> 1
+ Should Contain X Times ${resp.content} <node-ref>of-node:9</node-ref> 1
+ [Teardown] Run Keywords Filtration Nodes Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4683
+ ... AND Report_Failure_Due_To_Bug 4721
+
+Filtration Specific String Network Topology Model
+ [Documentation] Test of specific string type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model node network-topo:2
+ ${request} Insert Filter ${request} ${FILTER_SPECIFIC_STRING} ovsdb:ovs-version
+ ${request} Set Specific String Filter ${request} 25
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 2
+ Should Contain X Times ${resp.content} <node-ref>bgp:9</node-ref> 1
+ Should Contain X Times ${resp.content} <node-ref>bgp:10</node-ref> 1
+ Should Contain X Times ${resp.content} <termination-point> 2
+ Should Contain ${resp.content} <tp-id>tp:9:1</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:10:1</tp-id>
+
+Filtration Specific String Inventory Model
+ [Documentation] Test of specific string type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model node openflow-topo:2
+ ${request} Insert Filter ${request} ${FILTER_SPECIFIC_STRING} flow-node-inventory:serial-number
+ ${request} Set Specific String Filter ${request} 21
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 2
+ Should Contain X Times ${resp.content} <node-ref>of-node:8</node-ref> 1
+ Should Contain X Times ${resp.content} <node-ref>of-node:9</node-ref> 1
+ [Teardown] Run Keywords Filtration Nodes Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4683
+
+Filtration Range String Network Topology Model
+ [Documentation] Test of range string type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model node network-topo:2
+ ${request} Insert Filter ${request} ${FILTER_RANGE_STRING} ovsdb:ovs-version
+ ${request} Set Range String Filter ${request} 20 25
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 4
+ : FOR ${index} IN RANGE 7 10
+ \ Should Contain X Times ${resp.content} <node-ref>bgp:${index}</node-ref> 1
+ Should Contain X Times ${resp.content} <termination-point> 5
+ Should Contain ${resp.content} <tp-id>tp:7:1</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:7:2</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:8:1</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:9:1</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:10:1</tp-id>
+
+Filtration Range String Inventory Model
+ [Documentation] Test of range string type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model node openflow-topo:2
+ ${request} Insert Filter ${request} ${FILTER_RANGE_STRING} flow-node-inventory:serial-number
+ ${request} Set Range String Filter ${request} 20 25
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 3
+ : FOR ${index} IN RANGE 8 10
+ \ Should Contain X Times ${resp.content} <node-ref>of-node:${index}</node-ref> 1
+ [Teardown] Run Keywords Filtration Nodes Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4683
+
+Filtration IPV6 Network Topology Model
+ [Documentation] Test of ipv6 type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model node network-topo:3
+ ${request} Insert Filter ${request} ${FILTER_IPV6} l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv6
+ ${request} Set IPV6 Filter ${request} fe80:0:0:0:0:0:c0a8:101/120
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 2
+ Should Contain X Times ${resp.content} <node-ref>bgp:11</node-ref> 1
+ Should Contain X Times ${resp.content} <node-ref>bgp:12</node-ref> 1
+ Should Contain X Times ${resp.content} <termination-point> 1
+ Should Contain ${resp.content} <tp-id>tp:11:1</tp-id>
+
+Filtration IPV6 Inventory Model
+ [Documentation] Test of ipv6 type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model node openflow-topo:3
+ ${request} Insert Filter ${request} ${FILTER_IPV6} flow-node-inventory:ip-address
+ ${request} Set IPV6 Filter ${request} fe80:0:0:0:0:0:c0a8:201/120
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 3
+ Should Contain X Times ${resp.content} <node-ref>of-node:12</node-ref> 1
+ Should Contain X Times ${resp.content} <node-ref>of-node:14</node-ref> 1
+ Should Contain X Times ${resp.content} <node-ref>of-node:15</node-ref> 1
+ [Teardown] Run Keywords Filtration Nodes Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4683
+
+Filtration Script Network Topology Model
+ [Documentation] Test of script type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model node network-topo:1
+ ${request} Insert Filter ${request} ${FILTER_SCRIPT} l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4
+ ${script} Set Variable if (node.getValue().indexOf("192.168.1") > -1 ) {filterOut.setResult(true);} else {filterOut.setResult(false);}
+ ${request} Set Script Filter ${request} javascript ${script}
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 3
+ : FOR ${index} IN RANGE 3 5
+ \ Should Contain X Times ${resp.content} <node-ref>bgp:${index}</node-ref> 1
+ Should Contain X Times ${resp.content} <termination-point> 5
+ Should Contain ${resp.content} <tp-id>tp:3:1</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:3:2</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:4:1</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:4:2</tp-id>
+ Should Contain ${resp.content} <tp-id>tp:5:1</tp-id>
+
+Filtration Script Inventory Model
+ [Documentation] Test of script type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model node openflow-topo:1
+ ${request} Insert Filter ${request} ${FILTER_SCRIPT} flow-node-inventory:ip-address
+ ${script} Set Variable if (node.getValue().indexOf("192.168.2") > -1 ) {filterOut.setResult(true);} else {filterOut.setResult(false);}
+ ${request} Set Script Filter ${request} javascript ${script}
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 3
+ : FOR ${index} IN RANGE 1 3
+ \ Should Contain X Times ${resp.content} <node-ref>of-node:${index}</node-ref> 1
+ [Teardown] Run Keywords Filtration Nodes Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4683
+
+*** Keywords ***
+Filtration Nodes Test Teardown
+ Test Teardown network-topology:network-topology/topology/topo:1
+ Report_Failure_Due_To_Bug 4673
--- /dev/null
+*** Settings ***
+Documentation Test suite to verify fitration operation on different models.
+... Before test starts, configurational file have to be rewriten to change listners registration datastore type from CONFIGURATION to OPERATIONAL.
+... Need for this change is also a reason why main feature (odl-topoprocessing-framework) is installed after file change and not during boot.
+... Tests themselves install feature required for specific model, clear karaf logs for futher synchronization, send configurational xmls and verify output.
+... Topology-id on the end of each urls must match topology-id from xml. Yang models of components in topology are defined in xmls.
+Suite Setup Setup Environment
+Suite Teardown Clean Environment
+Test Teardown Filtration Termination Points Test Teardown
+Library RequestsLibrary
+Library SSHLibrary
+Library XML
+Variables ../../../variables/topoprocessing/TopologyRequests.py
+Variables ../../../variables/Variables.py
+Resource ../../../libraries/KarafKeywords.robot
+Resource ../../../libraries/Utils.robot
+Resource ../../../libraries/TopoprocessingKeywords.robot
+
+*** Test Cases ***
+Filtration IPV4 Network Topology Model
+ [Documentation] Test of ipv4 type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model termination-point network-topo:1
+ ${request} Insert Filter ${request} ${FILTER_IPV4} l3-unicast-igp-topology:igp-termination-point-attributes/l3-unicast-igp-topology:ip-address
+ ${request} Set IPV4 Filter ${request} 192.168.1.1/24
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ Should Contain X Times ${resp.content} <termination-point> 4
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:1']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 2
+ Should Contain ${node} <tp-id>tp:1:1</tp-id>
+ Should Contain ${node} <tp-id>tp:1:2</tp-id>
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:3']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 2
+ Should Contain ${node} <tp-id>tp:3:1</tp-id>
+ Should Contain ${node} <tp-id>tp:3:2</tp-id>
+ [Teardown] Run Keywords Filtration Termination Points Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4750
+
+Filtration Range Number Network Topology Model
+ [Documentation] Test of range number type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model termination-point network-topo:2
+ ${request} Insert Filter ${request} ${FILTER_RANGE_NUMBER} ovsdb:ofport
+ ${request} Set Range Number Filter ${request} 1115 1119
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ Should Contain X Times ${resp.content} <termination-point> 3
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:7']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 2
+ Should Contain ${node} <tp-id>tp:7:1</tp-id>
+ Should Contain ${node} <tp-id>tp:7:2</tp-id>
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:6']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ Should Contain ${node} <tp-id>tp:6:1</tp-id>
+ [Teardown] Run Keywords Filtration Termination Points Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4750
+
+Filtration Range Number Inventory Model
+ [Documentation] Test of range number type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model termination-point openflow-topo:1
+ ${request} Insert Filter ${request} ${FILTER_RANGE_NUMBER} flow-node-inventory:port-number
+ ${request} Set Range Number Filter ${request} 2 4
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ Should Contain X Times ${resp.content} <termination-point> 5
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:2']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 2
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:3']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 2
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:5']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ [Teardown] Run Keywords Filtration Termination Points Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4674
+
+Filtration Specific Number Network Topology Model
+ [Documentation] Test of specific number type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model termination-point network-topo:2
+ ${request} Insert Filter ${request} ${FILTER_SPECIFIC_NUMBER} ovsdb:ofport
+ ${request} Set Specific Number Filter ${request} 1119
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ Should Contain X Times ${resp.content} <termination-point> 1
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:7']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ Should Contain ${node} <tp-id>tp:7:1</tp-id>
+ [Teardown] Run Keywords Filtration Termination Points Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4750
+
+Filtration Specific Number Inventory Model
+ [Documentation] Test of specific number type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model termination-point openflow-topo:1
+ ${request} Insert Filter ${request} ${FILTER_SPECIFIC_NUMBER} flow-node-inventory:port-number
+ ${request} Set Specific Number Filter ${request} 1
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ Should Contain X Times ${resp.content} <termination-point> 7
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:1']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 2
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:2']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:3']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:4']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 3
+ [Teardown] Run Keywords Filtration Termination Points Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4674
+
+Filtration Specific String Network Topology Model
+ [Documentation] Test of specific string type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model termination-point network-topo:2
+ ${request} Insert Filter ${request} ${FILTER_SPECIFIC_STRING} ovsdb:name
+ ${request} Set Specific String Filter ${request} portC
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ Should Contain X Times ${resp.content} <termination-point> 1
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:7']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ [Teardown] Run Keywords Filtration Termination Points Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4750
+
+Filtration Specific String Inventory Model
+ [Documentation] Test of specific string type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model termination-point openflow-topo:1
+ ${request} Insert Filter ${request} ${FILTER_SPECIFIC_STRING} flow-node-inventory:name
+ ${request} Set Specific String Filter ${request} portB
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ Should Contain X Times ${resp.content} <termination-point> 2
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:2']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:5']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ [Teardown] Run Keywords Filtration Termination Points Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4674
+
+Filtration Range String Network Topology Model
+ [Documentation] Test of range string type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model termination-point network-topo:2
+ ${request} Insert Filter ${request} ${FILTER_RANGE_STRING} ovsdb:name
+ ${request} Set Range String Filter ${request} portA portC
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ Should Contain X Times ${resp.content} <termination-point> 3
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:6']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:7']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:10']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ [Teardown] Run Keywords Filtration Termination Points Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4750
+
+Filtration Range String Inventory Model
+ [Documentation] Test of range string type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model termination-point openflow-topo:1
+ ${request} Insert Filter ${request} ${FILTER_RANGE_STRING} flow-node-inventory:name
+ ${request} Set Range String Filter ${request} portA portB
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ Should Contain X Times ${resp.content} <termination-point> 3
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:2']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 2
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:5']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ [Teardown] Run Keywords Filtration Termination Points Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4674
+
+Filtration IPV6 Network Topology Model
+ [Documentation] Test of ipv6 type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model termination-point network-topo:3
+ ${request} Insert Filter ${request} ${FILTER_IPV6} l3-unicast-igp-topology:igp-termination-point-attributes/l3-unicast-igp-topology:ip-address
+ ${request} Set IPV6 Filter ${request} fe80:0:0:0:0:0:c0a8:101/120
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ Should Contain X Times ${resp.content} <termination-point> 1
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:11']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ [Teardown] Run Keywords Filtration Termination Points Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4750
+
+Filtration Script Network Topology Model
+ [Documentation] Test of script type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model termination-point network-topo:1
+ ${request} Insert Filter ${request} ${FILTER_SCRIPT} l3-unicast-igp-topology:igp-termination-point-attributes/l3-unicast-igp-topology:ip-address
+ ${script} Set Variable if (node.getValue().indexOf("192.168.1") > -1 ) {filterOut.setResult(true);} else {filterOut.setResult(false);}
+ ${request} Set Script Filter ${request} javascript ${script}
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ Should Contain X Times ${resp.content} <termination-point> 3
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:4']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 2
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:5']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ [Teardown] Run Keywords Filtration Termination Points Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4750
+
+Filtration Script Inventory Model
+ [Documentation] Test of script type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model termination-point openflow-topo:1
+ ${request} Insert Filter ${request} ${FILTER_SCRIPT} flow-node-inventory:name
+ ${script} Set Variable if (node.getValue().indexOf("portB") > -1 ) {filterOut.setResult(true);} else {filterOut.setResult(false);}
+ ${request} Set Script Filter ${request} javascript ${script}
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ Should Contain X Times ${resp.content} <termination-point> 3
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:2']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 2
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:1']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ [Teardown] Run Keywords Filtration Termination Points Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4674
+
+*** Keywords ***
+Filtration Termination Points Test Teardown
+ Test Teardown network-topology:network-topology/topology/topo:1
+ Report_Failure_Due_To_Bug 4673
--- /dev/null
+*** Settings ***
+Documentation Test suite to verify fitration operation on different models.
+... Before test starts, configurational file have to be rewriten to change listners registration datastore type from CONFIGURATION to OPERATIONAL.
+... Need for this change is also a reason why main feature (odl-topoprocessing-framework) is installed after file change and not during boot.
+... Tests themselves install feature required for specific model, clear karaf logs for futher synchronization, send configurational xmls and verify output.
+... Topology-id on the end of each urls must match topology-id from xml. Yang models of components in topology are defined in xmls.
+Suite Setup Setup Environment
+Suite Teardown Clean Environment
+Test Teardown Filtration Links Test Teardown
+Library RequestsLibrary
+Library SSHLibrary
+Library XML
+Variables ../../../variables/topoprocessing/TopologyRequests.py
+Variables ../../../variables/Variables.py
+Resource ../../../libraries/KarafKeywords.robot
+Resource ../../../libraries/Utils.robot
+Resource ../../../libraries/TopoprocessingKeywords.robot
+
+*** Test Cases ***
+Filtration Range Number Network Topology Model
+ [Documentation] Test of range number type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model link network-topo:1
+ ${request} Insert Filter ${request} ${FILTER_RANGE_NUMBER} l3-unicast-igp-topology:igp-link-attributes/l3-unicast-igp-topology:metric
+ ${request} Set Range Number Filter ${request} 11 13
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <link-id>link: 3
+ Should Contain X Times ${resp.content} <link-ref>link:1:4</link-ref> 1
+ Should Contain X Times ${resp.content} <link-ref>link:1:3</link-ref> 1
+ Should Contain X Times ${resp.content} <link-ref>link:1:2-1</link-ref> 1
+
+Filtration Range Number Inventory Model
+ [Documentation] Test of range number type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model link openflow-topo:3
+ ${request} Insert Filter ${request} ${FILTER_RANGE_NUMBER} l3-unicast-igp-topology:igp-link-attributes/l3-unicast-igp-topology:metric
+ ${request} Set Range Number Filter ${request} 14 15
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <link-id>link: 2
+ Should Contain X Times ${resp.content} <link-ref>link:14:12</link-ref> 1
+ Should Contain X Times ${resp.content} <link-ref>link:15:13</link-ref> 1
+ [Teardown] Run Keywords Filtration Links Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4761
+
+Filtration Specific Number Network Topology Model
+ [Documentation] Test of specific number type of filtration operation on Network Topology model
+ Pass Execution Test is being passed due to incorrect target field. Test will be included in execution when corrected.
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model link network-topo:1
+ ${request} Insert Filter ${request} ${FILTER_SPECIFIC_NUMBER} l3-unicast-igp-topology:igp-link-attributes/l3-unicast-igp-topology:metric
+ ${request} Set Specific Number Filter ${request} 12
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <link-id>link: 2
+ Should Contain X Times ${resp.content} <link-ref>link:1:4</link-ref> 1
+ Should Contain X Times ${resp.content} <link-ref>link:1:2-1</link-ref> 1
+ [Teardown] Run Keywords Filtration Links Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4721
+
+Filtration Specific Number Inventory Model
+ [Documentation] Test of specific number type of filtration operation on Inventory model
+ Pass Execution Test is being passed due to incorrect target field. Test will be included in execution when corrected.
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model link openflow-topo:3
+ ${request} Insert Filter ${request} ${FILTER_SPECIFIC_NUMBER} l3-unicast-igp-topology:igp-link-attributes/l3-unicast-igp-topology:metric
+ ${request} Set Specific Number Filter ${request} 16
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <link-id>link: 1
+ Should Contain X Times ${resp.content} <link-ref>link:11:12</link-ref> 1
+ [Teardown] Run Keywords Filtration Links Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4761
+ ... AND Report_Failure_Due_To_Bug 4721
+
+Filtration Specific String Network Topology Model
+ [Documentation] Test of specific string type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model link network-topo:1
+ ${request} Insert Filter ${request} ${FILTER_SPECIFIC_STRING} l3-unicast-igp-topology:igp-link-attributes/l3-unicast-igp-topology:name
+ ${request} Set Specific String Filter ${request} linkA
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <link-id>link: 2
+ Should Contain X Times ${resp.content} <link-ref>link:1:4</link-ref> 1
+ Should Contain X Times ${resp.content} <link-ref>link:1:2-1</link-ref> 1
+
+Filtration Specific String Inventory Model
+ [Documentation] Test of specific string type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model link openflow-topo:3
+ ${request} Insert Filter ${request} ${FILTER_SPECIFIC_STRING} l3-unicast-igp-topology:igp-link-attributes/l3-unicast-igp-topology:name
+ ${request} Set Specific String Filter ${request} linkD
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <link-id>link: 1
+ Should Contain X Times ${resp.content} <link-ref>link:15:13</link-ref> 1
+ [Teardown] Run Keywords Filtration Links Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4761
+
+Filtration Range String Network Topology Model
+ [Documentation] Test of range string type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model link network-topo:1
+ ${request} Insert Filter ${request} ${FILTER_RANGE_STRING} l3-unicast-igp-topology:igp-link-attributes/l3-unicast-igp-topology:name
+ ${request} Set Range String Filter ${request} linkA linkB
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <link-id>link: 3
+ Should Contain X Times ${resp.content} <link-ref>link:1:4</link-ref> 1
+ Should Contain X Times ${resp.content} <link-ref>link:1:3</link-ref> 1
+ Should Contain X Times ${resp.content} <link-ref>link:1:2-1</link-ref> 1
+
+Filtration Range String Inventory Model
+ [Documentation] Test of range string type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model link openflow-topo:3
+ ${request} Insert Filter ${request} ${FILTER_RANGE_STRING} l3-unicast-igp-topology:igp-link-attributes/l3-unicast-igp-topology:name
+ ${request} Set Range String Filter ${request} linkC linkD
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <link-id>link: 2
+ Should Contain X Times ${resp.content} <link-ref>link:14:12</link-ref> 1
+ Should Contain X Times ${resp.content} <link-ref>link:15:13</link-ref> 1
+ [Teardown] Run Keywords Filtration Links Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4761
+
+Filtration Script Network Topology Model
+ [Documentation] Test of script type of filtration operation on Network Topology model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} network-topology-model link network-topo:1
+ ${request} Insert Filter ${request} ${FILTER_SCRIPT} l3-unicast-igp-topology:igp-link-attributes/l3-unicast-igp-topology:name
+ ${script} Set Variable if (node.getValue().indexOf("linkA") > -1 ) {filterOut.setResult(true);} else {filterOut.setResult(false);}
+ ${request} Set Script Filter ${request} javascript ${script}
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <link-id>link: 2
+ Should Contain X Times ${resp.content} <link-ref>link:1:3</link-ref> 1
+ Should Contain X Times ${resp.content} <link-ref>link:1:2-2</link-ref> 1
+
+Filtration Script Inventory Model
+ [Documentation] Test of script type of filtration operation on Inventory model
+ ${request} Prepare Filtration Topology Request ${FILTRATION_NT} opendaylight-inventory-model link openflow-topo:3
+ ${request} Insert Filter ${request} ${FILTER_SCRIPT} l3-unicast-igp-topology:igp-link-attributes/l3-unicast-igp-topology:name
+ ${script} Set Variable if (node.getValue().indexOf("linkA") > -1 ) {filterOut.setResult(true);} else {filterOut.setResult(false);}
+ ${request} Set Script Filter ${request} javascript ${script}
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <link-id>link: 3
+ Should Contain X Times ${resp.content} <link-ref>link:11:12</link-ref> 1
+ Should Contain X Times ${resp.content} <link-ref>link:14:12</link-ref> 1
+ Should Contain X Times ${resp.content} <link-ref>link:15:13</link-ref> 1
+ [Teardown] Run Keywords Filtration Links Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4761
+
+*** Keywords ***
+Filtration Links Test Teardown
+ Test Teardown network-topology:network-topology/topology/topo:1
+ Report_Failure_Due_To_Bug 4673
--- /dev/null
+*** Settings ***
+Documentation Test suite to verify fitration operation on different models.
+... Before test starts, configurational file have to be rewriten to change listners registration datastore type from CONFIGURATION to OPERATIONAL.
+... Need for this change is also a reason why main feature (odl-topoprocessing-framework) is installed after file change and not during boot.
+... Tests themselves install feature required for specific model, clear karaf logs for futher synchronization, send configurational xmls and verify output.
+... Topology-id on the end of each urls must match topology-id from xml. Yang models of components in topology are defined in xmls.
+Suite Setup Setup Environment
+Suite Teardown Clean Environment
+Test Teardown Aggregation Filtration Test Teardown
+Library RequestsLibrary
+Library SSHLibrary
+Library XML
+Variables ../../../variables/topoprocessing/TopologyRequests.py
+Variables ../../../variables/Variables.py
+Resource ../../../libraries/KarafKeywords.robot
+Resource ../../../libraries/Utils.robot
+Resource ../../../libraries/TopoprocessingKeywords.robot
+
+*** Test Cases ***
+Unification Filtration Node Inside Network Topology model
+ [Documentation] Test unification filtration inside operation on Network Topology model
+ ${request} Prepare Unification Filtration Inside Topology Request ${UNIFICATION_FILTRATION_NT_AGGREGATE_INSIDE} network-topology-model node l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4 network-topo:4
+ ${request} Insert Filter ${request} ${FILTER_IPV4} l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4
+ ${request} Set IPV4 Filter ${request} 192.168.2.1/24
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 2
+ Should Contain ${resp.content} <node-ref>bgp: 3
+ : FOR ${index} IN RANGE 18 20
+ \ Should Contain X Times ${resp.content} <node-ref>bgp:${index}</node-ref> 1
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:18']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <supporting-node> 2
+ Should Contain ${node} <node-ref>bgp:18</node-ref>
+ Should Contain ${node} <node-ref>bgp:20</node-ref>
+
+Unification Filtration Node Inside Inventory model
+ [Documentation] Test unification filtration inside operation on Inventory model
+ ${request} Prepare Unification Filtration Inside Topology Request ${UNIFICATION_FILTRATION_NT_AGGREGATE_INSIDE} opendaylight-inventory-model node flow-node-inventory:ip-address openflow-topo:4
+ ${request} Insert Filter ${request} ${FILTER_IPV4} flow-node-inventory:ip-address
+ ${request} Set IPV4 Filter ${request} 192.168.2.1/24
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 2
+ Should Contain ${resp.content} <node-ref>of-node: 4
+ : FOR ${index} IN RANGE 17 20
+ \ Should Contain X Times ${resp.content} <node-ref>of-node:${index}</node-ref> 1
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:17']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <supporting-node> 3
+ Should Contain ${node} <node-ref>of-node:17</node-ref>
+ Should Contain ${node} <node-ref>of-node:19</node-ref>
+ Should Contain ${node} <node-ref>of-node:20</node-ref>
+ [Teardown] Run Keywords Aggregation Filtration Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4683
+
+Unification Filtration Termination Point Inside Network Topology model
+ [Documentation] Test unification filtration inside operation on Network Topology model
+ ${request} Prepare Unification Filtration Inside Topology Request ${UNIFICATION_FILTRATION_NT_AGGREGATE_INSIDE} network-topology-model termination-point l3-unicast-igp-topology:igp-termination-point-attributes/l3-unicast-igp-topology:ip-address network-topo:5
+ ${request} Insert Filter ${request} ${FILTER_IPV4} l3-unicast-igp-topology:igp-termination-point-attributes/l3-unicast-igp-topology:ip-address
+ ${request} Set IPV4 Filter ${request} 192.168.1.1/24
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ Should Contain X Times ${resp.content} <termination-point> 4
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:21']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 2
+ ${tp} Get Element ${node} xpath=.//termination-point/supporting-termin-point[tp-ref='tp:21:2']/..
+ ${tp} Element to String ${tp}
+ Should Contain X Times ${tp} <tp-ref>tp: 2
+ Should Contain ${tp} <tp-ref>tp:21:3</tp-ref>
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:22']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ Should Contain X Times ${node} <tp-ref>tp: 1
+ Should Contain ${node} <tp-ref>tp:22:2</tp-ref>
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:24']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <termination-point> 1
+ Should Contain X Times ${node} <tp-ref>tp: 3
+ Should Contain ${node} <tp-ref>tp:24:1</tp-ref>
+ Should Contain ${node} <tp-ref>tp:24:2</tp-ref>
+ Should Contain ${node} <tp-ref>tp:24:3</tp-ref>
+ [Teardown] Run Keywords Aggregation Filtration Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4750
+
+Unification Filtration Node Network Topology model
+ [Documentation] Test unification filtration operation on Network Topology model
+ ${request} Prepare Unification Filtration Inside Topology Request ${UNIFICATION_FILTRATION_NT} network-topology-model node l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4 network-topo:4
+ ${request} Prepare Unification Filtration Topology Request ${request} network-topology-model l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4 network-topo:1
+ ${request} Insert Filter ${request} ${FILTER_IPV4} l3-unicast-igp-topology:igp-node-attributes/isis-topology:isis-node-attributes/isis-topology:ted/isis-topology:te-router-id-ipv4
+ ${request} Set IPV4 Filter ${request} 192.168.2.1/24
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ : FOR ${index} IN RANGE 18 20
+ \ Should Contain X Times ${resp.content} <node-ref>bgp:${index}</node-ref> 1
+ : FOR ${index} IN RANGE 1 5
+ \ Should Contain X Times ${resp.content} <node-ref>bgp:${index}</node-ref> 1
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:18']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <supporting-node> 4
+ Should Contain ${node} <node-ref>bgp:18</node-ref>
+ Should Contain ${node} <node-ref>bgp:20</node-ref>
+ Should Contain ${node} <node-ref>bgp:3</node-ref>
+ Should Contain ${node} <node-ref>bgp:4</node-ref>
+ Should Contain ${node} <termination-point> 4
+ Should Contain ${node} <tp-id>tp:3:1</tp-id>
+ Should Contain ${node} <tp-id>tp:3:2</tp-id>
+ Should Contain ${node} <tp-id>tp:4:1</tp-id>
+ Should Contain ${node} <tp-id>tp:4:2</tp-id>
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:5']/..
+ ${node} Element to String ${node}
+ Should Contain ${node} <termination-point> 1
+ Should Contain ${node} <tp-id>tp:5:1</tp-id>
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='bgp:1']/..
+ ${node} Element to String ${node}
+ Should Contain ${node} <termination-point> 3
+ Should Contain ${node} <tp-id>tp:1:1</tp-id>
+ Should Contain ${node} <tp-id>tp:1:2</tp-id>
+ Should Contain ${node} <tp-id>tp:1:3</tp-id>
+
+Unification Filtration Node Inventory model
+ [Documentation] Test unification filtration operation on Inventory model
+ ${request} Prepare Unification Filtration Inside Topology Request ${UNIFICATION_FILTRATION_NT} opendaylight-inventory-model node flow-node-inventory:ip-address openflow-topo:4
+ ${request} Prepare Unification Filtration Topology Request ${request} opendaylight-inventory-model flow-node-inventory:ip-address openflow-topo:6
+ ${request} Insert Filter ${request} ${FILTER_IPV4} flow-node-inventory:ip-address
+ ${request} Set IPV4 Filter ${request} 192.168.1.1/24
+ ${resp} Send Basic Request ${request} network-topology:network-topology/topology/topo:1
+ Should Contain ${resp.content} <topology-id>topo:1</topology-id>
+ Should Contain X Times ${resp.content} <node-id>node: 5
+ : FOR ${index} IN RANGE 6 10
+ \ Should Contain X Times ${resp.content} <node-ref>of-node:${index}</node-ref> 1
+ Should Contain X Times ${resp.content} <node-ref>of-node:16</node-ref> 1
+ ${node} Get Element ${resp.content} xpath=.//node/supporting-node[node-ref='of-node:6']/..
+ ${node} Element to String ${node}
+ Should Contain X Times ${node} <supporting-node> 2
+ Should Contain ${node} <node-ref>of-node:6</node-ref>
+ Should Contain ${node} <node-ref>of-node:16</node-ref>
+ [Teardown] Run Keywords Aggregation Filtration Test Teardown
+ ... AND Report_Failure_Due_To_Bug 4683
+
+*** Keywords ***
+Aggregation Filtration Test Teardown
+ Test Teardown network-topology:network-topology/topology/topo:1
+ Report_Failure_Due_To_Bug 4673
*** Settings ***
Documentation Test suite to verify Restconf is OK
-Suite Setup Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
+Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
Suite Teardown Delete All Sessions
Library RequestsLibrary
Variables ../../../variables/Variables.py
*** Keywords ***
Setup Enviroment
[Documentation] Setup karaf enviroment for following tests
- Open Connection ${CONTROLLER}
+ Open Connection ${ODL_SYSTEM_IP}
Flexible Controller Login
Put File ${CONFIGURATION_XML} ${REMOTE_FILE}
Close Connection
Issue Command On Karaf Console log:set DEBUG org.opendaylight.topoprocessing
Install a Feature odl-topoprocessing-framework odl-restconf-noauth timeout=30
- Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${SEND_ACCEPT_XML_HEADERS}
+ Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${SEND_ACCEPT_XML_HEADERS}
Test Teardown
[Documentation] Revert startup changes
- Open Connection ${CONTROLLER}
+ Open Connection ${ODL_SYSTEM_IP}
Flexible Controller Login
Put File ${OPERATIONAL_XML} ${REMOTE_FILE}
Close Connection
Wait For Karaf Log
[Arguments] ${message} ${timeout}=60
[Documentation] Read karaf logs until message appear
- Open Connection ${CONTROLLER} port=${KARAF_SHELL_PORT} prompt=${KARAF_PROMPT} timeout=${timeout}
+ Open Connection ${ODL_SYSTEM_IP} port=${KARAF_SHELL_PORT} prompt=${KARAF_PROMPT} timeout=${timeout}
Flexible SSH Login ${KARAF_USER} ${KARAF_PASSWORD}
Write log:tail
Read Until ${message}
<termination-point>
<tp-id>tp:1:1</tp-id>
<ovsdb:ofport>1119</ovsdb:ofport>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.5</igp:ip-address>
+ </igp:igp-termination-point-attributes>
</termination-point>
<termination-point>
<tp-id>tp:1:2</tp-id>
<ovsdb:ofport>1119</ovsdb:ofport>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.6</igp:ip-address>
+ </igp:igp-termination-point-attributes>
</termination-point>
<termination-point>
<tp-id>tp:1:3</tp-id>
<termination-point>
<tp-id>tp:3:1</tp-id>
<ovsdb:ofport>1118</ovsdb:ofport>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.5</igp:ip-address>
+ </igp:igp-termination-point-attributes>
</termination-point>
<termination-point>
<tp-id>tp:3:2</tp-id>
<ovsdb:ofport>2118</ovsdb:ofport>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.6</igp:ip-address>
+ </igp:igp-termination-point-attributes>
</termination-point>
</node>
<node>
<termination-point>
<tp-id>tp:4:1</tp-id>
<ovsdb:ofport>1117</ovsdb:ofport>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.2.6</igp:ip-address>
+ </igp:igp-termination-point-attributes>
</termination-point>
<termination-point>
<tp-id>tp:4:2</tp-id>
<ovsdb:ofport>1117</ovsdb:ofport>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.2.7</igp:ip-address>
+ </igp:igp-termination-point-attributes>
</termination-point>
</node>
<node>
<termination-point>
<tp-id>tp:5:1</tp-id>
<ovsdb:ofport>1116</ovsdb:ofport>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.2.8</igp:ip-address>
+ </igp:igp-termination-point-attributes>
</termination-point>
</node>
+ <link>
+ <link-id>link:1:4</link-id>
+ <source>
+ <source-node>bgp:1</source-node>
+ </source>
+ <destination>
+ <dest-node>bgp:4</dest-node>
+ </destination>
+ <igp:igp-link-attributes>
+ <igp:name>linkA</igp:name>
+ <igp:metric>12</igp:metric>
+ </igp:igp-link-attributes>
+ </link>
+ <link>
+ <link-id>link:1:3</link-id>
+ <source>
+ <source-node>bgp:1</source-node>
+ </source>
+ <destination>
+ <dest-node>bgp:3</dest-node>
+ </destination>
+ <igp:igp-link-attributes>
+ <igp:name>linkB</igp:name>
+ <igp:metric>11</igp:metric>
+ </igp:igp-link-attributes>
+ </link>
+ <link>
+ <link-id>link:1:2-1</link-id>
+ <source>
+ <source-node>bgp:1</source-node>
+ </source>
+ <destination>
+ <dest-node>bgp:2</dest-node>
+ </destination>
+ <igp:igp-link-attributes>
+ <igp:name>linkA</igp:name>
+ <igp:metric>12</igp:metric>
+ </igp:igp-link-attributes>
+ </link>
+ <link>
+ <link-id>link:1:2-2</link-id>
+ <source>
+ <source-node>bgp:1</source-node>
+ </source>
+ <destination>
+ <dest-node>bgp:2</dest-node>
+ </destination>
+ <igp:igp-link-attributes>
+ <igp:name>linkC</igp:name>
+ <igp:metric>14</igp:metric>
+ </igp:igp-link-attributes>
+ </link>
</topology>'''
NETWORK_UNDERLAY_TOPOLOGY_2 = '''<topology
<topology-id>network-topo:2</topology-id>
<node>
<node-id>bgp:6</node-id>
+ <ovsdb:ovs-version>10</ovsdb:ovs-version>
<igp:igp-node-attributes>
<isis:isis-node-attributes>
<isis:ted>
<termination-point>
<tp-id>tp:6:1</tp-id>
<ovsdb:ofport>1116</ovsdb:ofport>
+ <ovsdb:name>portA</ovsdb:name>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.7</igp:ip-address>
+ </igp:igp-termination-point-attributes>
</termination-point>
</node>
<node>
<node-id>bgp:7</node-id>
+ <ovsdb:ovs-version>20</ovsdb:ovs-version>
<igp:igp-node-attributes>
<isis:isis-node-attributes>
<isis:ted>
</igp:igp-node-attributes>
<termination-point>
<tp-id>tp:7:1</tp-id>
+ <ovsdb:ofport>1119</ovsdb:ofport>
+ <ovsdb:name>portD</ovsdb:name>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.8</igp:ip-address>
+ </igp:igp-termination-point-attributes>
+ </termination-point>
+ <termination-point>
+ <tp-id>tp:7:2</tp-id>
<ovsdb:ofport>1117</ovsdb:ofport>
+ <ovsdb:name>portC</ovsdb:name>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.9</igp:ip-address>
+ </igp:igp-termination-point-attributes>
</termination-point>
</node>
<node>
<node-id>bgp:8</node-id>
+ <ovsdb:ovs-version>21</ovsdb:ovs-version>
<igp:igp-node-attributes>
<isis:isis-node-attributes>
<isis:ted>
</node>
<node>
<node-id>bgp:9</node-id>
+ <ovsdb:ovs-version>25</ovsdb:ovs-version>
<igp:igp-node-attributes>
<isis:isis-node-attributes>
<isis:ted>
</node>
<node>
<node-id>bgp:10</node-id>
+ <ovsdb:ovs-version>25</ovsdb:ovs-version>
<igp:igp-node-attributes>
<isis:isis-node-attributes>
<isis:ted>
<termination-point>
<tp-id>tp:10:1</tp-id>
<ovsdb:ofport>1122</ovsdb:ofport>
+ <ovsdb:name>portB</ovsdb:name>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.2.9</igp:ip-address>
+ </igp:igp-termination-point-attributes>
+ </termination-point>
+ </node>
+ </topology>'''
+
+NETWORK_UNDERLAY_TOPOLOGY_3 = '''<topology
+ xmlns="urn:TBD:params:xml:ns:yang:network-topology"
+ xmlns:igp="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"
+ xmlns:isis="urn:TBD:params:xml:ns:yang:network:isis-topology">
+ <topology-id>network-topo:3</topology-id>
+ <node>
+ <node-id>bgp:11</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv6>fe80:0:0:0:0:0:c0a8:103</isis:te-router-id-ipv6>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ <termination-point>
+ <tp-id>tp:11:1</tp-id>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>fe80:0:0:0:0:0:c0a8:107</igp:ip-address>
+ </igp:igp-termination-point-attributes>
+ </termination-point>
+ </node>
+ <node>
+ <node-id>bgp:12</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv6>fe80:0:0:0:0:0:c0a8:104</isis:te-router-id-ipv6>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ <node>
+ <node-id>bgp:13</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv6>fe80:0:0:0:0:0:c0a8:204</isis:te-router-id-ipv6>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ <node>
+ <node-id>bgp:14</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv6>fe80:0:0:0:0:0:c0a8:205</isis:te-router-id-ipv6>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ <termination-point>
+ <tp-id>tp:14:1</tp-id>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>fe80:0:0:0:0:0:c0a8:207</igp:ip-address>
+ </igp:igp-termination-point-attributes>
+ </termination-point>
+ <termination-point>
+ <tp-id>tp:14:2</tp-id>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>fe80:0:0:0:0:0:c0a8:209</igp:ip-address>
+ </igp:igp-termination-point-attributes>
+ </termination-point>
+ </node>
+ <node>
+ <node-id>bgp:15</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv6>fe80:0:0:0:0:0:c0a8:203</isis:te-router-id-ipv6>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ </topology>'''
+
+NETWORK_UNDERLAY_TOPOLOGY_4 = '''<topology
+ xmlns="urn:TBD:params:xml:ns:yang:network-topology"
+ xmlns:igp="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"
+ xmlns:isis="urn:TBD:params:xml:ns:yang:network:isis-topology">
+ <topology-id>network-topo:4</topology-id>
+ <node>
+ <node-id>bgp:16</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.1.1</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ <node>
+ <node-id>bgp:17</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.1.2</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ <node>
+ <node-id>bgp:18</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.2.1</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ <node>
+ <node-id>bgp:19</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.2.2</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ <node>
+ <node-id>bgp:20</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.2.1</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ </topology>'''
+
+NETWORK_UNDERLAY_TOPOLOGY_5 = '''<topology
+ xmlns="urn:TBD:params:xml:ns:yang:network-topology"
+ xmlns:igp="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"
+ xmlns:isis="urn:TBD:params:xml:ns:yang:network:isis-topology">
+ <topology-id>network-topo:5</topology-id>
+ <node>
+ <node-id>bgp:21</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.1.1</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ <termination-point>
+ <tp-id>tp:21:1</tp-id>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.9</igp:ip-address>
+ </igp:igp-termination-point-attributes>
+ </termination-point>
+ <termination-point>
+ <tp-id>tp:21:2</tp-id>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.8</igp:ip-address>
+ </igp:igp-termination-point-attributes>
+ </termination-point>
+ <termination-point>
+ <tp-id>tp:21:3</tp-id>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.8</igp:ip-address>
+ </igp:igp-termination-point-attributes>
+ </termination-point>
+ </node>
+ <node>
+ <node-id>bgp:22</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.1.2</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ <termination-point>
+ <tp-id>tp:22:1</tp-id>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.2.9</igp:ip-address>
+ </igp:igp-termination-point-attributes>
</termination-point>
+ <termination-point>
+ <tp-id>tp:22:2</tp-id>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.7</igp:ip-address>
+ </igp:igp-termination-point-attributes>
+ </termination-point>
+ </node>
+ <node>
+ <node-id>bgp:23</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.2.1</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ <node>
+ <node-id>bgp:24</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.2.2</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ <termination-point>
+ <tp-id>tp:24:1</tp-id>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.7</igp:ip-address>
+ </igp:igp-termination-point-attributes>
+ </termination-point>
+ <termination-point>
+ <tp-id>tp:24:2</tp-id>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.7</igp:ip-address>
+ </igp:igp-termination-point-attributes>
+ </termination-point>
+ <termination-point>
+ <tp-id>tp:24:3</tp-id>
+ <igp:igp-termination-point-attributes>
+ <igp:ip-address>192.168.1.7</igp:ip-address>
+ </igp:igp-termination-point-attributes>
+ </termination-point>
+ </node>
+ <node>
+ <node-id>bgp:25</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.2.1</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ </topology>'''
+
+NETWORK_UNDERLAY_TOPOLOGY_6 = '''<topology
+ xmlns="urn:TBD:params:xml:ns:yang:network-topology"
+ xmlns:igp="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"
+ xmlns:isis="urn:TBD:params:xml:ns:yang:network:isis-topology">
+ <topology-id>network-topo:6</topology-id>
+ <node>
+ <node-id>bgp:26</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.1.1</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ <node>
+ <node-id>bgp:27</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.1.2</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ <node>
+ <node-id>bgp:28</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.2.1</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ <node>
+ <node-id>bgp:29</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.2.1</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
+ </node>
+ <node>
+ <node-id>bgp:30</node-id>
+ <igp:igp-node-attributes>
+ <isis:isis-node-attributes>
+ <isis:ted>
+ <isis:te-router-id-ipv4>192.168.2.3</isis:te-router-id-ipv4>
+ </isis:ted>
+ </isis:isis-node-attributes>
+ </igp:igp-node-attributes>
</node>
+ <link>
+ <link-id>link:26:28</link-id>
+ <source>
+ <source-node>bgp:26</source-node>
+ </source>
+ <destination>
+ <dest-node>bgp:28</dest-node>
+ </destination>
+ <igp:igp-link-attributes>
+ <igp:name>linkA</igp:name>
+ <igp:metric>17</igp:metric>
+ </igp:igp-link-attributes>
+ </link>
+ <link>
+ <link-id>link:28:29</link-id>
+ <source>
+ <source-node>bgp:28</source-node>
+ </source>
+ <destination>
+ <dest-node>bgp:29</dest-node>
+ </destination>
+ <igp:igp-link-attributes>
+ <igp:name>linkB</igp:name>
+ <igp:metric>11</igp:metric>
+ </igp:igp-link-attributes>
+ </link>
+ <link>
+ <link-id>link:29:30-1</link-id>
+ <source>
+ <source-node>bgp:29</source-node>
+ </source>
+ <destination>
+ <dest-node>bgp:30</dest-node>
+ </destination>
+ <igp:igp-link-attributes>
+ <igp:name>linkA</igp:name>
+ <igp:metric>12</igp:metric>
+ </igp:igp-link-attributes>
+ </link>
+ <link>
+ <link-id>link:29:30-2</link-id>
+ <source>
+ <source-node>bgp:29</source-node>
+ </source>
+ <destination>
+ <dest-node>bgp:30</dest-node>
+ </destination>
+ <igp:igp-link-attributes>
+ <igp:name>linkC</igp:name>
+ <igp:metric>12</igp:metric>
+ </igp:igp-link-attributes>
+ </link>
</topology>'''
OPENFLOW_UNDERLAY_NODES = '''
<node-connector>
<id>openflow:1:1</id>
<flov-inv:port-number>1</flov-inv:port-number>
+ <flov-inv:name>portC</flov-inv:name>
</node-connector>
<node-connector>
<id>openflow:1:2</id>
</node-connector>
<flov-inv:manufacturer>Pantheon Technologies</flov-inv:manufacturer>
<flov-inv:ip-address>192.168.1.1</flov-inv:ip-address>
+ <flov-inv:serial-number>19</flov-inv:serial-number>
</node>
<node>
<id>openflow:2</id>
<node-connector>
<id>openflow:2:1</id>
<flov-inv:port-number>1</flov-inv:port-number>
+ <flov-inv:name>portB</flov-inv:name>
</node-connector>
<node-connector>
<id>openflow:2:2</id>
<flov-inv:port-number>2</flov-inv:port-number>
+ <flov-inv:name>portD</flov-inv:name>
+ </node-connector>
+ <node-connector>
+ <id>openflow:2:3</id>
+ <flov-inv:port-number>3</flov-inv:port-number>
+ <flov-inv:name>portA</flov-inv:name>
</node-connector>
<flov-inv:manufacturer>Pantheon Technologies</flov-inv:manufacturer>
<flov-inv:ip-address>192.168.1.2</flov-inv:ip-address>
+ <flov-inv:serial-number>20</flov-inv:serial-number>
</node>
<node>
<id>openflow:3</id>
</node-connector>
<flov-inv:manufacturer>Pantheon Technologies</flov-inv:manufacturer>
<flov-inv:ip-address>192.168.1.3</flov-inv:ip-address>
+ <flov-inv:serial-number>8</flov-inv:serial-number>
</node>
<node>
<id>openflow:4</id>
</node-connector>
<flov-inv:manufacturer>Cisco</flov-inv:manufacturer>
<flov-inv:ip-address>192.168.2.1</flov-inv:ip-address>
+ <flov-inv:serial-number>21</flov-inv:serial-number>
</node>
<node>
<id>openflow:5</id>
<node-connector>
<id>openflow:5:1</id>
<flov-inv:port-number>3</flov-inv:port-number>
+ <flov-inv:name>portB</flov-inv:name>
</node-connector>
<flov-inv:manufacturer>Cisco</flov-inv:manufacturer>
<flov-inv:ip-address>192.168.2.2</flov-inv:ip-address>
+ <flov-inv:serial-number>25</flov-inv:serial-number>
</node>
<node>
<id>openflow:6</id>
<flov-inv:manufacturer>Pantheon Technologies</flov-inv:manufacturer>
<flov-inv:ip-address>192.168.1.1</flov-inv:ip-address>
+ <flov-inv:serial-number>26</flov-inv:serial-number>
</node>
<node>
<id>openflow:7</id>
<flov-inv:manufacturer>Pantheon Technologies</flov-inv:manufacturer>
<flov-inv:ip-address>192.168.2.3</flov-inv:ip-address>
+ <flov-inv:serial-number>19</flov-inv:serial-number>
</node>
<node>
<id>openflow:8</id>
<flov-inv:manufacturer>Cisco</flov-inv:manufacturer>
<flov-inv:ip-address>192.168.1.4</flov-inv:ip-address>
+ <flov-inv:serial-number>21</flov-inv:serial-number>
</node>
<node>
<id>openflow:9</id>
<flov-inv:manufacturer>Cisco</flov-inv:manufacturer>
<flov-inv:ip-address>192.168.2.3</flov-inv:ip-address>
+ <flov-inv:serial-number>21</flov-inv:serial-number>
</node>
<node>
<id>openflow:10</id>
<flov-inv:manufacturer>Cisco</flov-inv:manufacturer>
<flov-inv:ip-address>192.168.2.1</flov-inv:ip-address>
+ <flov-inv:serial-number>25</flov-inv:serial-number>
+ </node>
+ <node>
+ <id>openflow:11</id>
+ <flov-inv:manufacturer>Pantheon Technologies</flov-inv:manufacturer>
+ <flov-inv:ip-address>fe80:0:0:0:0:0:c0a8:103</flov-inv:ip-address>
+ <flov-inv:serial-number>29</flov-inv:serial-number>
+ </node>
+ <node>
+ <id>openflow:12</id>
+ <flov-inv:manufacturer>Pantheon Technologies</flov-inv:manufacturer>
+ <flov-inv:ip-address>fe80:0:0:0:0:0:c0a8:201</flov-inv:ip-address>
+ <flov-inv:serial-number>19</flov-inv:serial-number>
+ </node>
+ <node>
+ <id>openflow:13</id>
+ <flov-inv:manufacturer>Cisco</flov-inv:manufacturer>
+ <flov-inv:ip-address>fe80:0:0:0:0:0:c0a8:104</flov-inv:ip-address>
+ <flov-inv:serial-number>21</flov-inv:serial-number>
+ </node>
+ <node>
+ <id>openflow:14</id>
+ <flov-inv:manufacturer>Cisco</flov-inv:manufacturer>
+ <flov-inv:ip-address>fe80:0:0:0:0:0:c0a8:205</flov-inv:ip-address>
+ <flov-inv:serial-number>21</flov-inv:serial-number>
+ </node>
+ <node>
+ <id>openflow:15</id>
+ <flov-inv:manufacturer>Cisco</flov-inv:manufacturer>
+ <flov-inv:ip-address>fe80:0:0:0:0:0:c0a8:203</flov-inv:ip-address>
+ <flov-inv:serial-number>12</flov-inv:serial-number>
+ </node>
+ <node>
+ <id>openflow:16</id>
+ <flov-inv:manufacturer>Pantheon Technologies</flov-inv:manufacturer>
+ <flov-inv:ip-address>192.168.1.1</flov-inv:ip-address>
+ <flov-inv:serial-number>26</flov-inv:serial-number>
+ </node>
+ <node>
+ <id>openflow:17</id>
+ <flov-inv:manufacturer>Pantheon Technologies</flov-inv:manufacturer>
+ <flov-inv:ip-address>192.168.2.3</flov-inv:ip-address>
+ <flov-inv:serial-number>19</flov-inv:serial-number>
+ </node>
+ <node>
+ <id>openflow:18</id>
+ <flov-inv:manufacturer>Cisco</flov-inv:manufacturer>
+ <flov-inv:ip-address>192.168.2.4</flov-inv:ip-address>
+ <flov-inv:serial-number>21</flov-inv:serial-number>
+ </node>
+ <node>
+ <id>openflow:19</id>
+ <flov-inv:manufacturer>Cisco</flov-inv:manufacturer>
+ <flov-inv:ip-address>192.168.2.3</flov-inv:ip-address>
+ <flov-inv:serial-number>21</flov-inv:serial-number>
+ </node>
+ <node>
+ <id>openflow:20</id>
+ <flov-inv:manufacturer>Cisco</flov-inv:manufacturer>
+ <flov-inv:ip-address>192.168.2.3</flov-inv:ip-address>
+ <flov-inv:serial-number>25</flov-inv:serial-number>
+ </node>
+ <node>
+ <id>openflow:21</id>
+ <flov-inv:manufacturer>Pantheon Technologies</flov-inv:manufacturer>
+ <flov-inv:ip-address>192.168.1.1</flov-inv:ip-address>
+ <flov-inv:serial-number>19</flov-inv:serial-number>
+ <node-connector>
+ <id>openflow:21:1</id>
+ <flov-inv:port-number>1</flov-inv:port-number>
+ <flov-inv:name>portC</flov-inv:name>
+ </node-connector>
+ </node>
+ <node>
+ <id>openflow:22</id>
+ <flov-inv:manufacturer>Pantheon Technologies</flov-inv:manufacturer>
+ <flov-inv:ip-address>192.168.1.2</flov-inv:ip-address>
+ <flov-inv:serial-number>20</flov-inv:serial-number>
+ <node-connector>
+ <id>openflow:22:1</id>
+ <flov-inv:port-number>2</flov-inv:port-number>
+ <flov-inv:name>portB</flov-inv:name>
+ </node-connector>
+ <node-connector>
+ <id>openflow:22:2</id>
+ <flov-inv:port-number>3</flov-inv:port-number>
+ <flov-inv:name>portD</flov-inv:name>
+ </node-connector>
+ <node-connector>
+ <id>openflow:22:3</id>
+ <flov-inv:port-number>1</flov-inv:port-number>
+ <flov-inv:name>portA</flov-inv:name>
+ </node-connector>
+ </node>
+ <node>
+ <id>openflow:23</id>
+ <flov-inv:manufacturer>Pantheon Technologies</flov-inv:manufacturer>
+ <flov-inv:ip-address>192.168.1.3</flov-inv:ip-address>
+ <flov-inv:serial-number>8</flov-inv:serial-number>
+ </node>
+ <node>
+ <id>openflow:24</id>
+ <flov-inv:manufacturer>Cisco</flov-inv:manufacturer>
+ <flov-inv:ip-address>192.168.2.1</flov-inv:ip-address>
+ <flov-inv:serial-number>21</flov-inv:serial-number>
+ </node>
+ <node>
+ <id>openflow:25</id>
+ <flov-inv:manufacturer>Cisco</flov-inv:manufacturer>
+ <flov-inv:ip-address>192.168.2.2</flov-inv:ip-address>
+ <flov-inv:serial-number>25</flov-inv:serial-number>
+ <node-connector>
+ <id>openflow:25:1</id>
+ <flov-inv:port-number>4</flov-inv:port-number>
+ <flov-inv:name>portB</flov-inv:name>
+ </node-connector>
</node>
</nodes>
'''
/inventory:nodes/inventory:node[inventory:id="openflow:2"]/inventory:node-connector[inventory:id="openflow:2:2"]
</inventory-topo:inventory-node-connector-ref>
</termination-point>
+ <termination-point>
+ <tp-id>tp:3</tp-id>
+ <inventory-topo:inventory-node-connector-ref>
+ /inventory:nodes/inventory:node[inventory:id="openflow:2"]/inventory:node-connector[inventory:id="openflow:2:3"]
+ </inventory-topo:inventory-node-connector-ref>
+ </termination-point>
</node>
<node>
<node-id>of-node:3</node-id>
</node>
</topology>
'''
+
+OPENFLOW_UNDERLAY_TOPOLOGY_3 = '''
+<topology
+ xmlns="urn:TBD:params:xml:ns:yang:network-topology"
+ xmlns:inventory="urn:opendaylight:inventory"
+ xmlns:inventory-topo="urn:opendaylight:model:topology:inventory"
+ xmlns:igp="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology">
+ <topology-id>openflow-topo:3</topology-id>
+ <node>
+ <node-id>of-node:11</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:11"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:12</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:12"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:13</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:13"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:14</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:14"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:15</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:15"]</inventory-topo:inventory-node-ref>
+ </node>
+ <link>
+ <link-id>link:11:12</link-id>
+ <source>
+ <source-node>of-node:11</source-node>
+ </source>
+ <destination>
+ <dest-node>of-node:12</dest-node>
+ </destination>
+ <igp:igp-link-attributes>
+ <igp:name>linkB</igp:name>
+ <igp:metric>16</igp:metric>
+ </igp:igp-link-attributes>
+ </link>
+ <link>
+ <link-id>link:14:12</link-id>
+ <source>
+ <source-node>of-node:14</source-node>
+ </source>
+ <destination>
+ <dest-node>of-node:12</dest-node>
+ </destination>
+ <igp:igp-link-attributes>
+ <igp:name>linkC</igp:name>
+ <igp:metric>14</igp:metric>
+ </igp:igp-link-attributes>
+ </link>
+ <link>
+ <link-id>link:15:13</link-id>
+ <source>
+ <source-node>of-node:15</source-node>
+ </source>
+ <destination>
+ <dest-node>of-node:13</dest-node>
+ </destination>
+ <igp:igp-link-attributes>
+ <igp:name>linkD</igp:name>
+ <igp:metric>15</igp:metric>
+ </igp:igp-link-attributes>
+ </link>
+ <link>
+ <link-id>link:11:13</link-id>
+ <source>
+ <source-node>of-node:11</source-node>
+ </source>
+ <destination>
+ <dest-node>of-node:13</dest-node>
+ </destination>
+ <igp:igp-link-attributes>
+ <igp:name>linkA</igp:name>
+ <igp:metric>13</igp:metric>
+ </igp:igp-link-attributes>
+ </link>
+</topology>
+'''
+OPENFLOW_UNDERLAY_TOPOLOGY_4 = '''
+<topology
+ xmlns="urn:TBD:params:xml:ns:yang:network-topology"
+ xmlns:inventory="urn:opendaylight:inventory"
+ xmlns:inventory-topo="urn:opendaylight:model:topology:inventory">
+ <topology-id>openflow-topo:4</topology-id>
+ <node>
+ <node-id>of-node:16</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:16"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:17</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:17"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:18</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:18"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:19</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:19"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:20</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:20"]</inventory-topo:inventory-node-ref>
+ </node>
+</topology>
+'''
+
+OPENFLOW_UNDERLAY_TOPOLOGY_5 = '''
+<topology
+ xmlns="urn:TBD:params:xml:ns:yang:network-topology"
+ xmlns:inventory="urn:opendaylight:inventory"
+ xmlns:inventory-topo="urn:opendaylight:model:topology:inventory">
+ <topology-id>openflow-topo:5</topology-id>
+ <node>
+ <node-id>of-node:21</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:21"]</inventory-topo:inventory-node-ref>
+ <termination-point>
+ <tp-id>tp:1</tp-id>
+ <inventory-topo:inventory-node-connector-ref>
+ /inventory:nodes/inventory:node[inventory:id="openflow:21"]/inventory:node-connector[inventory:id="openflow:21:1"]
+ </inventory-topo:inventory-node-connector-ref>
+ </termination-point>
+ </node>
+ <node>
+ <node-id>of-node:22</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:22"]</inventory-topo:inventory-node-ref>
+ <termination-point>
+ <tp-id>tp:1</tp-id>
+ <inventory-topo:inventory-node-connector-ref>
+ /inventory:nodes/inventory:node[inventory:id="openflow:22"]/inventory:node-connector[inventory:id="openflow:22:1"]
+ </inventory-topo:inventory-node-connector-ref>
+ </termination-point>
+ <termination-point>
+ <tp-id>tp:2</tp-id>
+ <inventory-topo:inventory-node-connector-ref>
+ /inventory:nodes/inventory:node[inventory:id="openflow:22"]/inventory:node-connector[inventory:id="openflow:22:2"]
+ </inventory-topo:inventory-node-connector-ref>
+ </termination-point>
+ <termination-point>
+ <tp-id>tp:3</tp-id>
+ <inventory-topo:inventory-node-connector-ref>
+ /inventory:nodes/inventory:node[inventory:id="openflow:22"]/inventory:node-connector[inventory:id="openflow:22:3"]
+ </inventory-topo:inventory-node-connector-ref>
+ </termination-point>
+ </node>
+ <node>
+ <node-id>of-node:23</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:23"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:24</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:24"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:25</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:25"]</inventory-topo:inventory-node-ref>
+ <termination-point>
+ <tp-id>tp:1</tp-id>
+ <inventory-topo:inventory-node-connector-ref>
+ /inventory:nodes/inventory:node[inventory:id="openflow:25"]/inventory:node-connector[inventory:id="openflow:25:1"]
+ </inventory-topo:inventory-node-connector-ref>
+ </termination-point>
+ </node>
+</topology>
+'''
+
+OPENFLOW_UNDERLAY_TOPOLOGY_6 = '''
+<topology
+ xmlns="urn:TBD:params:xml:ns:yang:network-topology"
+ xmlns:inventory="urn:opendaylight:inventory"
+ xmlns:inventory-topo="urn:opendaylight:model:topology:inventory">
+ <topology-id>openflow-topo:6</topology-id>
+ <node>
+ <node-id>of-node:26</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:6"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:27</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:7"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:28</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:8"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:29</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:9"]</inventory-topo:inventory-node-ref>
+ </node>
+ <node>
+ <node-id>of-node:30</node-id>
+ <inventory-topo:inventory-node-ref>/inventory:nodes/inventory:node[inventory:id="openflow:10"]</inventory-topo:inventory-node-ref>
+ </node>
+</topology>
+'''
<mapping>
<input-model>{input-model}</input-model>
<underlay-topology>{underlay-topology-id}</underlay-topology>
- <target-field>{target-field}</target-field>
+ <!-- target field -->
<aggregate-inside>false</aggregate-inside>
</mapping>
<mapping>
<input-model>{input-model}</input-model>
<underlay-topology>{underlay-topology-id}</underlay-topology>
- <target-field>{target-field}</target-field>
+ <!-- target field -->
<aggregate-inside>false</aggregate-inside>
</mapping>
</aggregation>
<mapping>
<input-model>{input-model}</input-model>
<underlay-topology>{underlay-topology-id}</underlay-topology>
- <target-field>{target-field}</target-field>
+ <!-- target field -->
<aggregate-inside>true</aggregate-inside>
</mapping>
</aggregation>
</correlations>
</topology>'''
+UNIFICATION_FILTRATION_NT_AGGREGATE_INSIDE = '''<topology xmlns="urn:opendaylight:topology:correlation" xmlns:n="urn:TBD:params:xml:ns:yang:network-topology">
+ <n:topology-id>topo:1</n:topology-id>
+ <correlations>
+ <output-model>{output-model}</output-model>
+ <correlation>
+ <correlation-id>1</correlation-id>
+ <type>{type}</type>
+ <correlation-item>{correlation-item}</correlation-item>
+ <aggregation>
+ <aggregation-type>{aggregation-type}</aggregation-type>
+ <mapping>
+ <apply-filters>1</apply-filters>
+ <input-model>{input-model}</input-model>
+ <underlay-topology>{underlay-topology-id}</underlay-topology>
+ <!-- target field -->
+ <aggregate-inside>true</aggregate-inside>
+ </mapping>
+ </aggregation>
+ <filtration>
+ <underlay-topology>{underlay-topology-id}</underlay-topology>
+ </filtration>
+ </correlation>
+ </correlations>
+ </topology>'''
+
+UNIFICATION_FILTRATION_NT = '''<topology xmlns="urn:opendaylight:topology:correlation" xmlns:n="urn:TBD:params:xml:ns:yang:network-topology">
+ <n:topology-id>topo:1</n:topology-id>
+ <correlations>
+ <output-model>{output-model}</output-model>
+ <correlation>
+ <correlation-id>1</correlation-id>
+ <type>{type}</type>
+ <correlation-item>{correlation-item}</correlation-item>
+ <aggregation>
+ <aggregation-type>{aggregation-type}</aggregation-type>
+ <mapping>
+ <apply-filters>1</apply-filters>
+ <input-model>{input-model}</input-model>
+ <underlay-topology>{underlay-topology-id}</underlay-topology>
+ <!-- target field -->
+ <aggregate-inside>false</aggregate-inside>
+ </mapping>
+ <mapping>
+ <input-model>{input-model}</input-model>
+ <underlay-topology>{underlay-topology-id}</underlay-topology>
+ <!-- target field -->
+ <aggregate-inside>false</aggregate-inside>
+ </mapping>
+ </aggregation>
+ <filtration>
+ <underlay-topology>{underlay-topology-id}</underlay-topology>
+ </filtration>
+ </correlation>
+ </correlations>
+ </topology>'''
+
FILTRATION_NT = '''<topology xmlns="urn:opendaylight:topology:correlation" xmlns:n="urn:TBD:params:xml:ns:yang:network-topology">
<n:topology-id>topo:1</n:topology-id>
<correlations>
</correlations>
</topology>'''
+TARGET_FIELD = '''
+<target-field>
+ <target-field-path>{target-field-path}</target-field-path>
+ <matching-key>{matching-key}</matching-key>
+</target-field>
+'''
+
SCRIPTING = '''
<scripting>
<language>{language}</language>
</script>
</scripting>
'''
+FILTER_SCRIPT = '''<filter>
+ <input-model>{input-model}</input-model>
+ <filter-id>1</filter-id>
+ <target-field>{target-field}</target-field>
+ <filter-type>script</filter-type>
+ <script-filter>
+ <scripting>
+ <language>{language}</language>
+ <script>
+ {script}
+ </script>
+ </scripting>
+ </script-filter>
+ </filter>'''
+
FILTER_IPV4 = '''<filter>
<input-model>{input-model}</input-model>
<ipv4-address>{ipv4}</ipv4-address>
</ipv4-address-filter>
</filter>'''
+
+FILTER_IPV6 = '''<filter>
+ <input-model>{input-model}</input-model>
+ <filter-id>1</filter-id>
+ <target-field>{target-field}</target-field>
+ <filter-type>ipv6-address</filter-type>
+ <ipv6-address-filter>
+ <ipv6-address>{ipv6}</ipv6-address>
+ </ipv6-address-filter>
+ </filter>'''
+
+FILTER_RANGE_NUMBER = '''<filter>
+ <input-model>{input-model}</input-model>
+ <filter-id>1</filter-id>
+ <target-field>{target-field}</target-field>
+ <filter-type>range-number</filter-type>
+ <range-number-filter>
+ <min-number-value>{min}</min-number-value>
+ <max-number-value>{max}</max-number-value>
+ </range-number-filter>
+ </filter>'''
+
+FILTER_RANGE_STRING = '''<filter>
+ <input-model>{input-model}</input-model>
+ <filter-id>1</filter-id>
+ <target-field>{target-field}</target-field>
+ <filter-type>range-string</filter-type>
+ <range-string-filter>
+ <min-string-value>{min}</min-string-value>
+ <max-string-value>{max}</max-string-value>
+ </range-string-filter>
+ </filter>'''
+
+FILTER_SPECIFIC_NUMBER = '''<filter>
+ <input-model>{input-model}</input-model>
+ <filter-id>1</filter-id>
+ <target-field>{target-field}</target-field>
+ <filter-type>specific-number</filter-type>
+ <specific-number-filter>
+ <specific-number>{number}</specific-number>
+ </specific-number-filter>
+ </filter>'''
+
+FILTER_SPECIFIC_STRING = '''<filter>
+ <input-model>{input-model}</input-model>
+ <filter-id>1</filter-id>
+ <target-field>{target-field}</target-field>
+ <filter-type>specific-string</filter-type>
+ <specific-string-filter>
+ <specific-string>{string}</specific-string>
+ </specific-string-filter>
+ </filter>'''
+
+LINK_COMPUTATION_INSIDE = '''<link-computation xmlns="urn:opendaylight:topology:link:computation" xmlns:n="urn:opendaylight:topology:correlation">
+ <output-model>{output-model}</output-model>
+ <node-info>
+ <node-topology>topo:1</node-topology>
+ <input-model>{input-model}</input-model>
+ </node-info>
+ <link-info>
+ <link-topology>{underlay-topology-id}</link-topology>
+ <input-model>{input-model}</input-model>
+ </link-info>
+ </link-computation>'''
+
+LINK_COMPUTATION = '''<link-computation xmlns="urn:opendaylight:topology:link:computation" xmlns:n="urn:opendaylight:topology:correlation">
+ <output-model>{output-model}</output-model>
+ <node-info>
+ <node-topology>topo:1</node-topology>
+ <input-model>{input-model}</input-model>
+ </node-info>
+ <link-info>
+ <link-topology>{underlay-topology-1-id}</link-topology>
+ <input-model>{input-model}</input-model>
+ </link-info>
+ <link-info>
+ <link-topology>{underlay-topology-2-id}</link-topology>
+ <input-model>{input-model}</input-model>
+ </link-info>
+ </link-computation>'''