Topoprocessing tests - Keywords reworked 71/30471/22
authorAndrej Záň <andrej.zan@pantheon.sk>
Wed, 18 Nov 2015 12:12:38 +0000 (13:12 +0100)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 3 Feb 2016 01:04:20 +0000 (01:04 +0000)
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>
csit/libraries/KarafKeywords.robot
csit/libraries/TopoprocessingKeywords.robot
csit/suites/topoprocessing/basic-topology-operations/010_Aggregation.robot
csit/suites/topoprocessing/basic-topology-operations/020_Filtration_nodes.robot [new file with mode: 0644]
csit/suites/topoprocessing/basic-topology-operations/030_Filtration_termination_points.robot [new file with mode: 0644]
csit/suites/topoprocessing/basic-topology-operations/040_Filtration_links.robot [new file with mode: 0644]
csit/suites/topoprocessing/basic-topology-operations/050_Aggregation_filtration.robot [new file with mode: 0644]
csit/suites/topoprocessing/basic/010_Restconf_OK.robot
csit/suites/topoprocessing/topology-operations/010_Unifications_Tests.robot
csit/variables/topoprocessing/Topologies.py
csit/variables/topoprocessing/TopologyRequests.py

index 4c3ff585cc707d874386e7de94e4140edeef51f3..3a72696ea2e1c0fd40c36aacbc14d22d3ffb6a3b 100644 (file)
@@ -17,13 +17,6 @@ Verify Feature Is Installed
     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}
index 28b8ce653b15209dbd1022d121b265231a35ac0c..0a03c9c2e58facc32770e37bd6666ceb27c78e61 100644 (file)
@@ -1,6 +1,7 @@
 *** Settings ***
 Variables         ../variables/Variables.py
 Variables         ../variables/topoprocessing/Topologies.py
+Variables         ../variables/topoprocessing/TopologyRequests.py
 Library           RequestsLibrary
 Library           SSHLibrary
 Library           XML
@@ -36,7 +37,7 @@ Setup Environment
     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
@@ -70,31 +71,25 @@ Prepare New Feature Installation
 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
@@ -102,30 +97,144 @@ Prepare Unification Inside Topology Request
     ${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}
index 004e8dd89fcb7c66f98b5be5226e7bcf61f4da5f..d99694c46337ae1253ef6a4728c667215ea96fcc 100644 (file)
@@ -19,8 +19,9 @@ Resource          ../../../libraries/TopoprocessingKeywords.robot
 *** 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
@@ -33,8 +34,9 @@ Unification Node
 
 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
@@ -51,9 +53,10 @@ Unification Node Inventory
 
 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
@@ -66,9 +69,10 @@ Unification Scripting Node
 
 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
@@ -81,7 +85,8 @@ Unification Scripting Node Inventory
 
 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
@@ -94,7 +99,8 @@ Unification Node Inside
 
 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
@@ -107,50 +113,46 @@ Unification Node Inside Inventory
 
 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
@@ -159,4 +161,4 @@ Unification Termination Point Inside Inventory
 *** 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
diff --git a/csit/suites/topoprocessing/basic-topology-operations/020_Filtration_nodes.robot b/csit/suites/topoprocessing/basic-topology-operations/020_Filtration_nodes.robot
new file mode 100644 (file)
index 0000000..7e97aa6
--- /dev/null
@@ -0,0 +1,231 @@
+*** 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
diff --git a/csit/suites/topoprocessing/basic-topology-operations/030_Filtration_termination_points.robot b/csit/suites/topoprocessing/basic-topology-operations/030_Filtration_termination_points.robot
new file mode 100644 (file)
index 0000000..54565a9
--- /dev/null
@@ -0,0 +1,250 @@
+*** 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
diff --git a/csit/suites/topoprocessing/basic-topology-operations/040_Filtration_links.robot b/csit/suites/topoprocessing/basic-topology-operations/040_Filtration_links.robot
new file mode 100644 (file)
index 0000000..cb88d32
--- /dev/null
@@ -0,0 +1,151 @@
+*** 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
diff --git a/csit/suites/topoprocessing/basic-topology-operations/050_Aggregation_filtration.robot b/csit/suites/topoprocessing/basic-topology-operations/050_Aggregation_filtration.robot
new file mode 100644 (file)
index 0000000..e229c5d
--- /dev/null
@@ -0,0 +1,147 @@
+*** 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
index 4d19667e2db10a7ed7bd90beee3d8f2eb73e28f2..0e3425d521daa70d8ef0ac6250437dde34a79819 100644 (file)
@@ -1,6 +1,6 @@
 *** 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
index d6b1f967dc04c101f5f75d76ba0ab245e5b15c4b..5a3e14a129f9abe4bc4ada02fc88fec77cce157f 100644 (file)
@@ -48,17 +48,17 @@ Unification on Network Topology
 *** 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
@@ -67,7 +67,7 @@ Test Teardown
 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}
index f4473dde53d48f07f72bc9fec547ec1f655956b2..2056d3bb837ac17f9665f1999b36024977e101d9 100644 (file)
@@ -16,10 +16,16 @@ NETWORK_UNDERLAY_TOPOLOGY_1 = '''<topology
                                 <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>
@@ -48,10 +54,16 @@ NETWORK_UNDERLAY_TOPOLOGY_1 = '''<topology
                                 <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>
@@ -66,10 +78,16 @@ NETWORK_UNDERLAY_TOPOLOGY_1 = '''<topology
                                 <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>
@@ -84,8 +102,63 @@ NETWORK_UNDERLAY_TOPOLOGY_1 = '''<topology
                                 <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
@@ -96,6 +169,7 @@ 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>
@@ -106,10 +180,15 @@ NETWORK_UNDERLAY_TOPOLOGY_2 = '''<topology
                                 <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>
@@ -119,11 +198,24 @@ NETWORK_UNDERLAY_TOPOLOGY_2 = '''<topology
                                 </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>
@@ -138,6 +230,7 @@ NETWORK_UNDERLAY_TOPOLOGY_2 = '''<topology
                             </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>
@@ -152,6 +245,7 @@ NETWORK_UNDERLAY_TOPOLOGY_2 = '''<topology
                             </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>
@@ -162,8 +256,358 @@ NETWORK_UNDERLAY_TOPOLOGY_2 = '''<topology
                                 <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 = '''
@@ -175,6 +619,7 @@ 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>
@@ -182,19 +627,28 @@ OPENFLOW_UNDERLAY_NODES = '''
         </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>
@@ -212,6 +666,7 @@ OPENFLOW_UNDERLAY_NODES = '''
         </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>
@@ -229,40 +684,163 @@ OPENFLOW_UNDERLAY_NODES = '''
         </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>
 '''
@@ -304,6 +882,12 @@ OPENFLOW_UNDERLAY_TOPOLOGY_1 = '''
                 /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>
@@ -390,3 +974,201 @@ OPENFLOW_UNDERLAY_TOPOLOGY_2 = '''
     </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>
+'''
index 6d8a0f38d9f013625ec818c3bb5fb2e7f3e65039..96531d2994465935cad2c7f33b48a474906a5667 100644 (file)
@@ -11,13 +11,13 @@ UNIFICATION_NT = '''<topology xmlns="urn:opendaylight:topology:correlation" xmln
                                     <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>
@@ -38,7 +38,7 @@ UNIFICATION_NT_AGGREGATE_INSIDE = '''<topology xmlns="urn:opendaylight: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>true</aggregate-inside>
                                     </mapping>
                                 </aggregation>
@@ -46,6 +46,62 @@ UNIFICATION_NT_AGGREGATE_INSIDE = '''<topology xmlns="urn:opendaylight:topology:
                         </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>
@@ -62,6 +118,13 @@ FILTRATION_NT = '''<topology xmlns="urn:opendaylight:topology:correlation" xmlns
                     </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>
@@ -70,6 +133,21 @@ SCRIPTING = '''
     </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>
@@ -80,3 +158,83 @@ FILTER_IPV4 = '''<filter>
                              <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>'''