]> git.proxmox.com Git - mirror_frr.git/blobdiff - tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / tests / topotests / bgp_suppress_fib / test_bgp_suppress_fib.py
index 5a22fbbc54c7ac3344ef5957048e453c9701b90c..ed8e41903f179d9e5f02ce763f6ad0fd2c28b2f9 100644 (file)
@@ -1,24 +1,11 @@
 #!/usr/bin/env python
+# SPDX-License-Identifier: ISC
 
 #
 # test_bgp_suppress_fib.py
 #
 # Copyright (c) 2019 by
 #
-# 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.
-#
 
 """
 """
@@ -29,6 +16,7 @@ import json
 import pytest
 from functools import partial
 from time import sleep
+from lib.topolog import logger
 
 CWD = os.path.dirname(os.path.realpath(__file__))
 sys.path.append(os.path.join(CWD, "../"))
@@ -83,8 +71,6 @@ def test_bgp_route():
 
     r3 = tgen.gears["r3"]
 
-    sleep(5)
-
     json_file = "{}/r3/v4_route.json".format(CWD)
     expected = json.loads(open(json_file).read())
 
@@ -94,7 +80,7 @@ def test_bgp_route():
         "show ip route 40.0.0.0 json",
         expected,
     )
-    _, result = topotest.run_and_expect(test_func, None, count=2, wait=0.5)
+    _, result = topotest.run_and_expect(test_func, None, count=20, wait=0.5)
     assertmsg = '"r3" JSON output mismatches'
     assert result is None, assertmsg
 
@@ -107,10 +93,130 @@ def test_bgp_route():
         "show ip route 50.0.0.0 json",
         expected,
     )
-    _, result = topotest.run_and_expect(test_func, None, count=3, wait=0.5)
+    _, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
     assertmsg = '"r3" JSON output mismatches'
     assert result is None, assertmsg
 
+    json_file = "{}/r3/v4_route3.json".format(CWD)
+    expected = json.loads(open(json_file).read())
+
+    test_func = partial(
+        topotest.router_json_cmp,
+        r3,
+        "show ip route 10.0.0.3 json",
+        expected,
+    )
+    _, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+
+
+def test_bgp_better_admin_won():
+    "A better Admin distance protocol may come along and knock us out"
+
+    tgen = get_topogen()
+
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    r2 = tgen.gears["r2"]
+    r2.vtysh_cmd("conf\nip route 40.0.0.0/8 10.0.0.10")
+
+    json_file = "{}/r2/v4_override.json".format(CWD)
+    expected = json.loads(open(json_file).read())
+
+    logger.info(expected)
+    test_func = partial(
+        topotest.router_json_cmp, r2, "show ip route 40.0.0.0 json", expected
+    )
+
+    _, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+    assertmsg = '"r2" static route did not take over'
+    assert result is None, assertmsg
+
+    r3 = tgen.gears["r3"]
+
+    json_file = "{}/r3/v4_override.json".format(CWD)
+    expected = json.loads(open(json_file).read())
+
+    test_func = partial(
+        topotest.router_json_cmp, r3, "show ip route 40.0.0.0 json", expected
+    )
+
+    _, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+    assertmsg = '"r3" route to 40.0.0.0 should have been lost'
+    assert result is None, assertmsg
+
+    r2.vtysh_cmd("conf\nno ip route 40.0.0.0/8 10.0.0.10")
+
+    json_file = "{}/r3/v4_route.json".format(CWD)
+    expected = json.loads(open(json_file).read())
+
+    test_func = partial(
+        topotest.router_json_cmp,
+        r3,
+        "show ip route 40.0.0.0 json",
+        expected,
+    )
+    _, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+    assertmsg = '"r3" route to 40.0.0.0 did not come back'
+    assert result is None, assertmsg
+
+
+def test_bgp_allow_as_in():
+    tgen = get_topogen()
+
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    r2 = tgen.gears["r2"]
+
+    config_file = "{}/r2/bgpd.allowas_in.conf".format(CWD)
+    r2.run("vtysh -f {}".format(config_file))
+
+    json_file = "{}/r2/bgp_ipv4_allowas.json".format(CWD)
+    expected = json.loads(open(json_file).read())
+
+    test_func = partial(
+        topotest.router_json_cmp,
+        r2,
+        "show bgp ipv4 uni 192.168.1.1/32 json",
+        expected,
+    )
+    _, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+    assertmsg = '"r2" static redistribution failed into bgp'
+    assert result is None, assertmsg
+
+    r1 = tgen.gears["r1"]
+
+    json_file = "{}/r1/bgp_ipv4_allowas.json".format(CWD)
+    expected = json.loads(open(json_file).read())
+
+    test_func = partial(
+        topotest.router_json_cmp,
+        r1,
+        "show bgp ipv4 uni 192.168.1.1/32 json",
+        expected,
+    )
+
+    _, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+    assertmsg = '"r1" 192.168.1.1/32 route should have arrived'
+    assert result is None, assertmsg
+
+    r2.vtysh_cmd("conf\nno ip route 192.168.1.1/32 10.0.0.10")
+
+    json_file = "{}/r2/no_bgp_ipv4_allowas.json".format(CWD)
+    expected = json.loads(open(json_file).read())
+
+    test_func = partial(
+        topotest.router_json_cmp,
+        r2,
+        "show bgp ipv4 uni 192.168.1.1/32 json",
+        expected,
+    )
+
+    _, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+    assertmsg = '"r2" 192.168.1.1/32 route should be gone'
+    assert result is None, assertmsg
+
 
 if __name__ == "__main__":
     args = ["-s"] + sys.argv[1:]