diff options
| author | anlan_cs <vic.lan@pica8.com> | 2023-06-26 18:20:58 +0800 |
|---|---|---|
| committer | anlan_cs <vic.lan@pica8.com> | 2023-07-02 10:30:09 +0800 |
| commit | 019ac03e5b9fd46c51bd14f9f3a16c746e28fdac (patch) | |
| tree | 6a8c108d40b94257fd59484ada884f220f8e36a4 /tests/topotests/zebra_rib | |
| parent | 098519caf8836f1bb0df9568ecd5daa5b4d5140b (diff) | |
tests: Check if kernel routes work with changed vrf
Check `show ip route` for specific kernel routes after
the interface as their nexthop changes vrf.
After moving interface's vrf, there should be no kernel
route in old vrf.
Signed-off-by: anlan_cs <vic.lan@pica8.com>
Diffstat (limited to 'tests/topotests/zebra_rib')
| -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") |
