]> git.proxmox.com Git - mirror_frr.git/blobdiff - tests/topotests/bgp_conditional_advertisement/test_bgp_conditional_advertisement.py
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / tests / topotests / bgp_conditional_advertisement / test_bgp_conditional_advertisement.py
index 1097be3d709c62de523796c1a39a41d78439cf2f..0128c883491699c560de3f78e49919edc60f0602 100644 (file)
@@ -1,4 +1,5 @@
 #!/usr/bin/env python
+# SPDX-License-Identifier: ISC
 
 #
 # test_bgp_conditional_advertisement.py
@@ -7,20 +8,6 @@
 # Samsung R&D Institute India - Bangalore.
 # Madhurilatha Kuruganti
 #
-# Permission to use, copy, modify, and/or distribute this software
-# for any purpose with or without fee is hereby granted, provided
-# that the above copyright notice and this permission notice appear
-# in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND NETDEF DISCLAIMS ALL WARRANTIES
-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NETDEF BE LIABLE FOR
-# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
-# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
-# OF THIS SOFTWARE.
-#
 
 """
 Test BGP conditional advertisement functionality.
@@ -43,10 +30,15 @@ TC21: exist-map routes present in R2's BGP table.
       advertise-map routes present in R2's BGP table are advertised to R3.
 TC22: exist-map routes not present in R2's BGP table
       advertise-map routes present in R2's BGP table are withdrawn from R3.
+TC23: advertise-map with exist-map configuration is removed from a peer
+      send normal BGP update to advertise previously withdrawn routes if any.
+
 TC31: non-exist-map routes not present in R2's BGP table
       advertise-map routes present in R2's BGP table are advertised to R3.
 TC32: non-exist-map routes present in R2's BGP table
       advertise-map routes present in R2's BGP table are withdrawn from R3.
+TC33: advertise-map with non-exist-map configuration is removed from a peer
+      send normal BGP update to advertisepreviously withdrawn routes if any.
 
 TC41: non-exist-map route-map configuration removed in R2.
       advertise-map routes present in R2's BGP table are advertised to R3.
@@ -221,6 +213,18 @@ def all_routes_withdrawn(router):
     return topotest.json_cmp(output, expected)
 
 
+def default_route_withdrawn(router):
+    output = json.loads(router.vtysh_cmd("show ip route json"))
+    expected = {
+        "0.0.0.0/0": None,
+        "192.0.2.1/32": [{"protocol": "bgp"}],
+        "192.0.2.5/32": [{"protocol": "bgp"}],
+        "10.139.224.0/20": [{"protocol": "bgp"}],
+        "203.0.113.1/32": [{"protocol": "bgp"}],
+    }
+    return topotest.json_cmp(output, expected)
+
+
 # BGP conditional advertisement with route-maps
 # EXIST-MAP, ADV-MAP-1 and RMAP-1
 def exist_map_routes_present(router):
@@ -252,15 +256,7 @@ def non_exist_map_routes_present(router):
 
 
 def non_exist_map_routes_not_present(router):
-    output = json.loads(router.vtysh_cmd("show ip route json"))
-    expected = {
-        "0.0.0.0/0": None,
-        "192.0.2.1/32": [{"protocol": "bgp"}],
-        "192.0.2.5/32": [{"protocol": "bgp"}],
-        "10.139.224.0/20": [{"protocol": "bgp"}],
-        "203.0.113.1/32": [{"protocol": "bgp"}],
-    }
-    return topotest.json_cmp(output, expected)
+    return default_route_withdrawn(router)
 
 
 def exist_map_no_condition_route_map(router):
@@ -389,7 +385,7 @@ passed = "PASSED!!!"
 failed = "FAILED!!!"
 
 
-def test_bgp_conditional_advertisement_step1():
+def test_bgp_conditional_advertisement_tc_1_1():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -409,7 +405,7 @@ def test_bgp_conditional_advertisement_step1():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step2():
+def test_bgp_conditional_advertisement_tc_2_1():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -438,7 +434,7 @@ def test_bgp_conditional_advertisement_step2():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step3():
+def test_bgp_conditional_advertisement_tc_2_2():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -467,7 +463,36 @@ def test_bgp_conditional_advertisement_step3():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step4():
+def test_bgp_conditional_advertisement_tc_2_3():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
+    # TC23: advertise-map with exist-map configuration is removed from a peer
+    # send normal BGP update to advertise previously withdrawn routes if any.
+    router2.vtysh_cmd(
+        """
+          configure terminal
+           router bgp 2
+            address-family ipv4 unicast
+             no neighbor 10.10.20.3 advertise-map ADV-MAP-1 exist-map EXIST-MAP
+        """
+    )
+
+    test_func = functools.partial(default_route_withdrawn, router3)
+    success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
+
+    msg = "TC23: advertise-map with exist-map configuration is removed from peer - "
+    assert result is None, msg + failed
+
+    logger.info(msg + passed)
+
+
+def test_bgp_conditional_advertisement_tc_3_1():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -496,7 +521,7 @@ def test_bgp_conditional_advertisement_step4():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step5():
+def test_bgp_conditional_advertisement_tc_3_2():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -525,7 +550,38 @@ def test_bgp_conditional_advertisement_step5():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step6():
+def test_bgp_conditional_advertisement_tc_3_3():
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    router1 = tgen.gears["r1"]
+    router2 = tgen.gears["r2"]
+    router3 = tgen.gears["r3"]
+
+    # TC33: advertise-map with non-exist-map configuration is removed from a peer
+    # send normal BGP update to advertisepreviously withdrawn routes if any.
+    router2.vtysh_cmd(
+        """
+          configure terminal
+           router bgp 2
+            address-family ipv4 unicast
+             no neighbor 10.10.20.3 advertise-map ADV-MAP-1 non-exist-map EXIST-MAP
+        """
+    )
+
+    test_func = functools.partial(all_routes_advertised, router3)
+    success, result = topotest.run_and_expect(test_func, None, count=90, wait=1)
+
+    msg = (
+        "TC33: advertise-map with non-exist-map configuration is removed from a peer - "
+    )
+    assert result is None, msg + failed
+
+    logger.info(msg + passed)
+
+
+def test_bgp_conditional_advertisement_tc_4_1():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -539,6 +595,9 @@ def test_bgp_conditional_advertisement_step6():
     router2.vtysh_cmd(
         """
           configure terminal
+           router bgp 2
+            address-family ipv4 unicast
+             neighbor 10.10.20.3 advertise-map ADV-MAP-1 non-exist-map EXIST-MAP
            no route-map EXIST-MAP permit 10
         """
     )
@@ -552,7 +611,7 @@ def test_bgp_conditional_advertisement_step6():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step7():
+def test_bgp_conditional_advertisement_tc_4_2():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -581,7 +640,7 @@ def test_bgp_conditional_advertisement_step7():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step8():
+def test_bgp_conditional_advertisement_tc_5_1():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -614,7 +673,7 @@ def test_bgp_conditional_advertisement_step8():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step9():
+def test_bgp_conditional_advertisement_tc_5_2():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -643,7 +702,7 @@ def test_bgp_conditional_advertisement_step9():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step10():
+def test_bgp_conditional_advertisement_tc_5_3():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -673,7 +732,7 @@ def test_bgp_conditional_advertisement_step10():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step11():
+def test_bgp_conditional_advertisement_tc_5_4():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -702,7 +761,7 @@ def test_bgp_conditional_advertisement_step11():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step12():
+def test_bgp_conditional_advertisement_tc_6_1():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -740,7 +799,7 @@ def test_bgp_conditional_advertisement_step12():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step13():
+def test_bgp_conditional_advertisement_tc_6_2():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -769,7 +828,7 @@ def test_bgp_conditional_advertisement_step13():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step14():
+def test_bgp_conditional_advertisement_tc_6_3():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -799,7 +858,7 @@ def test_bgp_conditional_advertisement_step14():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step15():
+def test_bgp_conditional_advertisement_tc_6_4():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -830,7 +889,7 @@ def test_bgp_conditional_advertisement_step15():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step16():
+def test_bgp_conditional_advertisement_tc_7_1():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -868,7 +927,7 @@ def test_bgp_conditional_advertisement_step16():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step17():
+def test_bgp_conditional_advertisement_tc_7_2():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -897,7 +956,7 @@ def test_bgp_conditional_advertisement_step17():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step18():
+def test_bgp_conditional_advertisement_tc_7_3():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -927,7 +986,7 @@ def test_bgp_conditional_advertisement_step18():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step19():
+def test_bgp_conditional_advertisement_tc_7_4():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -956,7 +1015,7 @@ def test_bgp_conditional_advertisement_step19():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step20():
+def test_bgp_conditional_advertisement_tc_8_1():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -994,7 +1053,7 @@ def test_bgp_conditional_advertisement_step20():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step21():
+def test_bgp_conditional_advertisement_tc_8_2():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -1023,7 +1082,7 @@ def test_bgp_conditional_advertisement_step21():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step22():
+def test_bgp_conditional_advertisement_tc_8_3():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -1055,7 +1114,7 @@ def test_bgp_conditional_advertisement_step22():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step23():
+def test_bgp_conditional_advertisement_tc_8_4():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -1086,7 +1145,7 @@ def test_bgp_conditional_advertisement_step23():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step24():
+def test_bgp_conditional_advertisement_tc_9_1():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -1124,7 +1183,7 @@ def test_bgp_conditional_advertisement_step24():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step25():
+def test_bgp_conditional_advertisement_tc_9_2():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -1153,7 +1212,7 @@ def test_bgp_conditional_advertisement_step25():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step26():
+def test_bgp_conditional_advertisement_tc_9_3():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
@@ -1193,7 +1252,7 @@ def test_bgp_conditional_advertisement_step26():
     logger.info(msg + passed)
 
 
-def test_bgp_conditional_advertisement_step27():
+def test_bgp_conditional_advertisement_tc_9_4():
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)