Added SXP filtering tests
[integration/test.git] / csit / suites / sxp / filtering / 030_Inbound_Filtering_Discarding.robot
diff --git a/csit/suites/sxp/filtering/030_Inbound_Filtering_Discarding.robot b/csit/suites/sxp/filtering/030_Inbound_Filtering_Discarding.robot
new file mode 100644 (file)
index 0000000..37d37b1
--- /dev/null
@@ -0,0 +1,239 @@
+*** Settings ***
+Documentation     Test suite to verify inbound-discarding filtering functionality
+Suite Setup       Setup SXP Environment
+Suite Teardown    Clean SXP Environment
+Test Teardown     Clean Nodes
+Library           RequestsLibrary
+Library           SSHLibrary
+Library           ../../../libraries/Sxp.py
+Library           ../../../libraries/Common.py
+Resource          ../../../libraries/SxpLib.robot
+Resource          ../../../libraries/Utils.robot
+Resource          ../../../libraries/KarafKeywords.robot
+Resource          ../../../variables/Variables.py
+
+*** Variables ***
+
+*** Test Cases ***
+Access List Filtering
+    [Documentation]     Test ACL filter behaviour during filter update
+    Setup Nodes
+    ${peers}         Add Peers      127.0.0.2       127.0.0.4
+    Add PeerGroup    GROUP      ${peers}
+    ${entry1}       Get Filter Entry    10  permit      acl=10.10.10.0,0.0.0.255
+    ${entry2}       Get Filter Entry    20  permit      acl=10.0.0.0,0.254.0.0
+    ${entries}      Combine Strings     ${entry1}     ${entry2}
+    Add Filter    GROUP    inbound-discarding      ${entries}
+    Wait Until Keyword Succeeds  4   1  Check One Group 4-2
+    Delete Filter   GROUP    inbound-discarding
+    Wait Until Keyword Succeeds  4   1  Check One Group 4-2
+
+Access List Sgt Filtering
+    [Documentation]     Test ACL and SGT filter behaviour during filter update
+    Setup Nodes
+    ${peers}         Add Peers      127.0.0.3       127.0.0.5
+    Add PeerGroup    GROUP      ${peers}
+    ${entry1}       Get Filter Entry    10  permit      sgt=30  acl=10.10.10.0,0.0.0.255
+    ${entry2}       Get Filter Entry    20  permit      sgt=50  acl=10.0.0.0,0.254.0.0
+    ${entries}      Combine Strings     ${entry1}     ${entry2}
+    Add Filter    GROUP    inbound-discarding      ${entries}
+    Wait Until Keyword Succeeds  4   1  Check One Group 5-3
+    Delete Filter   GROUP    inbound-discarding
+    Wait Until Keyword Succeeds  4   1  Check One Group 5-3
+
+Prefix List Filtering
+    [Documentation]     Test Prefix List filter behaviour during filter update
+    Setup Nodes
+    ${peers}         Add Peers      127.0.0.2       127.0.0.4
+    Add PeerGroup    GROUP      ${peers}
+    ${entry1}       Get Filter Entry    10  permit      pl=10.10.10.0/24
+    ${entry2}       Get Filter Entry    20  permit      epl=10.0.0.0/8,le,16
+    ${entries}      Combine Strings     ${entry1}     ${entry2}
+    Add Filter    GROUP    inbound-discarding      ${entries}
+    Wait Until Keyword Succeeds  4   1  Check One Group 4-2
+    Delete Filter   GROUP    inbound-discarding
+    Wait Until Keyword Succeeds  4   1  Check One Group 4-2
+
+Prefix List Sgt Filtering
+    [Documentation]     Test Prefix List and SGT filter behaviour during filter update
+    Setup Nodes
+    ${peers}         Add Peers      127.0.0.3       127.0.0.5
+    Add PeerGroup    GROUP      ${peers}
+    ${entry1}       Get Filter Entry    10  permit      sgt=30  pl=10.10.10.0/24
+    ${entry2}       Get Filter Entry    20  permit      pl=10.50.0.0/16
+    ${entries}      Combine Strings     ${entry1}     ${entry2}
+    Add Filter    GROUP    inbound-discarding      ${entries}
+    Wait Until Keyword Succeeds  4   1  Check One Group 5-3
+    Delete Filter   GROUP    inbound-discarding
+    Wait Until Keyword Succeeds  4   1  Check One Group 5-3
+
+Access List Filtering Legacy
+    [Documentation]     Test ACL filter behaviour during filter update
+    Setup Nodes Legacy Par Two
+    ${peers}         Add Peers      127.0.0.2       127.0.0.4
+    Add PeerGroup    GROUP      ${peers}
+    ${entry1}       Get Filter Entry    10  permit      acl=10.10.10.0,0.0.0.255
+    ${entry2}       Get Filter Entry    20  permit      acl=10.0.0.0,0.254.0.0
+    ${entries}      Combine Strings     ${entry1}     ${entry2}
+    Add Filter    GROUP    inbound-discarding      ${entries}
+    Wait Until Keyword Succeeds  4   1  Check One Group 4-2
+    Delete Filter   GROUP    inbound-discarding
+    Wait Until Keyword Succeeds  4   1  Check One Group 4-2
+
+Access List Sgt Filtering Legacy
+    [Documentation]     Test ACL and SGT filter behaviour during filter update
+    Setup Nodes Legacy Par One
+    ${peers}         Add Peers      127.0.0.3       127.0.0.5
+    Add PeerGroup    GROUP      ${peers}
+    ${entry1}       Get Filter Entry    10  permit      sgt=30  acl=10.10.10.0,0.0.0.255
+    ${entry2}       Get Filter Entry    20  permit      sgt=50  acl=10.0.0.0,0.254.0.0
+    ${entries}      Combine Strings     ${entry1}     ${entry2}
+    Add Filter    GROUP    inbound-discarding      ${entries}
+    Wait Until Keyword Succeeds  4   1  Check One Group 5-3
+    Delete Filter   GROUP    inbound-discarding
+    Wait Until Keyword Succeeds  4   1  Check One Group 5-3
+
+Prefix List Filtering Legacy
+    [Documentation]     Test Prefix List filter behaviour during filter update
+    Setup Nodes Legacy Par Two
+    ${peers}         Add Peers      127.0.0.2       127.0.0.4
+    Add PeerGroup    GROUP      ${peers}
+    ${entry1}       Get Filter Entry    10  permit      pl=10.10.10.0/24
+    ${entry2}       Get Filter Entry    20  permit      epl=10.0.0.0/8,le,16
+    ${entries}      Combine Strings     ${entry1}     ${entry2}
+    Add Filter    GROUP    inbound-discarding      ${entries}
+    Wait Until Keyword Succeeds  4   1  Check One Group 4-2
+    Delete Filter   GROUP    inbound-discarding
+    Wait Until Keyword Succeeds  4   1  Check One Group 4-2
+
+Prefix List Sgt Filtering Legacy
+    [Documentation]     Test Prefix List and SGT filter behaviour during filter update
+    Setup Nodes Legacy Par One
+    ${peers}         Add Peers      127.0.0.3       127.0.0.5
+    Add PeerGroup    GROUP      ${peers}
+    ${entry1}       Get Filter Entry    10  permit      sgt=30  pl=10.10.10.0/24
+    ${entry2}       Get Filter Entry    20  permit      pl=10.50.0.0/16
+    ${entries}      Combine Strings     ${entry1}     ${entry2}
+    Add Filter    GROUP    inbound-discarding      ${entries}
+    Wait Until Keyword Succeeds  4   1  Check One Group 5-3
+    Delete Filter   GROUP    inbound-discarding
+    Wait Until Keyword Succeeds  4   1  Check One Group 5-3
+
+*** Keywords ***
+Setup Nodes
+    [Arguments]     ${version}=version4     ${password}=none
+    : FOR    ${node}    IN RANGE    2    5
+    \   Add Connection    ${version}    both    127.0.0.1    64999    127.0.0.${node}    ${password}
+    \   Add Connection    ${version}    both    127.0.0.${node}    64999    127.0.0.1    ${password}
+    \   Wait Until Keyword Succeeds    15    4    Verify Connection    ${version}    both    127.0.0.${node}
+    \   Add Binding    ${node}0    10.10.10.${node}0/32    127.0.0.${node}
+    \   Add Binding    ${node}0    10.10.${node}0.0/24     127.0.0.${node}
+    \   Add Binding    ${node}0    10.${node}0.0.0/16      127.0.0.${node}
+    \   Add Binding    ${node}0    ${node}0.0.0.0/8        127.0.0.${node}
+    Add Connection    ${version}    both    127.0.0.5    64999    127.0.0.3    ${password}
+    Add Connection    ${version}    both    127.0.0.3    64999    127.0.0.5    ${password}
+    Add Binding    50    10.10.10.50/32    127.0.0.5
+    Add Binding    50    10.10.50.0/24     127.0.0.5
+    Add Binding    50    10.50.0.0/16      127.0.0.5
+    Add Binding    50    50.0.0.0/8        127.0.0.5
+    Add Binding    10    10.10.10.10/32    127.0.0.1
+    Add Binding    10    10.10.10.0/24     127.0.0.1
+    Add Binding    10    10.10.0.0/16      127.0.0.1
+    Add Binding    10    10.0.0.0/8        127.0.0.1
+
+Setup Nodes Legacy Par One
+    [Arguments]     ${version}=version3      ${password}=none
+    : FOR    ${node}    IN RANGE    1    6
+    \   Add Binding    ${node}0    10.10.10.${node}0/32    127.0.0.${node}
+    \   Add Binding    ${node}0    10.10.${node}0.0/24     127.0.0.${node}
+    \   Add Binding    ${node}0    10.${node}0.0.0/16      127.0.0.${node}
+    \   Add Binding    ${node}0    ${node}0.0.0.0/8        127.0.0.${node}
+    Add Connection    ${version}    listener    127.0.0.1    64999    127.0.0.2    ${password}
+    Add Connection    ${version}    speaker    127.0.0.2    64999    127.0.0.1    ${password}
+    Wait Until Keyword Succeeds    15    4    Verify Connection    ${version}    speaker    127.0.0.2
+    Add Connection    ${version}    listener    127.0.0.1    64999    127.0.0.4    ${password}
+    Add Connection    ${version}    speaker    127.0.0.4    64999    127.0.0.1    ${password}
+    Wait Until Keyword Succeeds    15    4    Verify Connection    ${version}    speaker    127.0.0.4
+    Add Connection    ${version}    speaker    127.0.0.1    64999    127.0.0.3    ${password}
+    Add Connection    ${version}    listener    127.0.0.3    64999    127.0.0.1    ${password}
+    Wait Until Keyword Succeeds    15    4    Verify Connection    ${version}    listener    127.0.0.3
+    Add Connection    ${version}    listener    127.0.0.5    64999    127.0.0.3    ${password}
+    Add Connection    ${version}    speaker    127.0.0.3    64999    127.0.0.5    ${password}
+    Wait Until Keyword Succeeds    15    4    Verify Connection    ${version}    listener    127.0.0.5   64999   127.0.0.3
+
+Setup Nodes Legacy Par Two
+    [Arguments]     ${version}=version3     ${password}=none
+    : FOR    ${node}    IN RANGE    1    6
+    \   Add Binding    ${node}0    10.10.10.${node}0/32    127.0.0.${node}
+    \   Add Binding    ${node}0    10.10.${node}0.0/24     127.0.0.${node}
+    \   Add Binding    ${node}0    10.${node}0.0.0/16      127.0.0.${node}
+    \   Add Binding    ${node}0    ${node}0.0.0.0/8        127.0.0.${node}
+    Add Connection    ${version}    speaker    127.0.0.1    64999    127.0.0.2    ${password}
+    Add Connection    ${version}    listener    127.0.0.2    64999    127.0.0.1    ${password}
+    Wait Until Keyword Succeeds    15    4    Verify Connection    ${version}    listener    127.0.0.2
+    Add Connection    ${version}    speaker    127.0.0.1    64999    127.0.0.4    ${password}
+    Add Connection    ${version}    listener    127.0.0.4    64999    127.0.0.1    ${password}
+    Wait Until Keyword Succeeds    15    4    Verify Connection    ${version}    listener    127.0.0.4
+    Add Connection    ${version}    listener    127.0.0.1    64999    127.0.0.3    ${password}
+    Add Connection    ${version}    speaker    127.0.0.3    64999    127.0.0.1    ${password}
+    Wait Until Keyword Succeeds    15    4    Verify Connection    ${version}    speaker    127.0.0.3
+    Add Connection    ${version}    speaker    127.0.0.5    64999    127.0.0.3    ${password}
+    Add Connection    ${version}    listener    127.0.0.3    64999    127.0.0.5    ${password}
+    Wait Until Keyword Succeeds    15    4    Verify Connection    ${version}    speaker    127.0.0.5  64999   127.0.0.3
+
+Check One Group 4-2
+    [Documentation]     Check if only bindings matching filter from node 4 and 2 are propagated to SXP-DB of other nodes
+    ...                 Database should contains only Bindings regarding to these matches:
+    ...                 permit ACL 10.10.10.0 0.0.0.255
+    ...                 permit ACL 10.0.0.0 0.254.0.0
+    ...                 Info regarding filtering https://wiki.opendaylight.org/view/SXP:Beryllium:Developer_Guide
+    ${resp}    Get Bindings Master Database    127.0.0.5
+    Should Contain Binding      ${resp}    10    10.10.10.10/32    sxp
+    Should Contain Binding      ${resp}    10    10.10.10.0/24    sxp
+    Should Contain Binding      ${resp}    10    10.10.0.0/16    sxp
+    Should Contain Binding      ${resp}    10    10.0.0.0/8    sxp
+    Should Contain Binding      ${resp}    20    10.10.10.20/32    sxp
+    Should Not Contain Binding  ${resp}    20    10.10.20.0/24    sxp
+    Should Contain Binding      ${resp}    20    10.20.0.0/16    sxp
+    Should Not Contain Binding  ${resp}    20    20.0.0.0/8    sxp
+    Should Contain Binding      ${resp}    30    10.10.10.30/32    sxp
+    Should Contain Binding      ${resp}    30    10.10.30.0/24    sxp
+    Should Contain Binding      ${resp}    30    10.30.0.0/16    sxp
+    Should Contain Binding      ${resp}    30    30.0.0.0/8    sxp
+    Should Contain Binding      ${resp}    40    10.10.10.40/32    sxp
+    Should Not Contain Binding  ${resp}    40    10.10.40.0/24    sxp
+    Should Contain Binding      ${resp}    40    10.40.0.0/16    sxp
+    Should Not Contain Binding  ${resp}    40    40.0.0.0/8    sxp
+
+Check One Group 5-3
+    [Documentation]     Check if only bindings matching filter from node 5 and 3 are propagated to SXP-DB of other nodes
+    ...                 Database should contains only Bindings regarding to these matches:
+    ...                 permit SGT 30 ACL 10.10.10.0 0.0.0.255
+    ...                 permit SGT 50 ACL 10.0.0.0 0.254.0.0
+    ...                 Info regarding filtering https://wiki.opendaylight.org/view/SXP:Beryllium:Developer_Guide
+    ${resp}    Get Bindings Master Database    127.0.0.4
+    Should Contain Binding      ${resp}    10    10.10.10.10/32    sxp
+    Should Contain Binding      ${resp}    10    10.10.10.0/24    sxp
+    Should Contain Binding      ${resp}    10    10.10.0.0/16    sxp
+    Should Contain Binding      ${resp}    10    10.0.0.0/8    sxp
+    Should Contain Binding      ${resp}    30    10.10.10.30/32    sxp
+    Should Not Contain Binding  ${resp}    30    10.10.30.0/24    sxp
+    Should Not Contain Binding  ${resp}    30    10.30.0.0/16    sxp
+    Should Not Contain Binding  ${resp}    30    30.0.0.0/8    sxp
+    Should Not Contain Binding  ${resp}    50    10.10.10.50/32    sxp
+    Should Not Contain Binding  ${resp}    50    10.10.50.0/24    sxp
+    Should Contain Binding      ${resp}    50    10.50.0.0/16    sxp
+    Should Not Contain Binding  ${resp}    50    50.0.0.0/8    sxp
+
+Clean Nodes
+    Clean Connections    127.0.0.1
+    Clean Connections    127.0.0.2
+    Clean Connections    127.0.0.3
+    Clean Connections    127.0.0.4
+    Clean Connections    127.0.0.5
+    Clean Peer Groups    127.0.0.1
+    Clean Bindings       127.0.0.1
+    Clean Bindings       127.0.0.2
+    Clean Bindings       127.0.0.3
+    Clean Bindings       127.0.0.4
+    Clean Bindings       127.0.0.5