diff options
| -rw-r--r-- | tests/topotests/zebra_rib/r1/v4_route_1_vrf_before.json | 27 | ||||
| -rw-r--r-- | tests/topotests/zebra_rib/test_zebra_rib.py | 35 | 
2 files changed, 62 insertions, 0 deletions
diff --git a/tests/topotests/zebra_rib/r1/v4_route_1_vrf_before.json b/tests/topotests/zebra_rib/r1/v4_route_1_vrf_before.json new file mode 100644 index 0000000000..997d12f68d --- /dev/null +++ b/tests/topotests/zebra_rib/r1/v4_route_1_vrf_before.json @@ -0,0 +1,27 @@ +{ +    "3.5.1.0/24":[ +        { +            "prefix":"3.5.1.0/24", +            "prefixLen":24, +            "protocol":"kernel", +            "vrfId":0, +            "vrfName":"default", +            "selected":true, +            "destSelected":true, +            "distance":0, +            "metric":0, +            "installed":true, +            "table":254, +            "nexthops":[ +                { +                    "flags":3, +                    "fib":true, +                    "ip":"192.168.210.1", +                    "afi":"ipv4", +                    "interfaceName":"r1-eth0", +                    "active":true +                } +            ] +        } +    ] +} diff --git a/tests/topotests/zebra_rib/test_zebra_rib.py b/tests/topotests/zebra_rib/test_zebra_rib.py index e2863218b0..c45ac82d30 100644 --- a/tests/topotests/zebra_rib/test_zebra_rib.py +++ b/tests/topotests/zebra_rib/test_zebra_rib.py @@ -77,6 +77,41 @@ def teardown_module(mod):      tgen.stop_topology() +def test_zebra_kernel_route_vrf(): +    "Test kernel routes should be removed after interface changes vrf" +    logger.info("Test kernel routes should be removed after interface changes vrf") +    vrf = "RED" +    tgen = get_topogen() +    r1 = tgen.gears["r1"] + +    # Add kernel routes, the interface is initially in default vrf +    r1.run("ip route add 3.5.1.0/24 via 192.168.210.1 dev r1-eth0") +    json_file = "{}/r1/v4_route_1_vrf_before.json".format(CWD) +    expected = json.loads(open(json_file).read()) +    test_func = partial( +        topotest.router_json_cmp, r1, "show ip route 3.5.1.0/24 json", expected +    ) +    _, result = topotest.run_and_expect(test_func, None, count=5, wait=1) +    assert result is None, '"r1" JSON output mismatches' + +    # Change the interface's vrf +    r1.run("ip link add {} type vrf table 1".format(vrf)) +    r1.run("ip link set {} up".format(vrf)) +    r1.run("ip link set dev r1-eth0 master {}".format(vrf)) + +    expected = "{}" +    test_func = partial( +        topotest.router_output_cmp, r1, "show ip route 3.5.1.0/24 json", expected +    ) +    result, diff = topotest.run_and_expect(test_func, "", count=5, wait=1) +    assertmsg = "{} should not have the kernel route.\n{}".format('"r1"', diff) +    assert result, assertmsg + +    # Clean up +    r1.run("ip link set dev r1-eth0 nomaster") +    r1.run("ip link del dev {}".format(vrf)) + +  def test_zebra_kernel_admin_distance():      "Test some basic kernel routes added that should be accepted"      logger.info("Test some basic kernel routes that should be accepted")  | 
