summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/bfdd.conf2
-rw-r--r--tests/topotests/isis_lfa_topo1/rt2/bfdd.conf2
-rwxr-xr-xtests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py120
3 files changed, 91 insertions, 33 deletions
diff --git a/tests/topotests/isis_lfa_topo1/rt1/bfdd.conf b/tests/topotests/isis_lfa_topo1/rt1/bfdd.conf
index 86cf68dd8d..ef67eae0cf 100644
--- a/tests/topotests/isis_lfa_topo1/rt1/bfdd.conf
+++ b/tests/topotests/isis_lfa_topo1/rt1/bfdd.conf
@@ -1,6 +1,4 @@
hostname rt1
!
bfd
- peer 2001:db8:1000::2 multihop local-address 2001:db8:1000::1
- !
!
diff --git a/tests/topotests/isis_lfa_topo1/rt2/bfdd.conf b/tests/topotests/isis_lfa_topo1/rt2/bfdd.conf
index 40357a4d03..25fa0d8a46 100644
--- a/tests/topotests/isis_lfa_topo1/rt2/bfdd.conf
+++ b/tests/topotests/isis_lfa_topo1/rt2/bfdd.conf
@@ -1,6 +1,4 @@
hostname rt2
!
bfd
- peer 2001:db8:1000::1 multihop local-address 2001:db8:1000::2
- !
!
diff --git a/tests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py b/tests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py
index f72942b607..d01ba9da3f 100755
--- a/tests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py
+++ b/tests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py
@@ -758,6 +758,80 @@ def test_rib_ipv6_step17():
# - Route switchover of routes via eth-rt2
#
def test_rib_ipv6_step18():
+ def _rt2_neigh_down(router):
+ output = json.loads(router.vtysh_cmd("show isis neighbor rt2 json"))
+
+ """
+ Previous output was:
+ {
+ "areas":[
+ {
+ "area":"1",
+ "circuits":[
+ {
+ "circuit":0,
+ "adj":"rt2",
+ "interface":{
+ "name":"eth-rt2",
+ "state":"Up",
+ "adj-flaps":1,
+ "last-ago":"21s",
+ "circuit-type":"L1",
+ "speaks":"IPv6",
+ "topologies":{
+ "topo-0":"ipv6-unicast"
+ },
+ "snpa":"2020.2020.2020",
+ "area-address":{
+ "isonet":"49.0000"
+ },
+ "ipv6-link-local":{
+ "ipv6":"fe80::ac19:a8ff:fee5:f48f"
+ },
+ "adj-sid":{
+ }
+ },
+ "level":1,
+ "expires-in":"2s"
+ },
+ {
+ "circuit":0
+ },
+ {
+ "circuit":0
+ },
+ {
+ "circuit":0
+ },
+ {
+ "circuit":0
+ },
+ {
+ "circuit":0
+ }
+ ]
+ }
+ ]
+ """
+
+ expected = {
+ "areas": [
+ {
+ "area": "1",
+ "circuits": [
+ {"circuit": 0},
+ {"circuit": 0},
+ {"circuit": 0},
+ {"circuit": 0},
+ {"circuit": 0},
+ {"circuit": 0},
+ ],
+ }
+ ]
+ }
+
+ return topotest.json_cmp(output, expected, exact=True)
+
logger.info("Test (step 18): verify IPv6 RIB")
tgen = get_topogen()
@@ -769,23 +843,10 @@ def test_rib_ipv6_step18():
tgen.net.cmd_raises("ip link set s1 down")
rname = "rt1"
-
- retry = 200 + 1
-
- while retry:
- retry -= 1
- output = tgen.gears[rname].vtysh_cmd("show isis neighbor json")
- output_json = json.loads(output)
- found = False
- for neighbor in output_json["areas"][0]["circuits"]:
- if "adj" in neighbor and neighbor["adj"] == "rt2":
- found = True
- break
- if not found:
- break
- time.sleep(0.05)
-
- assert not found, "rt2 neighbor is still present"
+ router = tgen.gears[rname]
+ test_func = partial(_rt2_neigh_down, router)
+ success, result = topotest.run_and_expect(test_func, None, count=200, wait=0.05)
+ assert result is None, 'rt2 neighbor is still present on "{}"'.format(router)
router_compare_json_output(
rname,
@@ -941,14 +1002,14 @@ def test_rib_ipv6_step23():
conf_file = os.path.join(CWD, "{}/bfdd.conf".format(rname))
tgen.net[rname].cmd("vtysh -f {}".format(conf_file))
- rname = "rt1"
- expect = '[{"multihop":true,"peer":"2001:db8:1000::2","local":"2001:db8:1000::1","status":"up"}]'
- router_compare_json_output(rname, "show bfd peers json", expect)
-
logger.info("Set ISIS BFD")
tgen.net["rt1"].cmd('vtysh -c "conf t" -c "int eth-rt2" -c "isis bfd"')
tgen.net["rt2"].cmd('vtysh -c "conf t" -c "int eth-rt1" -c "isis bfd"')
+ rname = "rt1"
+ expect = '[{"multihop":false,"interface":"eth-rt2","status":"up"}]'
+ router_compare_json_output(rname, "show bfd peers json", expect)
+
router_compare_json_output(
rname,
"show ipv6 route isis json",
@@ -968,6 +1029,11 @@ def test_rib_ipv6_step23():
# - Route switchover of routes via eth-rt2
#
def test_rib_ipv6_step24():
+ def _bfd_down(router):
+ output = json.loads(router.vtysh_cmd("show bfd peers json"))
+ expected = []
+ return topotest.json_cmp(output, expected, exact=True)
+
logger.info("Test (step 24): verify IPv6 RIB")
tgen = get_topogen()
@@ -979,14 +1045,10 @@ def test_rib_ipv6_step24():
tgen.net.cmd_raises("ip link set s1 down")
rname = "rt1"
- expect = '[{"multihop":true,"peer":"2001:db8:1000::2","local":"2001:db8:1000::1","status":"down"}]'
- router_compare_json_output(
- rname,
- "show bfd peers json",
- expect,
- count=40,
- wait=0.05,
- )
+ router = tgen.gears[rname]
+ test_func = partial(_bfd_down, router)
+ success, result = topotest.run_and_expect(test_func, None, count=30, wait=0.05)
+ assert result is None, 'BFD session is still up on "{}"'.format(router)
router_compare_json_output(
rname,