]> git.puffer.fish Git - mirror/frr.git/commitdiff
topotests: test aggregate address suppress map
authorRafael Zalamena <rzalamena@opensourcerouting.org>
Sun, 18 Oct 2020 22:19:21 +0000 (19:19 -0300)
committerRafael Zalamena <rzalamena@opensourcerouting.org>
Thu, 22 Oct 2020 00:50:06 +0000 (21:50 -0300)
Add test for new aggregate address option: test aggregate address option
without converged routes, then test again with a different route map
with converged routes.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
tests/topotests/bgp_aggregate_address_topo1/peer1/exabgp.cfg
tests/topotests/bgp_aggregate_address_topo1/r1/bgpd.conf
tests/topotests/bgp_aggregate_address_topo1/test_bgp_aggregate_address_topo1.py

index 277c6603adecbf6a5d02b41cc5ee5d6d23b21971..e0f6ab601f72b2fadb748615a3df5c9374ca0b58 100644 (file)
@@ -13,5 +13,9 @@ neighbor 10.0.0.1 {
     route 192.168.1.1/32 next-hop 10.0.0.2 med 10;
     route 192.168.1.2/32 next-hop 10.0.0.2 med 10;
     route 192.168.1.3/32 next-hop 10.0.0.2 med 20;
+
+    route 192.168.2.1/32 next-hop 10.0.0.2;
+    route 192.168.2.2/32 next-hop 10.0.0.2;
+    route 192.168.2.3/32 next-hop 10.0.0.2;
   }
 }
index 4e1406177df7fca70fed2d9d1d4852e75f42ead0..5fd6e8e83d45de900e9d0b7117d780e139e0e4bc 100644 (file)
@@ -1,3 +1,18 @@
+access-list acl-sup-one seq 5 permit 192.168.2.1/32
+access-list acl-sup-one seq 10 deny any
+!
+access-list acl-sup-two seq 5 permit 192.168.2.2/32
+access-list acl-sup-two seq 10 deny any
+!
+access-list acl-sup-three seq 5 permit 192.168.2.3/32
+access-list acl-sup-three seq 10 deny any
+!
+route-map rm-sup-one permit 10
+ match ip address acl-sup-one
+!
+route-map rm-sup-two permit 10
+ match ip address acl-sup-two
+!
 router bgp 65000
   no bgp ebgp-requires-policy
   neighbor 10.0.0.2 remote-as 65001
@@ -8,5 +23,6 @@ router bgp 65000
    redistribute connected
    aggregate-address 192.168.0.0/24 matching-MED-only
    aggregate-address 192.168.1.0/24 matching-MED-only
+   aggregate-address 192.168.2.0/24 suppress-map rm-sup-one
   exit-address-family
 !
index d3656b87016935ed654573a73749a92d58b16cf0..3f3b71dea3e4fc8b563b03f577b88b1fd1a0137e 100644 (file)
@@ -85,6 +85,20 @@ def teardown_module(mod):
     tgen.stop_topology()
 
 
+def expect_route(router_name, routes_expected):
+    "Helper function to avoid repeated code."
+    tgen = get_topogen()
+    test_func = functools.partial(
+        topotest.router_json_cmp,
+        tgen.gears[router_name],
+        "show ip route json",
+        routes_expected,
+    )
+    _, result = topotest.run_and_expect(test_func, None, count=120, wait=1)
+    assertmsg = '"{}" BGP convergence failure'.format(router_name)
+    assert result is None, assertmsg
+
+
 def test_expect_convergence():
     "Test that BGP protocol converged."
 
@@ -185,6 +199,79 @@ aggregate-address 192.168.1.0/24 matching-MED-only summary-only
     assert result is None, assertmsg
 
 
+def test_bgp_aggregate_address_suppress_map():
+    "Test that the command suppress-map works."
+
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    expect_route('r2', {
+        "192.168.2.0/24": [{"protocol": "bgp"}],
+        "192.168.2.1/32": None,
+        "192.168.2.2/32": [{"protocol": "bgp"}],
+        "192.168.2.3/32": [{"protocol": "bgp"}],
+    })
+
+    # Change route map and test again.
+    tgen.gears["r1"].vtysh_multicmd(
+        """
+configure terminal
+router bgp 65000
+address-family ipv4 unicast
+no aggregate-address 192.168.2.0/24 suppress-map rm-sup-one
+aggregate-address 192.168.2.0/24 suppress-map rm-sup-two
+"""
+    )
+
+    expect_route('r2', {
+        "192.168.2.0/24": [{"protocol": "bgp"}],
+        "192.168.2.1/32": [{"protocol": "bgp"}],
+        "192.168.2.2/32": None,
+        "192.168.2.3/32": [{"protocol": "bgp"}],
+    })
+
+
+def test_bgp_aggregate_address_suppress_map_update_route_map():
+    "Test that the suppress-map late route map creation works."
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    tgen.gears["r1"].vtysh_multicmd(
+        """
+configure terminal
+router bgp 65000
+address-family ipv4 unicast
+no aggregate-address 192.168.2.0/24 suppress-map rm-sup-two
+aggregate-address 192.168.2.0/24 suppress-map rm-sup-three
+"""
+    )
+
+    expect_route('r2', {
+        "192.168.2.0/24": [{"protocol": "bgp"}],
+        "192.168.2.1/32": [{"protocol": "bgp"}],
+        "192.168.2.2/32": [{"protocol": "bgp"}],
+        "192.168.2.3/32": [{"protocol": "bgp"}],
+    })
+
+    # Create missing route map and test again.
+    tgen.gears["r1"].vtysh_multicmd(
+        """
+configure terminal
+route-map rm-sup-three permit 10
+match ip address acl-sup-three
+"""
+    )
+
+    expect_route('r2', {
+        "192.168.2.0/24": [{"protocol": "bgp"}],
+        "192.168.2.1/32": [{"protocol": "bgp"}],
+        "192.168.2.2/32": [{"protocol": "bgp"}],
+        "192.168.2.3/32": None,
+    })
+
+
 def test_memory_leak():
     "Run the memory leak test and report results."
     tgen = get_topogen()