Merge pull request #7566 from ton31337/fix/topotests_bgp_ebgp_requires_policy

tests: Add more descriptive error messages and increase timeouts
This commit is contained in:
Mark Stapp 2020-11-19 13:32:56 -05:00 committed by GitHub
commit 38a0ce9146
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -31,9 +31,11 @@ to send advertisements.
Scenario 1: Scenario 1:
r1 has a filter applied for outgoing direction, r1 has a filter applied for outgoing direction,
r2 receives 192.168.255.1/32. r2 receives 192.168.255.1/32.
Scenario 2: Scenario 2:
r3 hasn't a filter appied for outgoing direction, r3 hasn't a filter appied for outgoing direction,
r4 does not receive 192.168.255.1/32. r4 does not receive 192.168.255.1/32.
Scenario 3: Scenario 3:
r5 and r6 establish iBGP session which in turn should ignore r5 and r6 establish iBGP session which in turn should ignore
RFC8212. All routes for both directions MUST work. RFC8212. All routes for both directions MUST work.
@ -63,14 +65,17 @@ class TemplateTopo(Topo):
for routern in range(1, 7): for routern in range(1, 7):
tgen.add_router("r{}".format(routern)) tgen.add_router("r{}".format(routern))
# Scenario 1.
switch = tgen.add_switch("s1") switch = tgen.add_switch("s1")
switch.add_link(tgen.gears["r1"]) switch.add_link(tgen.gears["r1"])
switch.add_link(tgen.gears["r2"]) switch.add_link(tgen.gears["r2"])
# Scenario 2.
switch = tgen.add_switch("s2") switch = tgen.add_switch("s2")
switch.add_link(tgen.gears["r3"]) switch.add_link(tgen.gears["r3"])
switch.add_link(tgen.gears["r4"]) switch.add_link(tgen.gears["r4"])
# Scenario 3.
switch = tgen.add_switch("s3") switch = tgen.add_switch("s3")
switch.add_link(tgen.gears["r5"]) switch.add_link(tgen.gears["r5"])
switch.add_link(tgen.gears["r6"]) switch.add_link(tgen.gears["r6"])
@ -120,41 +125,48 @@ def test_ebgp_requires_policy():
expected = {"routes": {"172.16.255.254/32": [{"valid": True}]}} expected = {"routes": {"172.16.255.254/32": [{"valid": True}]}}
return topotest.json_cmp(output, expected) return topotest.json_cmp(output, expected)
def _bgp_advertised_routes(router):
output = json.loads(
tgen.gears[router].vtysh_cmd(
"show ip bgp neighbor 192.168.255.2 advertised-routes json"
)
)
expected = {
"advertisedRoutes": {},
"totalPrefixCounter": 0,
"filteredPrefixCounter": 0,
}
return topotest.json_cmp(output, expected)
# Scenario 1.
logger.info("Scenario 1: r2 receives 192.168.255.1/32 from r1")
test_func = functools.partial(_bgp_converge, "r2") test_func = functools.partial(_bgp_converge, "r2")
success, result = topotest.run_and_expect(test_func, None, count=65, wait=2) success, result = topotest.run_and_expect(test_func, None, count=120, wait=0.5)
assert success is True, 'Failed bgp convergence (r2) in "{}"'.format( assert success is True, "Failed bgp convergence (r2)"
tgen.gears["r2"]
)
test_func = functools.partial(_bgp_has_routes, "r2") test_func = functools.partial(_bgp_has_routes, "r2")
success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5) success, result = topotest.run_and_expect(test_func, None, count=120, wait=0.5)
assert success is True, 'eBGP policy is not working (r2) in "{}"'.format( assert success is True, "r2 does not receive 192.168.255.1/32"
tgen.gears["r2"]
)
# Scenario 2.
logger.info("Scenario 2: r3 must not send 192.168.255.1/32 to r4")
test_func = functools.partial(_bgp_converge, "r4") test_func = functools.partial(_bgp_converge, "r4")
success, result = topotest.run_and_expect(test_func, None, count=65, wait=2) success, result = topotest.run_and_expect(test_func, None, count=120, wait=0.5)
assert success is True, 'Failed bgp convergence (r4) in "{}"'.format( assert success is True, "Failed bgp convergence (r4)"
tgen.gears["r4"]
)
test_func = functools.partial(_bgp_has_routes, "r4") test_func = functools.partial(_bgp_advertised_routes, "r3")
success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5) success, result = topotest.run_and_expect(test_func, None, count=120, wait=0.5)
assert success is False, 'eBGP policy is not working (r4) in "{}"'.format( assert success is True, "r3 announced 192.168.255.1/32 to r4"
tgen.gears["r4"]
)
# Scenario 3.
logger.info("Scenario 3: r6 receives 192.168.255.1/32 from r5 (iBGP)")
test_func = functools.partial(_bgp_converge, "r6") test_func = functools.partial(_bgp_converge, "r6")
success, result = topotest.run_and_expect(test_func, None, count=65, wait=2) success, result = topotest.run_and_expect(test_func, None, count=120, wait=0.5)
assert success is True, 'Failed bgp convergence (r6) in "{}"'.format( assert success is True, "Failed bgp convergence (r6)"
tgen.gears["r6"]
)
test_func = functools.partial(_bgp_has_routes, "r6") test_func = functools.partial(_bgp_has_routes, "r6")
success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5) success, result = topotest.run_and_expect(test_func, None, count=120, wait=0.5)
assert success is True, 'eBGP policy is not working (r6) in "{}"'.format( assert success is True, "r6 does not receive 192.168.255.1/32"
tgen.gears["r6"]
)
if __name__ == "__main__": if __name__ == "__main__":