From 180e1a0d77a2041e9d0ad70cc3a182ff6ed0c1fd Mon Sep 17 00:00:00 2001 From: Nathan Bahr Date: Tue, 29 Oct 2024 15:06:36 +0000 Subject: [PATCH] tests: Add zebra rib import-table tests Signed-off-by: Nathan Bahr --- tests/topotests/zebra_rib/r1/frr-import.conf | 18 ++ .../zebra_rib/r1/import_init_mrib_table.json | 126 ++++++++ .../zebra_rib/r1/import_init_table.json | 126 ++++++++ .../zebra_rib/r1/import_mrib_table_2.json | 258 ++++++++++++++++ .../zebra_rib/r1/import_mrib_table_3.json | 291 ++++++++++++++++++ .../zebra_rib/r1/import_mrib_table_4.json | 258 ++++++++++++++++ .../zebra_rib/r1/import_table_2.json | 258 ++++++++++++++++ .../zebra_rib/r1/import_table_3.json | 291 ++++++++++++++++++ .../zebra_rib/r1/import_table_4.json | 258 ++++++++++++++++ .../topotests/zebra_rib/test_zebra_import.py | 280 +++++++++++++++++ 10 files changed, 2164 insertions(+) create mode 100644 tests/topotests/zebra_rib/r1/frr-import.conf create mode 100644 tests/topotests/zebra_rib/r1/import_init_mrib_table.json create mode 100644 tests/topotests/zebra_rib/r1/import_init_table.json create mode 100644 tests/topotests/zebra_rib/r1/import_mrib_table_2.json create mode 100644 tests/topotests/zebra_rib/r1/import_mrib_table_3.json create mode 100644 tests/topotests/zebra_rib/r1/import_mrib_table_4.json create mode 100644 tests/topotests/zebra_rib/r1/import_table_2.json create mode 100644 tests/topotests/zebra_rib/r1/import_table_3.json create mode 100644 tests/topotests/zebra_rib/r1/import_table_4.json create mode 100644 tests/topotests/zebra_rib/test_zebra_import.py diff --git a/tests/topotests/zebra_rib/r1/frr-import.conf b/tests/topotests/zebra_rib/r1/frr-import.conf new file mode 100644 index 0000000000..d07433144f --- /dev/null +++ b/tests/topotests/zebra_rib/r1/frr-import.conf @@ -0,0 +1,18 @@ +! +hostname r1 +password zebra +log file /tmp/r1-frr.log +! +interface r1-eth0 + ip address 10.0.0.1/24 +! +interface r1-eth1 + ip address 10.10.0.1/24 +! +ip route 10.1.0.0/24 10.0.0.2 table 10 +ip route 10.2.0.0/24 10.0.0.2 table 10 +ip route 10.3.0.0/24 10.10.0.2 table 10 +ip route 10.4.0.0/24 10.10.0.2 table 10 +! +ip forwarding +! \ No newline at end of file diff --git a/tests/topotests/zebra_rib/r1/import_init_mrib_table.json b/tests/topotests/zebra_rib/r1/import_init_mrib_table.json new file mode 100644 index 0000000000..a6807d2cdd --- /dev/null +++ b/tests/topotests/zebra_rib/r1/import_init_mrib_table.json @@ -0,0 +1,126 @@ +{ + "10.0.0.0/24": [ + { + "prefix": "10.0.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.0.0.1/32": [ + { + "prefix": "10.0.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.0/24": [ + { + "prefix": "10.10.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.1/32": [ + { + "prefix": "10.10.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/topotests/zebra_rib/r1/import_init_table.json b/tests/topotests/zebra_rib/r1/import_init_table.json new file mode 100644 index 0000000000..a6807d2cdd --- /dev/null +++ b/tests/topotests/zebra_rib/r1/import_init_table.json @@ -0,0 +1,126 @@ +{ + "10.0.0.0/24": [ + { + "prefix": "10.0.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.0.0.1/32": [ + { + "prefix": "10.0.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.0/24": [ + { + "prefix": "10.10.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.1/32": [ + { + "prefix": "10.10.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/topotests/zebra_rib/r1/import_mrib_table_2.json b/tests/topotests/zebra_rib/r1/import_mrib_table_2.json new file mode 100644 index 0000000000..0a7915df0f --- /dev/null +++ b/tests/topotests/zebra_rib/r1/import_mrib_table_2.json @@ -0,0 +1,258 @@ +{ + "10.0.0.0/24": [ + { + "prefix": "10.0.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.0.0.1/32": [ + { + "prefix": "10.0.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.1.0.0/24": [ + { + "prefix": "10.1.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 7, + "installedNexthopGroupId": 7, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.0.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.2.0.0/24": [ + { + "prefix": "10.2.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 7, + "installedNexthopGroupId": 7, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.0.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.3.0.0/24": [ + { + "prefix": "10.3.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.4.0.0/24": [ + { + "prefix": "10.4.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.0/24": [ + { + "prefix": "10.10.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.1/32": [ + { + "prefix": "10.10.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/topotests/zebra_rib/r1/import_mrib_table_3.json b/tests/topotests/zebra_rib/r1/import_mrib_table_3.json new file mode 100644 index 0000000000..11bbcf8ec8 --- /dev/null +++ b/tests/topotests/zebra_rib/r1/import_mrib_table_3.json @@ -0,0 +1,291 @@ +{ + "10.0.0.0/24": [ + { + "prefix": "10.0.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.0.0.1/32": [ + { + "prefix": "10.0.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.1.0.0/24": [ + { + "prefix": "10.1.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 7, + "installedNexthopGroupId": 7, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.0.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.2.0.0/24": [ + { + "prefix": "10.2.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 7, + "installedNexthopGroupId": 7, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.0.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.3.0.0/24": [ + { + "prefix": "10.3.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.4.0.0/24": [ + { + "prefix": "10.4.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.0/24": [ + { + "prefix": "10.10.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.1/32": [ + { + "prefix": "10.10.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.20.0.0/24": [ + { + "prefix": "10.20.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/topotests/zebra_rib/r1/import_mrib_table_4.json b/tests/topotests/zebra_rib/r1/import_mrib_table_4.json new file mode 100644 index 0000000000..4375b9cde6 --- /dev/null +++ b/tests/topotests/zebra_rib/r1/import_mrib_table_4.json @@ -0,0 +1,258 @@ +{ + "10.0.0.0/24": [ + { + "prefix": "10.0.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.0.0.1/32": [ + { + "prefix": "10.0.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.1.0.0/24": [ + { + "prefix": "10.1.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 123, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 7, + "installedNexthopGroupId": 7, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.0.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.2.0.0/24": [ + { + "prefix": "10.2.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 123, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 7, + "installedNexthopGroupId": 7, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.0.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.3.0.0/24": [ + { + "prefix": "10.3.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 123, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.4.0.0/24": [ + { + "prefix": "10.4.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 123, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.0/24": [ + { + "prefix": "10.10.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.1/32": [ + { + "prefix": "10.10.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/topotests/zebra_rib/r1/import_table_2.json b/tests/topotests/zebra_rib/r1/import_table_2.json new file mode 100644 index 0000000000..0a7915df0f --- /dev/null +++ b/tests/topotests/zebra_rib/r1/import_table_2.json @@ -0,0 +1,258 @@ +{ + "10.0.0.0/24": [ + { + "prefix": "10.0.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.0.0.1/32": [ + { + "prefix": "10.0.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.1.0.0/24": [ + { + "prefix": "10.1.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 7, + "installedNexthopGroupId": 7, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.0.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.2.0.0/24": [ + { + "prefix": "10.2.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 7, + "installedNexthopGroupId": 7, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.0.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.3.0.0/24": [ + { + "prefix": "10.3.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.4.0.0/24": [ + { + "prefix": "10.4.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.0/24": [ + { + "prefix": "10.10.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.1/32": [ + { + "prefix": "10.10.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/topotests/zebra_rib/r1/import_table_3.json b/tests/topotests/zebra_rib/r1/import_table_3.json new file mode 100644 index 0000000000..11bbcf8ec8 --- /dev/null +++ b/tests/topotests/zebra_rib/r1/import_table_3.json @@ -0,0 +1,291 @@ +{ + "10.0.0.0/24": [ + { + "prefix": "10.0.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.0.0.1/32": [ + { + "prefix": "10.0.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.1.0.0/24": [ + { + "prefix": "10.1.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 7, + "installedNexthopGroupId": 7, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.0.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.2.0.0/24": [ + { + "prefix": "10.2.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 7, + "installedNexthopGroupId": 7, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.0.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.3.0.0/24": [ + { + "prefix": "10.3.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.4.0.0/24": [ + { + "prefix": "10.4.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.0/24": [ + { + "prefix": "10.10.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.1/32": [ + { + "prefix": "10.10.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.20.0.0/24": [ + { + "prefix": "10.20.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 15, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/topotests/zebra_rib/r1/import_table_4.json b/tests/topotests/zebra_rib/r1/import_table_4.json new file mode 100644 index 0000000000..4375b9cde6 --- /dev/null +++ b/tests/topotests/zebra_rib/r1/import_table_4.json @@ -0,0 +1,258 @@ +{ + "10.0.0.0/24": [ + { + "prefix": "10.0.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.0.0.1/32": [ + { + "prefix": "10.0.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 3, + "installedNexthopGroupId": 3, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.1.0.0/24": [ + { + "prefix": "10.1.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 123, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 7, + "installedNexthopGroupId": 7, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.0.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.2.0.0/24": [ + { + "prefix": "10.2.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 123, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 7, + "installedNexthopGroupId": 7, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.0.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth0", + "active": true, + "weight": 1 + } + ] + } + ], + "10.3.0.0/24": [ + { + "prefix": "10.3.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 123, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.4.0.0/24": [ + { + "prefix": "10.4.0.0/24", + "prefixLen": 24, + "protocol": "table", + "instance": 10, + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 123, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 9, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 8, + "installedNexthopGroupId": 8, + "nexthops": [ + { + "flags": 3, + "fib": true, + "ip": "10.10.0.2", + "afi": "ipv4", + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.0/24": [ + { + "prefix": "10.10.0.0/24", + "prefixLen": 24, + "protocol": "connected", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ], + "10.10.0.1/32": [ + { + "prefix": "10.10.0.1/32", + "prefixLen": 32, + "protocol": "local", + "vrfId": 0, + "vrfName": "default", + "selected": true, + "destSelected": true, + "distance": 0, + "metric": 0, + "installed": true, + "table": 254, + "internalStatus": 16, + "internalFlags": 8, + "internalNextHopNum": 1, + "internalNextHopActiveNum": 1, + "nexthopGroupId": 4, + "installedNexthopGroupId": 4, + "nexthops": [ + { + "flags": 3, + "fib": true, + "directlyConnected": true, + "interfaceName": "r1-eth1", + "active": true, + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/topotests/zebra_rib/test_zebra_import.py b/tests/topotests/zebra_rib/test_zebra_import.py new file mode 100644 index 0000000000..7819548ad2 --- /dev/null +++ b/tests/topotests/zebra_rib/test_zebra_import.py @@ -0,0 +1,280 @@ +#!/usr/bin/env python +# SPDX-License-Identifier: ISC +# +# test_zebra_import.py +# +# Copyright (c) 2024 ATCorp +# Nathan Bahr +# + +import os +import sys +from functools import partial +import pytest +import json +import platform + +# pylint: disable=C0413 +# Import topogen and topotest helpers +from lib import topotest +from lib.topogen import Topogen, get_topogen +from lib.topolog import logger +from lib.common_config import step, write_test_header + +""" +test_zebra_import.py: Test zebra table import functionality +""" + +TOPOLOGY = """ + Single router zebra functionality + + +---+---+ + 10.0.0.1/24 | | 10.10.0.1/24 + <--->+ R1 +<---> + | | + +---+---+ +""" + +# Save the Current Working Directory to find configuration files. +CWD = os.path.dirname(os.path.realpath(__file__)) +sys.path.append(os.path.join(CWD, "../")) + +pytestmark = [pytest.mark.sharpd] +krel = platform.release() + +def build_topo(tgen): + "Build function" + + tgen.add_router("r1") + sw1 = tgen.add_switch("sw1") + sw2 = tgen.add_switch("sw2") + sw1.add_link(tgen.gears["r1"], "r1-eth0") + sw2.add_link(tgen.gears["r1"], "r1-eth1") + +def setup_module(mod): + "Sets up the pytest environment" + + tgen = Topogen(build_topo, mod.__name__) + tgen.start_topology() + + router_list = tgen.routers() + for rname, router in router_list.items(): + logger.info("Loading router %s" % rname) + router.load_frr_config(os.path.join(CWD, "{}/frr-import.conf".format(rname))) + + # Initialize all routers. + tgen.start_router() + for router in router_list.values(): + if router.has_version("<", "4.0"): + tgen.set_error("unsupported version") + + +def teardown_module(): + "Teardown the pytest environment" + tgen = get_topogen() + tgen.stop_topology() + + +def test_zebra_urib_import(request): + "Verify router starts with the initial URIB" + tgen = get_topogen() + tc_name = request.node.name + write_test_header(tc_name) + + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + r1 = tgen.gears["r1"] + + step("Verify initial main routing table") + initial_json_file = "{}/r1/import_init_table.json".format(CWD) + expected = json.loads(open(initial_json_file).read()) + test_func = partial( + topotest.router_json_cmp, r1, "show ip route json", expected + ) + _, result = topotest.run_and_expect(test_func, None) + assert result is None, '"r1" JSON output mismatches' + + r1.vtysh_cmd( + """ + conf term + ip import-table 10 + """) + + import_json_file = "{}/r1/import_table_2.json".format(CWD) + expected = json.loads(open(import_json_file).read()) + test_func = partial( + topotest.router_json_cmp, r1, "show ip route json", expected + ) + _, result = topotest.run_and_expect(test_func, None) + assert result is None, '"r1" JSON output mismatches' + + step("Add a new static route and verify it gets added") + r1.vtysh_cmd( + """ + conf term + ip route 10.20.0.0/24 10.10.0.2 table 10 + """ + ) + + sync_json_file = "{}/r1/import_table_3.json".format(CWD) + expected = json.loads(open(sync_json_file).read()) + test_func = partial( + topotest.router_json_cmp, r1, "show ip route json", expected + ) + _, result = topotest.run_and_expect(test_func, None) + assert result is None, '"r1" JSON output mismatches' + + step("Remove the static route and verify it gets removed") + r1.vtysh_cmd( + """ + conf term + no ip route 10.20.0.0/24 10.10.0.2 table 10 + """ + ) + + expected = json.loads(open(import_json_file).read()) + test_func = partial( + topotest.router_json_cmp, r1, "show ip route json", expected + ) + _, result = topotest.run_and_expect(test_func, None) + assert result is None, '"r1" JSON output mismatches' + + step("Disable table import and verify it goes back to the initial table") + r1.vtysh_cmd( + """ + conf term + no ip import-table 10 + """ + ) + + expected = json.loads(open(initial_json_file).read()) + test_func = partial( + topotest.router_json_cmp, r1, "show ip route json", expected + ) + _, result = topotest.run_and_expect(test_func, None) + assert result is None, '"r1" JSON output mismatches' + + step("Re-import with distance and verify correct distance") + r1.vtysh_cmd( + """ + conf term + ip import-table 10 distance 123 + """) + + import_json_file = "{}/r1/import_table_4.json".format(CWD) + expected = json.loads(open(import_json_file).read()) + test_func = partial( + topotest.router_json_cmp, r1, "show ip route json", expected + ) + _, result = topotest.run_and_expect(test_func, None) + assert result is None, '"r1" JSON output mismatches' + +def test_zebra_mrib_import(request): + "Verify router starts with the initial MRIB" + tgen = get_topogen() + tc_name = request.node.name + write_test_header(tc_name) + + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + r1 = tgen.gears["r1"] + + step("Verify initial main MRIB routing table") + initial_json_file = "{}/r1/import_init_mrib_table.json".format(CWD) + expected = json.loads(open(initial_json_file).read()) + test_func = partial( + topotest.router_json_cmp, r1, "show ip rpf json", expected + ) + _, result = topotest.run_and_expect(test_func, None) + assert result is None, '"r1" JSON output mismatches' + + r1.vtysh_cmd( + """ + conf term + ip import-table 10 mrib + """) + + import_json_file = "{}/r1/import_mrib_table_2.json".format(CWD) + expected = json.loads(open(import_json_file).read()) + test_func = partial( + topotest.router_json_cmp, r1, "show ip rpf json", expected + ) + _, result = topotest.run_and_expect(test_func, None) + assert result is None, '"r1" JSON output mismatches' + + step("Add a new static route and verify it gets added") + r1.vtysh_cmd( + """ + conf term + ip route 10.20.0.0/24 10.10.0.2 table 10 + """ + ) + + sync_json_file = "{}/r1/import_mrib_table_3.json".format(CWD) + expected = json.loads(open(sync_json_file).read()) + test_func = partial( + topotest.router_json_cmp, r1, "show ip rpf json", expected + ) + _, result = topotest.run_and_expect(test_func, None) + assert result is None, '"r1" JSON output mismatches' + + step("Remove the static route and verify it gets removed") + r1.vtysh_cmd( + """ + conf term + no ip route 10.20.0.0/24 10.10.0.2 table 10 + """ + ) + + expected = json.loads(open(import_json_file).read()) + test_func = partial( + topotest.router_json_cmp, r1, "show ip rpf json", expected + ) + _, result = topotest.run_and_expect(test_func, None) + assert result is None, '"r1" JSON output mismatches' + + step("Disable table import and verify it goes back to the initial table") + r1.vtysh_cmd( + """ + conf term + no ip import-table 10 mrib + """ + ) + + expected = json.loads(open(initial_json_file).read()) + test_func = partial( + topotest.router_json_cmp, r1, "show ip rpf json", expected + ) + _, result = topotest.run_and_expect(test_func, None) + assert result is None, '"r1" JSON output mismatches' + + step("Re-import with distance and verify correct distance") + r1.vtysh_cmd( + """ + conf term + ip import-table 10 mrib distance 123 + """) + + import_json_file = "{}/r1/import_mrib_table_4.json".format(CWD) + expected = json.loads(open(import_json_file).read()) + test_func = partial( + topotest.router_json_cmp, r1, "show ip rpf json", expected + ) + _, result = topotest.run_and_expect(test_func, None) + assert result is None, '"r1" JSON output mismatches' + + +def test_memory_leak(): + "Run the memory leak test and report results." + tgen = get_topogen() + if not tgen.is_memleak_enabled(): + pytest.skip("Memory leak test/report is disabled") + + tgen.report_memory_leaks() + + +if __name__ == "__main__": + args = ["-s"] + sys.argv[1:] + sys.exit(pytest.main(args)) -- 2.39.5