From 17e802a3ed58bb640da1346fd639709803d6b49d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20Mih=C3=A1lek?= Date: Fri, 2 Oct 2015 10:49:14 +0200 Subject: [PATCH] Added SXP filtering tests MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: Id627fc8b9c8480f4cf8563d88e7870f7ebd129cb Signed-off-by: Martin Mihálek --- csit/libraries/Sxp.py | 544 +++++++++++++++++- csit/libraries/SxpLib.robot | 90 ++- csit/scriptplans/sxp-filtering.txt | 2 + csit/suites/sxp/basic/030_Connectivity.robot | 6 - .../sxp/filtering/010_Inbound_Filtering.robot | 241 ++++++++ .../filtering/020_Outbound_Filtering.robot | 254 ++++++++ .../030_Inbound_Filtering_Discarding.robot | 239 ++++++++ .../filtering/22-sxp-controller-one-node.xml | 148 +++++ .../sxp/scripts/filtering_node_setup.sh | 6 + .../sxp/topology/010_Topology_Features.robot | 2 +- csit/testplans/sxp-filtering.txt | 3 + 11 files changed, 1503 insertions(+), 32 deletions(-) create mode 100644 csit/scriptplans/sxp-filtering.txt create mode 100644 csit/suites/sxp/filtering/010_Inbound_Filtering.robot create mode 100644 csit/suites/sxp/filtering/020_Outbound_Filtering.robot create mode 100644 csit/suites/sxp/filtering/030_Inbound_Filtering_Discarding.robot create mode 100644 csit/suites/sxp/filtering/22-sxp-controller-one-node.xml create mode 100644 csit/suites/sxp/scripts/filtering_node_setup.sh create mode 100644 csit/testplans/sxp-filtering.txt diff --git a/csit/libraries/Sxp.py b/csit/libraries/Sxp.py index 9701cbc794..93a51b85f4 100644 --- a/csit/libraries/Sxp.py +++ b/csit/libraries/Sxp.py @@ -4,15 +4,40 @@ from string import Template def mod(num, base): + """Gets modulo of number + + :param num: Number to be used + :type num: string + :param base: Base used + :type base: string + :returns: Int representing modulo of specified numbers. + + """ return int(num) % int(base) def get_ip_from_number(n): + """Generate string representing Ipv4 from specified number that is added number 2130706432 + + :param n: Number to be converted + :type n: int + :returns: String containing Ipv4. + + """ ip = IPAddress(2130706432 + n) return str(ip) def lower_version(ver1, ver2): + """Generate xml containing SGT mach data + + :param ver1: Version of SXP protocol for compare + :type ver1: string + :param ver2: Version of SXP protocol for compare + :type ver2: string + :returns: String containing lower from those two specified versions. + + """ v1 = int(ver1[-1:]) v2 = int(ver2[-1:]) if v1 <= v2: @@ -21,17 +46,279 @@ def lower_version(ver1, ver2): return ver2 -def parse_connections(input): - data = json.loads(input) +def get_filter_entry(seq, entry_type, sgt="", esgt="", acl="", eacl="", pl="", epl=""): + """Generate xml containing FilterEntry data + + :param seq: Sequence of entry + :type seq: string + :param entry_type: Type of entry (permit/deny) + :type entry_type: string + :param sgt: SGT matches to be added to entry + :type sgt: string + :param esgt: SGT ranges match to be added to entry + :type esgt: string + :param acl: ACL matches to be added to entry + :type acl: string + :param eacl: EACL matches to be added to entry + :type eacl: string + :param pl: PrefixList matches to be added to entry + :type pl: string + :param epl: ExtendedPrefixList matches to be added to entry + :type epl: string + :returns: String containing xml data for request + + """ + entries = "" + # Generate XML request containing combination of Matches of different types + if sgt: + args = sgt.split(',') + entries += add_sgt_matches_xml(args) + elif esgt: + args = esgt.split(',') + entries += add_sgt_range_xml(args[0], args[1]) + if pl: + entries += add_pl_entry_xml(pl) + elif epl: + args = epl.split(',') + entries += add_epl_entry_xml(args[0], args[1], args[2]) + if acl: + args = acl.split(',') + entries += add_acl_entry_xml(args[0], args[1]) + elif eacl: + args = eacl.split(',') + entries += add_eacl_entry_xml(args[0], args[1], args[2], args[3]) + # Wrap entries in ACL/PrefixList according to specified values + if pl or epl: + return add_pl_entry_default_xml(seq, entry_type, entries) + return add_acl_entry_default_xml(seq, entry_type, entries) + + +def add_peers(*args): + """Generate xml containing Peer mach data + + :param args: Peers data + :type args: dict + :returns: String containing xml data for request + + """ + templ = Template(''' + + $ip + ''') + peers = "" + for count, value in enumerate(args): + peers += templ.substitute({'ip': value}) + return peers + + +def add_sgt_matches_xml(sgt_entries): + """Generate xml containing SGT mach data + + :param sgt_entries: SGT matches + :type sgt_entries: string + :returns: String containing xml data for request + + """ + templ = Template(''' + $sgt''') + matches = "" + for sgt in sgt_entries: + matches += templ.substitute({'sgt': sgt}) + return matches + + +def add_sgt_range_xml(start, end): + """Generate xml containing SGT RangeMach data + + :param start: Start range of SGT + :type start: string + :param end: End range of SGT + :type end: string + :returns: String containing xml data for request + + """ + templ = Template(''' + $start + $end''') + match = templ.substitute({'start': start, 'end': end}) + return match + + +def add_acl_entry_default_xml(seq, entry_type, acl_entries): + """Generate xml containing AccessList data + + :param seq: Sequence of PrefixList entry + :type seq: string + :param entry_type: Entry type (permit/deny) + :type entry_type: string + :param acl_entries: XML data containing AccessList entries + :type acl_entries: string + :returns: String containing xml data for request + + """ + templ = Template(''' + + $entry_type + $seq$acl_entries + ''') + matches = templ.substitute( + {'seq': seq, 'entry_type': entry_type, 'acl_entries': acl_entries}) + return matches + + +def add_acl_entry_xml(ip, mask): + """Generate xml containing AccessList data + + :param ip: Ipv4/6 address + :type ip: string + :param mask: Ipv4/6 wildcard mask + :type mask: string + :returns: String containing xml data for request + + """ + templ = Template(''' + + $ip + $mask + ''') + return templ.substitute({'ip': ip, 'mask': mask}) + + +def add_eacl_entry_xml(ip, mask, amask, wmask): + """Generate xml containing ExtendedAccessList data + + :param ip: Ipv4/6 address + :type ip: string + :param mask: Ipv4/6 wildcard mask + :type mask: string + :param amask: Ipv4/6 address mask + :type amask: string + :param wmask: Ipv4/6 address wildcard mask + :type wmask: string + :returns: String containing xml data for request + + """ + templ = Template(''' + + $ip + $mask + + $amask + $wmask + + ''') + return templ.substitute({'ip': ip, 'mask': mask, 'amask': amask, 'wmask': wmask}) + + +def add_pl_entry_default_xml(seq, entry_type, pl_entries): + """Generate xml containing PrefixList data + + :param seq: Sequence of PrefixList entry + :type seq: string + :param entry_type: Entry type (permit/deny) + :type entry_type: string + :param pl_entries: XML data containing PrefixList entries + :type pl_entries: string + :returns: String containing xml data for request + + """ + templ = Template(''' + + $entry_type + $seq$pl_entries + ''') + return templ.substitute({'seq': seq, 'entry_type': entry_type, 'pl_entries': pl_entries}) + + +def add_pl_entry_xml(prefix): + """Generate xml containing PrefixList data + + :param prefix: Ipv4/6 prefix + :type prefix: string + :returns: String containing xml data for request + + """ + templ = Template(''' + + $prefix + ''') + return templ.substitute({'prefix': prefix}) + + +def add_epl_entry_xml(prefix, op, mask): + """Generate xml containing Extended PrefixList data + + :param prefix: Ipv4/6 prefix + :type prefix: string + :param op: PrefixList option (ge/le/eq) + :type op: string + :param mask: Ipv4/6 Mask + :type mask: string + :returns: String containing xml data for request + + """ + templ = Template(''' + + $prefix + + $op + $mask + + ''') + return templ.substitute({'prefix': prefix, 'mask': mask, 'op': op}) + + +def parse_peer_groups(groups_json): + """Parse JSON string into Array of PeerGroups + + :param groups_json: JSON containing PeerGroups + :type groups_json: string + :returns: Array containing PeerGroups. + + """ + data = json.loads(groups_json) + groups = data['output'] + output = [] + for group in groups.values(): + output += group + return output + + +def parse_connections(connections_json): + """Parse JSON string into Array of Connections + + :param connections_json: JSON containing Connections + :type connections_json: string + :returns: Array containing Connections. + + """ + data = json.loads(connections_json) connections = data['output']['connections'] output = [] - for list in connections.values(): - output = output + list + for connection in connections.values(): + output += connection return output -def find_connection(input, version, mode, ip, port, state): - for connection in parse_connections(input): +def find_connection(connections_json, version, mode, ip, port, state): + """Test if Connection with specified values is contained in JSON + + :param connections_json: JSON containing Connections + :type connections_json: string + :param version: Version of SXP protocol (version1/2/3/4) + :type version: string + :param mode: Mode of SXP peer (speaker/listener/both) + :type mode: string + :param ip: Ipv4/6 address of remote peer + :type ip: string + :param port: Port on with remote peer listens + :type port: string + :param state: State of connection (on/off/pendingOn/deleteHoldDown) + :type state: string + :returns: True if Connection with specified params was found, otherwise False. + + """ + for connection in parse_connections(connections_json): if (connection['peer-address'] == ip and connection['tcp-port'] == int(port) and connection['mode'] == mode and connection['version'] == version): if state == 'none': @@ -41,8 +328,17 @@ def find_connection(input, version, mode, ip, port, state): return False -def parse_prefix_groups(input, source_): - data = json.loads(input) +def parse_prefix_groups(prefix_groups_json, source_): + """Parse JSON string into Array of PrefixGroups + + :param prefix_groups_json: JSON containing PrefixGroups + :type prefix_groups_json: string + :param source_: Source of PrefixGroups (sxp/local) + :type source_: string + :returns: Array containing PrefixGroups. + + """ + data = json.loads(prefix_groups_json) bindings = data['sxp-node:master-database'] output = [] for binding in bindings.values(): @@ -53,9 +349,24 @@ def parse_prefix_groups(input, source_): return output -def find_binding(input, sgt, prefix, source_, action): +def find_binding(prefix_groups_json, sgt, prefix, source_, action): + """Test if Binding with specified values is contained in JSON + + :param prefix_groups_json: JSON containing Bindings and PrefixGroups + :type prefix_groups_json: string + :param sgt: Source Group Tag + :type sgt: string + :param prefix: Ipv4/6 prefix + :type prefix: string + :param source_: Source of binding (local/sxp) + :type source_: string + :param action: Action for binding (add/delete) + :type action: string + :returns: True if Binding with specified params was found, otherwise False. + + """ found = False - for prefixgroup in parse_prefix_groups(input, source_): + for prefixgroup in parse_prefix_groups(prefix_groups_json, source_): if prefixgroup['sgt'] == int(sgt): for binding in prefixgroup['binding']: if binding['ip-prefix'] == prefix and binding['action'] == action: @@ -63,10 +374,29 @@ def find_binding(input, sgt, prefix, source_, action): return found -def find_binding_with_peer_sequence(input, sgt, prefix, source_, action, node_id, peer_seq): +def find_binding_with_peer_sequence(prefix_groups_json, sgt, prefix, source_, action, node_id, peer_seq): + """Test if Binding with specified values is contained in JSON + + :param prefix_groups_json: JSON containing Bindings and PrefixGroups + :type prefix_groups_json: string + :param sgt: Source Group Tag + :type sgt: string + :param prefix: Ipv4/6 prefix + :type prefix: string + :param source_: Source of binding (local/sxp) + :type source_: string + :param action: Action for binding (add/delete) + :type action: string + :param node_id: NodeId of from where Binding came from + :type node_id: string + :param peer_seq: Hop of specified NodeId from where Binding came from + :type peer_seq: string + :returns: True if Binding with specified params was found, otherwise False. + + """ correct_sequence = False found_source = False - for prefixgroup in parse_prefix_groups(input, source_): + for prefixgroup in parse_prefix_groups(prefix_groups_json, source_): if prefixgroup['sgt'] == int(sgt): for binding in prefixgroup['binding']: if binding['ip-prefix'] == prefix and binding['action'] == action: @@ -80,6 +410,17 @@ def find_binding_with_peer_sequence(input, sgt, prefix, source_, action, node_id def add_entry_xml(sgt, prefix, ip): + """Generate xml for Add Bindings request + + :param sgt: Source Group Tag + :type sgt: string + :param prefix: Ipv4/6 prefix + :type prefix: string + :param ip: Ipv4 address of node + :type ip: string + :returns: String containing xml data for request + + """ templ = Template(''' $ip $sgt @@ -89,9 +430,26 @@ def add_entry_xml(sgt, prefix, ip): return data -def add_connection_xml(version, mode, ip, port, ip_, password_): +def add_connection_xml(version, mode, ip, port, node, password_): + """Generate xml for Add Connection request + + :param version: Version of SXP protocol (version1/2/3/4) + :type version: string + :param mode: Mode of SXP peer (speaker/listener/both) + :type mode: string + :param ip: Ipv4/6 address of remote peer + :type ip: string + :param port: Port on with remote peer listens + :type port: string + :param node: Ipv4 address of node + :type node: string + :param password_: Password type (none/default) + :type password_: string + :returns: String containing xml data for request + + """ templ = Template(''' - $ip_ + $node $ip @@ -110,11 +468,22 @@ def add_connection_xml(version, mode, ip, port, ip_, password_): ''') data = templ.substitute( - {'ip': ip, 'port': port, 'mode': mode, 'version': version, 'ip_': ip_, 'password_': password_}) + {'ip': ip, 'port': port, 'mode': mode, 'version': version, 'node': node, 'password_': password_}) return data def delete_connections_xml(address, port, node): + """Generate xml for Delete Connection request + + :param address: Ipv4/6 address of remote peer + :type address: string + :param port: Port on with remote peer listens + :type port: string + :param node: Ipv4 address of node + :type node: string + :returns: String containing xml data for request + + """ templ = Template(''' $node $address @@ -125,6 +494,21 @@ def delete_connections_xml(address, port, node): def update_binding_xml(sgt0, prefix0, sgt1, prefix1, ip): + """Generate xml for Update Binding request + + :param sgt0: Original Source Group Tag + :type sgt0: string + :param prefix0: Original Ipv4/6 prefix + :type prefix0: string + :param sgt1: New Source Group Tag + :type sgt1: string + :param prefix1: New Ipv4/6 prefix + :type prefix1: string + :param ip: Ipv4 address of node + :type ip: string + :returns: String containing xml data for request + + """ templ = Template(''' $ip @@ -142,6 +526,17 @@ def update_binding_xml(sgt0, prefix0, sgt1, prefix1, ip): def delete_binding_xml(sgt, prefix, ip): + """Generate xml for Delete Binding request + + :param sgt: Source Group Tag + :type sgt: string + :param prefix: Ipv4/6 prefix + :type prefix: string + :param ip: Ipv4 address of node + :type ip: string + :returns: String containing xml data for request + + """ templ = Template(''' $ip $sgt @@ -151,7 +546,119 @@ def delete_binding_xml(sgt, prefix, ip): return data +def add_peer_group_xml(name, peers, ip): + """Generate xml for Add PeerGroups request + + :param name: Name of PeerGroup + :type name: string + :param peers: XML formatted peers that will be added to group + :type peers: string + :param ip: Ipv4 address of node + :type ip: string + :returns: String containing xml data for request + + """ + templ = Template(''' + $ip + + $name + $peers + +''') + data = templ.substitute({'name': name, 'peers': peers, 'ip': ip}) + return data + + +def delete_peer_group_xml(name, ip): + """Generate xml for Delete PeerGroup request + + :param name: Name of PeerGroup + :type name: string + :param ip: Ipv4 address of node + :type ip: string + :returns: String containing xml data for request + + """ + templ = Template(''' + $ip + $name +''') + data = templ.substitute({'name': name, 'ip': ip}) + return data + + +def get_peer_groups_from_node_xml(ip): + """Generate xml for Get PeerGroups request + + :param ip: Ipv4 address of node + :type ip: string + :returns: String containing xml data for request + + """ + templ = Template(''' + $ip +''') + data = templ.substitute({'ip': ip}) + return data + + +def add_filter_xml(group, filter_type, entries, ip): + """Generate xml for Add Filter request + + :param group: Name of group containing filter + :type group: string + :param filter_type: Type of filter + :type filter_type: string + :param entries: XML formatted entries that will be added in filter + :type entries: string + :param ip: Ipv4 address of node + :type ip: string + :returns: String containing xml data for request + + + """ + templ = Template(''' + $ip + $group + + $filter_type$entries + +''') + data = templ.substitute( + {'group': group, 'filter_type': filter_type, 'ip': ip, 'entries': entries}) + return data + + +def delete_filter_xml(group, filter_type, ip): + """Generate xml for Delete Filter request + + :param group: Name of group containing filter + :type group: string + :param filter_type: Type of filter + :type filter_type: string + :param ip: Ipv4 address of node + :type ip: string + :returns: String containing xml data for request + + """ + templ = Template(''' + $ip + $group + $filter_type +''') + data = templ.substitute( + {'group': group, 'filter_type': filter_type, 'ip': ip}) + return data + + def get_connections_from_node_xml(ip): + """Generate xml for Get Connections request + + :param ip: Ipv4 address of node + :type ip: string + :returns: String containing xml data for request + + """ templ = Template(''' $ip ''') @@ -160,6 +667,13 @@ def get_connections_from_node_xml(ip): def get_bindings_from_node_xml(ip): + """Generate xml for Get Bindings request + + :param ip: Ipv4 address of node + :type ip: string + :returns: String containing xml data for request + + """ templ = Template(''' $ip ''') diff --git a/csit/libraries/SxpLib.robot b/csit/libraries/SxpLib.robot index 20d68315e1..193613ab13 100644 --- a/csit/libraries/SxpLib.robot +++ b/csit/libraries/SxpLib.robot @@ -1,5 +1,6 @@ *** Settings *** Documentation Library containing Keywords used for SXP testing +Library Collections Library RequestsLibrary Library SSHLibrary Library String @@ -14,17 +15,18 @@ ${REST_CONTEXT} /restconf/operations/sxp-controller Add Connection [Arguments] ${version} ${mode} ${ip} ${port} ${node}=127.0.0.1 ${password}=none ... ${session}=session - [Documentation] Add connection via RCP to node + [Documentation] Add connection via RPC to node ${DATA} Add Connection Xml ${version} ${mode} ${ip} ${port} ${node} ... ${password} - ${resp} RequestsLibrary.Post ${session} ${REST_CONTEXT}:add-connection data=${DATA} headers=${HEADERS_XML} + ${resp} Post Request ${session} ${REST_CONTEXT}:add-connection data=${DATA} headers=${HEADERS_XML} + LOG ${resp} Should be Equal As Strings ${resp.status_code} 200 Get Connections [Arguments] ${node}=127.0.0.1 ${session}=session - [Documentation] Gets all connections vie RPC from node + [Documentation] Gets all connections via RPC from node ${DATA} Get Connections From Node Xml ${node} - ${resp} RequestsLibrary.Post ${session} ${REST_CONTEXT}:get-connections data=${DATA} headers=${HEADERS_XML} + ${resp} Post Request ${session} ${REST_CONTEXT}:get-connections data=${DATA} headers=${HEADERS_XML} Should be Equal As Strings ${resp.status_code} 200 [Return] ${resp.content} @@ -32,7 +34,7 @@ Delete Connections [Arguments] ${ip} ${port} ${node}=127.0.0.1 ${session}=session [Documentation] Delete connection via RPC from node ${DATA} Delete Connections Xml ${ip} ${port} ${node} - ${resp} RequestsLibrary.Post ${session} ${REST_CONTEXT}:delete-connection data=${DATA} headers=${HEADERS_XML} + ${resp} Post Request ${session} ${REST_CONTEXT}:delete-connection data=${DATA} headers=${HEADERS_XML} Should be Equal As Strings ${resp.status_code} 200 Clean Connections @@ -43,18 +45,25 @@ Clean Connections : FOR ${connection} IN @{connections} \ delete connections ${connection['peer-address']} ${connection['tcp-port']} ${node} ${session} +Verify Connection + [Arguments] ${version} ${mode} ${ip} ${port}=64999 ${node}=127.0.0.1 ${state}=on + [Documentation] Verify that connection is ON + ${resp} Get Connections ${node} + Should Contain Connection ${resp} ${ip} ${port} ${mode} ${version} ${state} + Add Binding [Arguments] ${sgt} ${prefix} ${node}=127.0.0.1 ${session}=session [Documentation] Add binding via RPC to Master DB of node ${DATA} Add Entry Xml ${sgt} ${prefix} ${node} - ${resp} RequestsLibrary.Post ${session} ${REST_CONTEXT}:add-entry data=${DATA} headers=${HEADERS_XML} + ${resp} Post Request ${session} ${REST_CONTEXT}:add-entry data=${DATA} headers=${HEADERS_XML} + LOG ${resp.content} Should be Equal As Strings ${resp.status_code} 200 Get Bindings [Arguments] ${node}=127.0.0.1 ${session}=session [Documentation] Gets all binding via RPC from Master DB of node ${DATA} Get Bindings From Node Xml ${node} - ${resp} RequestsLibrary.Post ${session} ${REST_CONTEXT}:get-node-bindings data=${DATA} headers=${HEADERS_XML} + ${resp} Post Request ${session} ${REST_CONTEXT}:get-node-bindings data=${DATA} headers=${HEADERS_XML} Should be Equal As Strings ${resp.status_code} 200 [Return] ${resp.content} @@ -75,7 +84,7 @@ Clean Binding Get Bindings Master Database [Arguments] ${node}=127.0.0.1 ${session}=session [Documentation] Gets content of Master DB from node - ${resp} RequestsLibrary.Get ${session} /restconf/operational/network-topology:network-topology/topology/sxp/node/${node}/master-database/ headers=${HEADERS_XML} + ${resp} Get Request ${session} /restconf/operational/network-topology:network-topology/topology/sxp/node/${node}/master-database/ headers=${HEADERS_XML} Should be Equal As Strings ${resp.status_code} 200 [Return] ${resp.content} @@ -83,14 +92,59 @@ Update Binding [Arguments] ${sgtOld} ${prefixOld} ${sgtNew} ${prefixNew} ${node}=127.0.0.1 ${session}=session [Documentation] Updates value of binding via RPC in Master DB of node ${DATA} Update Binding Xml ${sgtOld} ${prefixOld} ${sgtNew} ${prefixNew} ${node} - ${resp} RequestsLibrary.Post ${session} ${REST_CONTEXT}:update-entry data=${DATA} headers=${HEADERS_XML} + ${resp} Post Request ${session} ${REST_CONTEXT}:update-entry data=${DATA} headers=${HEADERS_XML} Should be Equal As Strings ${resp.status_code} 200 Delete Binding [Arguments] ${sgt} ${prefix} ${node}=127.0.0.1 ${session}=session [Documentation] Delete binding via RPC from Master DB of node ${DATA} Delete Binding Xml ${sgt} ${prefix} ${node} - ${resp} RequestsLibrary.Post ${session} ${REST_CONTEXT}:delete-entry data=${DATA} headers=${HEADERS_XML} + ${resp} Post Request ${session} ${REST_CONTEXT}:delete-entry data=${DATA} headers=${HEADERS_XML} + Should be Equal As Strings ${resp.status_code} 200 + +Add PeerGroup + [Documentation] Adds new PeerGroup via RPC to Node + [Arguments] ${name} ${peers}= ${node}=127.0.0.1 ${session}=session + ${DATA} Add Peer Group Xml ${name} ${peers} ${node} + LOG ${DATA} + ${resp} Post Request ${session} ${REST_CONTEXT}:add-peer-group data=${DATA} headers=${HEADERS_XML} + Should be Equal As Strings ${resp.status_code} 200 + +Delete Peer Group + [Arguments] ${name} ${node}=127.0.0.1 ${session}=session + [Documentation] Delete PeerGroup via RPC from Node + ${DATA} Delete Peer Group Xml ${name} ${node} + ${resp} Post Request ${session} ${REST_CONTEXT}:delete-peer-group data=${DATA} headers=${HEADERS_XML} + Should be Equal As Strings ${resp.status_code} 200 + +Get Peer Groups + [Arguments] ${node}=127.0.0.1 ${session}=session + [Documentation] Gets all PeerGroups via RPC from node + ${DATA} Get Peer Groups From Node Xml ${node} + ${resp} Post Request ${session} ${REST_CONTEXT}:get-peer-groups data=${DATA} headers=${HEADERS_XML} + Should be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.content} + +Clean Peer Groups + [Arguments] ${node}=127.0.0.1 ${session}=session + [Documentation] Delete all PeerGroups via RPC from node + ${resp} Get Peer Groups ${node} ${session} + @{prefixes} Parse Peer Groups ${resp} + : FOR ${group} IN @{prefixes} + \ Delete Peer Group ${group['name']} ${node} ${session} + +Add Filter + [Arguments] ${name} ${type} ${entries} ${node}=127.0.0.1 ${session}=session + [Documentation] Add Filter via RPC from Node + ${DATA} Add Filter Xml ${name} ${type} ${entries} ${node} + ${resp} Post Request ${session} ${REST_CONTEXT}:add-filter data=${DATA} headers=${HEADERS_XML} + Should be Equal As Strings ${resp.status_code} 200 + +Delete Filter + [Arguments] ${name} ${type} ${node}=127.0.0.1 ${session}=session + [Documentation] Delete Filter via RPC from Node + ${DATA} Delete Filter Xml ${name} ${type} ${node} + ${resp} Post Request ${session} ${REST_CONTEXT}:delete-filter data=${DATA} headers=${HEADERS_XML} Should be Equal As Strings ${resp.status_code} 200 Should Contain Binding @@ -135,6 +189,22 @@ Should Not Contain Connection ... ${state} Should Not Be True ${out} Shouldn't have ${ip}:${port} ${mode} ${version} +Setup Topology Complex + [Arguments] ${version}=version4 ${PASSWORD}=none + : FOR ${node} IN RANGE 2 6 + \ 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 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 SXP Environment [Documentation] Create session to Controller Verify Feature Is Installed odl-sxp-all diff --git a/csit/scriptplans/sxp-filtering.txt b/csit/scriptplans/sxp-filtering.txt new file mode 100644 index 0000000000..aa220c1bbf --- /dev/null +++ b/csit/scriptplans/sxp-filtering.txt @@ -0,0 +1,2 @@ +# Place the scripts in run order: +integration/test/csit/suites/sxp/scripts/filtering_node_setup.sh diff --git a/csit/suites/sxp/basic/030_Connectivity.robot b/csit/suites/sxp/basic/030_Connectivity.robot index 24c7f5f83b..a4074f71de 100644 --- a/csit/suites/sxp/basic/030_Connectivity.robot +++ b/csit/suites/sxp/basic/030_Connectivity.robot @@ -98,12 +98,6 @@ Test Both ... 64999 127.0.0.3 Log OK ${r_version}:both ${version}:both -Verify Connection - [Arguments] ${version} ${mode} ${ip} ${port} ${node} ${state}=on - [Documentation] Verify that connection is ON - ${resp} Get Connections ${node} - Should Contain Connection ${resp} ${ip} ${port} ${mode} ${version} ${state} - Clean Nodes Clean Connections 127.0.0.1 Clean Connections 127.0.0.2 diff --git a/csit/suites/sxp/filtering/010_Inbound_Filtering.robot b/csit/suites/sxp/filtering/010_Inbound_Filtering.robot new file mode 100644 index 0000000000..5a3ed58450 --- /dev/null +++ b/csit/suites/sxp/filtering/010_Inbound_Filtering.robot @@ -0,0 +1,241 @@ +*** Settings *** +Documentation Test suite to verify Inbound filtering functionality +Suite Setup Setup SXP Environment +Suite Teardown Clean SXP Environment +Test Setup Setup Topology Complex +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 + ${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 ${entries} + Wait Until Keyword Succeeds 4 1 Check One Group 4-2 + Delete Filter GROUP inbound + ${entries} Get Filter Entry 10 permit acl=10.0.0.0,0.255.255.255 + Add Filter GROUP inbound ${entries} + Wait Until Keyword Succeeds 4 1 Check Two Group 4-2 + Delete Filter GROUP inbound + ${entries} Get Filter Entry 10 deny acl=10.0.0.0,0.255.255.255 + Add Filter GROUP inbound ${entries} + Wait Until Keyword Succeeds 4 1 Check Three Group 4-2 + +Access List Sgt Filtering + [Documentation] Test ACL and SGT filter behaviour during filter update + ${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 ${entries} + Wait Until Keyword Succeeds 4 1 Check One Group 5-3 + Delete Filter GROUP inbound + ${entries} Get Filter Entry 10 permit esgt=20,40 acl=10.0.0.0,0.255.255.255 + Add Filter GROUP inbound ${entries} + Wait Until Keyword Succeeds 4 1 Check Two Group 5-3 + +Prefix List Filtering + [Documentation] Test Prefix List filter behaviour during filter update + ${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 ${entries} + Wait Until Keyword Succeeds 4 1 Check One Group 4-2 + Delete Filter GROUP inbound + ${entries} Get Filter Entry 10 permit pl=10.0.0.0/8 + Add Filter GROUP inbound ${entries} + Wait Until Keyword Succeeds 4 1 Check Two Group 4-2 + Delete Filter GROUP inbound + ${entries} Get Filter Entry 10 deny pl=10.0.0.0/8 + Add Filter GROUP inbound ${entries} + Wait Until Keyword Succeeds 4 1 Check Three Group 4-2 + +Prefix List Sgt Filtering + [Documentation] Test Prefix List and SGT filter behaviour during filter update + ${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 ${entries} + Wait Until Keyword Succeeds 4 1 Check One Group 5-3 + Delete Filter GROUP inbound + ${entries} Get Filter Entry 10 permit esgt=20,40 pl=10.0.0.0/8 + Add Filter GROUP inbound ${entries} + Wait Until Keyword Succeeds 4 1 Check Two Group 5-3 + + +*** Keywords *** +Check One Group 4-2 + [Documentation] Check if only bindings matching filter from node 4 and 2 are propagated to SXP-DB 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 + + ${resp} Get Bindings Master Database 127.0.0.3 + Should Contain Binding ${resp} 50 10.10.10.50/32 sxp + Should Contain Binding ${resp} 50 10.10.50.0/24 sxp + Should Contain Binding ${resp} 50 10.50.0.0/16 sxp + Should Contain Binding ${resp} 50 50.0.0.0/8 sxp + +Check Two 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.0.0.0 0.255.255.255 + ... 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 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 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 + + ${resp} Get Bindings Master Database 127.0.0.3 + Should Contain Binding ${resp} 50 10.10.10.50/32 sxp + Should Contain Binding ${resp} 50 10.10.50.0/24 sxp + Should Contain Binding ${resp} 50 10.50.0.0/16 sxp + Should Contain Binding ${resp} 50 50.0.0.0/8 sxp + +Check Three 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: + ... deny ACL 10.0.0.0 0.255.255.255 + ... 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 Not Contain Binding ${resp} 20 10.10.10.20/32 sxp + Should Not Contain Binding ${resp} 20 10.10.20.0/24 sxp + Should Not 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 Not Contain Binding ${resp} 40 10.10.10.40/32 sxp + Should Not Contain Binding ${resp} 40 10.10.40.0/24 sxp + Should Not 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} 20 10.10.10.20/32 sxp + Should Contain Binding ${resp} 20 10.10.20.0/24 sxp + Should Contain Binding ${resp} 20 10.20.0.0/16 sxp + Should Contain Binding ${resp} 20 20.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 + + ${resp} Get Bindings Master Database 127.0.0.2 + Should Contain Binding ${resp} 40 10.10.10.40/32 sxp + Should Contain Binding ${resp} 40 10.10.40.0/24 sxp + Should Contain Binding ${resp} 40 10.40.0.0/16 sxp + Should Contain Binding ${resp} 40 40.0.0.0/8 sxp + + +Check Two 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 ESGT 20,40 ACL 10.0.0.0 0.255.255.255 + ... 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} 20 10.10.10.20/32 sxp + Should Contain Binding ${resp} 20 10.10.20.0/24 sxp + Should Contain Binding ${resp} 20 10.20.0.0/16 sxp + Should 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 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 Not Contain Binding ${resp} 50 10.50.0.0/16 sxp + Should Not Contain Binding ${resp} 50 50.0.0.0/8 sxp + + ${resp} Get Bindings Master Database 127.0.0.2 + Should Contain Binding ${resp} 40 10.10.10.40/32 sxp + Should Contain Binding ${resp} 40 10.10.40.0/24 sxp + Should Contain Binding ${resp} 40 10.40.0.0/16 sxp + Should Contain Binding ${resp} 40 40.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 diff --git a/csit/suites/sxp/filtering/020_Outbound_Filtering.robot b/csit/suites/sxp/filtering/020_Outbound_Filtering.robot new file mode 100644 index 0000000000..dc89a8f990 --- /dev/null +++ b/csit/suites/sxp/filtering/020_Outbound_Filtering.robot @@ -0,0 +1,254 @@ +*** Settings *** +Documentation Test suite to verify Outbound filtering functionality +Suite Setup Setup SXP Environment +Suite Teardown Clean SXP Environment +Test Setup Setup Nodes +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 + ${peers} Add Peers 127.0.0.4 127.0.0.5 + Add PeerGroup GROUP ${peers} + ${entry1} Get Filter Entry 10 permit acl=10.10.10.0,0.0.0.255 + ${entry2} Get Filter Entry 20 deny acl=10.10.0.0,0.0.255.0 + ${entry3} Get Filter Entry 30 permit acl=10.0.0.0,0.255.255.0 + ${entries} Combine Strings ${entry1} ${entry2} ${entry3} + Add Filter GROUP outbound ${entries} + Wait Until Keyword Succeeds 4 1 Check One Group 4-5 + Delete Filter GROUP outbound + ${entry1} Get Filter Entry 10 permit acl=10.20.0.0,0.0.255.255 + ${entry2} Get Filter Entry 20 permit acl=10.10.0.0,0.0.255.0 + ${entries} Combine Strings ${entry1} ${entry2} + Add Filter GROUP outbound ${entries} + Wait Until Keyword Succeeds 4 1 Check Two Group 4-5 + +Access List Sgt Filtering + [Documentation] Test ACL and SGT filter behaviour during filter update + ${peers} Add Peers 127.0.0.2 127.0.0.5 + Add PeerGroup GROUP ${peers} + ${entry1} Get Filter Entry 10 deny acl=10.10.20.0,0.0.0.255 + ${entry2} Get Filter Entry 20 permit acl=10.10.0.0,0.0.255.0 + ${entry3} Get Filter Entry 30 permit sgt=30 acl=10.10.10.0,0.0.0.255 + ${entries} Combine Strings ${entry1} ${entry2} ${entry3} + Add Filter GROUP outbound ${entries} + Wait Until Keyword Succeeds 4 1 Check One Group 2-5 + Delete Filter GROUP outbound + ${entries} Get Filter Entry 10 permit esgt=20,40 acl=10.10.0.0,0.0.255.255 + Add Filter GROUP outbound ${entries} + Wait Until Keyword Succeeds 4 1 Check Two Group 2-5 + +Prefix List Filtering + [Documentation] Test Prefix List filter behaviour during filter update + ${peers} Add Peers 127.0.0.4 127.0.0.5 + Add PeerGroup GROUP ${peers} + ${entry1} Get Filter Entry 10 permit pl=10.10.10.0/24 + ${entry2} Get Filter Entry 20 deny epl=10.10.0.0/16,le,24 + ${entry3} Get Filter Entry 30 permit epl=10.0.0.0/8,le,24 + ${entries} Combine Strings ${entry1} ${entry2} ${entry3} + Add Filter GROUP outbound ${entries} + Wait Until Keyword Succeeds 4 1 Check One Group 4-5 + Delete Filter GROUP outbound + ${entry1} Get Filter Entry 10 permit pl=10.20.0.0/16 + ${entry2} Get Filter Entry 20 permit epl=10.10.0.0/16,le,24 + ${entries} Combine Strings ${entry1} ${entry2} + Add Filter GROUP outbound ${entries} + Wait Until Keyword Succeeds 4 1 Check Two Group 4-5 + +Prefix List Sgt Filtering + [Documentation] Test Prefix List and SGT filter behaviour during filter update + ${peers} Add Peers 127.0.0.2 127.0.0.5 + Add PeerGroup GROUP ${peers} + ${entry1} Get Filter Entry 10 deny pl=10.10.20.0/24 + ${entry2} Get Filter Entry 20 permit epl=10.10.0.0/16,le,24 + ${entry3} Get Filter Entry 30 permit sgt=30 pl=10.10.10.0/24 + ${entries} Combine Strings ${entry1} ${entry2} ${entry3} + Add Filter GROUP outbound ${entries} + Wait Until Keyword Succeeds 4 1 Check One Group 2-5 + Delete Filter GROUP outbound + ${entries} Get Filter Entry 10 permit esgt=20,40 pl=10.10.0.0/16 + Add Filter GROUP outbound ${entries} + Wait Until Keyword Succeeds 4 1 Check Two Group 2-5 + +*** Keywords *** +Setup Nodes + [Arguments] ${version}=version4 ${password}=none + : FOR ${node} IN RANGE 1 5 + \ 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.1 64999 127.0.0.2 ${password} + Add Connection ${version} both 127.0.0.2 64999 127.0.0.1 ${password} + Wait Until Keyword Succeeds 15 4 Verify Connection ${version} both 127.0.0.2 + 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} both 127.0.0.1 64999 127.0.0.4 ${password} + Add Connection ${version} both 127.0.0.4 64999 127.0.0.1 ${password} + Wait Until Keyword Succeeds 15 4 Verify Connection ${version} both 127.0.0.4 + Add Connection ${version} listener 127.0.0.1 64999 127.0.0.5 ${password} + Add Connection ${version} speaker 127.0.0.5 64999 127.0.0.1 ${password} + Wait Until Keyword Succeeds 15 4 Verify Connection ${version} speaker 127.0.0.5 + +Check One Group 4-5 + [Documentation] Check if only bindings matching filter nodes 4 and 5 + ... Database should contains only Bindings regarding to these matches: + ... permit ACL 10.10.10.0 0.0.0.255 + ... deny ACL 10.10.0.0 0.0.255.0 + ... permit ACL 10.0.0.0 0.255.255.0 + ... Info regarding filtering https://wiki.opendaylight.org/view/SXP:Beryllium:Developer_Guide + : FOR ${node} IN RANGE 4 6 + \ ${resp} Get Bindings Master Database 127.0.0.${node} + \ Should Contain Binding ${resp} 10 10.10.10.10/32 sxp + \ Should Contain Binding ${resp} 10 10.10.10.0/24 sxp + \ Should Not 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 Not Contain Binding ${resp} 30 10.10.30.0/24 sxp + \ Should Contain Binding ${resp} 30 10.30.0.0/16 sxp + \ Should Not Contain Binding ${resp} 30 30.0.0.0/8 sxp + ${resp} Get Bindings Master Database 127.0.0.2 + 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 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 Contain Binding ${resp} 40 10.10.40.0/24 sxp + Should Contain Binding ${resp} 40 10.40.0.0/16 sxp + Should Contain Binding ${resp} 40 40.0.0.0/8 sxp + +Check Two Group 4-5 + [Documentation] Check if only bindings matching filter nodes 4 and 5 + ... Database should contains only Bindings regarding to these matches: + ... permit ACL 10.20.0.0 0.0.255.255 + ... permit ACL 10.10.0.0 0.0.255.0 + ... Info regarding filtering https://wiki.opendaylight.org/view/SXP:Beryllium:Developer_Guide + : FOR ${node} IN RANGE 4 6 + \ ${resp} Get Bindings Master Database 127.0.0.${node} + \ Should Not 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 Not Contain Binding ${resp} 10 10.0.0.0/8 sxp + \ Should Not Contain Binding ${resp} 20 10.10.10.20/32 sxp + \ Should 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 Not Contain Binding ${resp} 30 10.10.10.30/32 sxp + \ Should 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 + ${resp} Get Bindings Master Database 127.0.0.2 + 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 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 Contain Binding ${resp} 40 10.10.40.0/24 sxp + Should Contain Binding ${resp} 40 10.40.0.0/16 sxp + Should Contain Binding ${resp} 40 40.0.0.0/8 sxp + +Check One Group 2-5 + [Documentation] Check if only bindings matching filter nodes 2 and 5 + ... Database should contains only Bindings regarding to these matches: + ... deny ACL 10.10.20.0 0.0.0.255 + ... permit ACL 10.10.0.0 0.0.255.0 + ... permit SGT 30 ACL 10.10.10.0 0.0.0.255 + ... Info regarding filtering https://wiki.opendaylight.org/view/SXP:Beryllium:Developer_Guide + @{list} Create List 127.0.0.2 127.0.0.5 + : FOR ${node} IN @{list} + \ ${resp} Get Bindings Master Database ${node} + \ Should Not 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 Not Contain Binding ${resp} 10 10.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 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} 40 10.10.10.40/32 sxp + \ Should Contain Binding ${resp} 40 10.10.40.0/24 sxp + \ Should Not Contain Binding ${resp} 40 10.40.0.0/16 sxp + \ Should Not Contain Binding ${resp} 40 40.0.0.0/8 sxp + ${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} 20 10.10.10.20/32 sxp + Should Contain Binding ${resp} 20 10.10.20.0/24 sxp + Should Contain Binding ${resp} 20 10.20.0.0/16 sxp + Should 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 + +Check Two Group 2-5 + [Documentation] Check if only bindings matching filter nodes 2 and 5 + ... Database should contains only Bindings regarding to these matches: + ... permit SGT 20,40 ACL 10.10.0.0 0.0.255.255 + ... Info regarding filtering https://wiki.opendaylight.org/view/SXP:Beryllium:Developer_Guide + @{list} Create List 127.0.0.2 127.0.0.5 + : FOR ${node} IN @{list} + \ ${resp} Get Bindings Master Database ${node} + \ Should Not Contain Binding ${resp} 10 10.10.10.10/32 sxp + \ Should Not Contain Binding ${resp} 10 10.10.10.0/24 sxp + \ Should Not Contain Binding ${resp} 10 10.10.0.0/16 sxp + \ Should Not Contain Binding ${resp} 10 10.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 Not Contain Binding ${resp} 30 10.30.0.0/16 sxp + \ Should Not Contain Binding ${resp} 30 30.0.0.0/8 sxp + \ Should Contain Binding ${resp} 40 10.10.10.40/32 sxp + \ Should Contain Binding ${resp} 40 10.10.40.0/24 sxp + \ Should Not Contain Binding ${resp} 40 10.40.0.0/16 sxp + \ Should Not Contain Binding ${resp} 40 40.0.0.0/8 sxp + ${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} 20 10.10.10.20/32 sxp + Should Contain Binding ${resp} 20 10.10.20.0/24 sxp + Should Contain Binding ${resp} 20 10.20.0.0/16 sxp + Should 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 + +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 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 index 0000000000..37d37b1f81 --- /dev/null +++ b/csit/suites/sxp/filtering/030_Inbound_Filtering_Discarding.robot @@ -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 diff --git a/csit/suites/sxp/filtering/22-sxp-controller-one-node.xml b/csit/suites/sxp/filtering/22-sxp-controller-one-node.xml new file mode 100644 index 0000000000..8510ca0b2d --- /dev/null +++ b/csit/suites/sxp/filtering/22-sxp-controller-one-node.xml @@ -0,0 +1,148 @@ + + + + urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&revision=2013-10-28 + urn:opendaylight:params:xml:ns:yang:controller:sxp:controller:conf?module=sxp-controller-conf&revision=2014-10-02 + + + + + + + binding:sxp-controller + + sxp-controller + + + + binding:binding-broker-osgi-registry + + binding-osgi-broker + + + + + binding:binding-rpc-registry + + binding-rpc-broker + + + + + binding:binding-async-data-broker + + binding-data-broker + + + + + true + 127.0.0.1 + 127.0.0.1 + 64999 + version4 + + kavabonga + + 0 + ODL SXP Controller + + + 5 + 120 + 30 + 90 + 90 + 180 + + + + true + 127.0.0.2 + 127.0.0.2 + 64999 + version4 + + kavabonga + + 0 + ODL SXP Controller + + + 5 + 120 + 30 + 90 + 90 + 180 + + + + true + 127.0.0.3 + 127.0.0.3 + 64999 + version4 + + kavabonga + + 0 + ODL SXP Controller + + + 5 + 120 + 30 + 90 + 90 + 180 + + + + true + 127.0.0.4 + 127.0.0.4 + 64999 + version4 + + kavabonga + + 0 + ODL SXP Controller + + + 5 + 120 + 30 + 90 + 90 + 180 + + + + true + 127.0.0.5 + 127.0.0.5 + 64999 + version4 + + kavabonga + + 0 + ODL SXP Controller + + + 5 + 120 + 30 + 90 + 90 + 180 + + + + + + + + diff --git a/csit/suites/sxp/scripts/filtering_node_setup.sh b/csit/suites/sxp/scripts/filtering_node_setup.sh new file mode 100644 index 0000000000..5acf754c8c --- /dev/null +++ b/csit/suites/sxp/scripts/filtering_node_setup.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +echo "Setup config to $ODL_SYSTEM_IP}" +ssh ${ODL_SYSTEM_IP} "mkdir -p /tmp/${BUNDLEFOLDER}/etc/opendaylight/karaf/" + +scp ${WORKSPACE}/test/csit/suites/sxp/filtering/22-sxp-controller-one-node.xml ${ODL_SYSTEM_IP}:/tmp/${BUNDLEFOLDER}/etc/opendaylight/karaf/ diff --git a/csit/suites/sxp/topology/010_Topology_Features.robot b/csit/suites/sxp/topology/010_Topology_Features.robot index d0b3a63980..ac52b4080c 100644 --- a/csit/suites/sxp/topology/010_Topology_Features.robot +++ b/csit/suites/sxp/topology/010_Topology_Features.robot @@ -1,5 +1,5 @@ *** Settings *** -Documentation Test suite to verify Bahaviour in different topologies +Documentation Test suite to verify Behaviour in different topologies Suite Setup Setup SXP Environment Suite Teardown Clean SXP Environment Test Setup Clean Nodes diff --git a/csit/testplans/sxp-filtering.txt b/csit/testplans/sxp-filtering.txt new file mode 100644 index 0000000000..173148331a --- /dev/null +++ b/csit/testplans/sxp-filtering.txt @@ -0,0 +1,3 @@ +# Place the suites in run order: +integration/test/csit/suites/sxp/filtering/ + -- 2.36.6