summaryrefslogtreecommitdiff
path: root/tests/topotests/pim-basic/test_pim.py
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2020-01-18 09:16:10 -0500
committerDonald Sharp <sharpd@cumulusnetworks.com>2020-01-18 13:47:29 -0500
commit12b76399a87ebe58689bac14aa71f0963a051651 (patch)
treec51ade61661679bac05a09b07375b71c7902e15a /tests/topotests/pim-basic/test_pim.py
parent9d080116b9b439e4bee274af0bf85b07871a269e (diff)
tests: Add another router to the basic pim tests
Add an additional router to the basic pim tests. 1) This test will add a link between r1 and a new rp 2) This test will ensure that r1 and rp have the expected who is the rp. 3) This test will ensure that the rp has received the upstream data for the multicast stream that is started. Ostensibly commit 68a02e06e5f103048d947262c08c569056f74d1c is the first bad commit commit 68a02e06e5f103048d947262c08c569056f74d1c Author: Mark Stapp <mjs@voltanet.io> Date: Wed Nov 13 16:06:06 2019 -0500 *: revise zapi nexthop encoding Use a per-nexthop flag to indicate the presence of labels; add some utility zapi encode/decode apis for nexthops; use the zapi apis more consistently. Signed-off-by: Mark Stapp <mjs@voltanet.io> Sparked this commit in that it broke nexthop reporting to upper level protocols. Ensure that this expectation stays working in the future. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'tests/topotests/pim-basic/test_pim.py')
-rw-r--r--tests/topotests/pim-basic/test_pim.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/topotests/pim-basic/test_pim.py b/tests/topotests/pim-basic/test_pim.py
index 6d54b8f2f0..0e0569e234 100644
--- a/tests/topotests/pim-basic/test_pim.py
+++ b/tests/topotests/pim-basic/test_pim.py
@@ -28,6 +28,8 @@ test_pim.py: Test pim
import os
import sys
import pytest
+import json
+from functools import partial
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, '../'))
@@ -47,11 +49,27 @@ class PIMTopo(Topo):
for routern in range(1, 3):
tgen.add_router('r{}'.format(routern))
+ tgen.add_router('rp')
+
+ # r1 -> .1
+ # r2 -> .2
+ # rp -> .3
+ # loopback network is 10.254.0.X/32
+ #
# r1 <- sw1 -> r2
+ # r1-eth0 <-> r2-eth0
+ # 10.0.20.0/24
sw = tgen.add_switch('sw1')
sw.add_link(tgen.gears['r1'])
sw.add_link(tgen.gears['r2'])
+ # r1 <- sw2 -> rp
+ # r1-eth1 <-> rp-eth0
+ # 10.0.30.0/24
+ sw = tgen.add_switch('sw2')
+ sw.add_link(tgen.gears['r1'])
+ sw.add_link(tgen.gears['rp'])
+
def setup_module(mod):
"Sets up the pytest environment"
@@ -68,9 +86,14 @@ def setup_module(mod):
TopoRouter.RD_PIM,
os.path.join(CWD, '{}/pimd.conf'.format(rname))
)
+ router.load_config(
+ TopoRouter.RD_BGP,
+ os.path.join(CWD, '{}/bgpd.conf'.format(rname))
+ )
# After loading the configurations, this function loads configured daemons.
tgen.start_router()
+ #tgen.mininet_cli()
def teardown_module(mod):
@@ -80,6 +103,22 @@ def teardown_module(mod):
# This function tears down the whole topology.
tgen.stop_topology()
+def test_pim_rp_setup():
+ "Ensure basic routing has come up and the rp has an outgoing interface"
+ #Ensure rp and r1 establish pim neighbor ship and bgp has come up
+ #Finally ensure that the rp has an outgoing interface on r1
+ tgen = get_topogen()
+
+ r1 = tgen.gears['r1']
+ json_file = '{}/{}/rp-info.json'.format(CWD, r1.name)
+ expected = json.loads(open(json_file).read())
+
+ test_func = partial(topotest.router_json_cmp,
+ r1, 'show ip pim rp-info json', expected)
+ _, result = topotest.run_and_expect(test_func, None, count=15, wait=5)
+ assertmsg = '"{}" JSON output mismatches'.format(r1.name)
+ assert result is None, assertmsg
+ #tgen.mininet_cli()
def test_pim_send_mcast_stream():
"Establish a Multicast stream from r2 -> r1 and then ensure S,G is created as appropriate"
@@ -90,6 +129,7 @@ def test_pim_send_mcast_stream():
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
+ rp = tgen.gears['rp']
r2 = tgen.gears['r2']
r1 = tgen.gears['r1']
@@ -111,7 +151,21 @@ def test_pim_send_mcast_stream():
}
assert topotest.json_cmp(out, expected) is None, 'failed to converge pim'
+ #tgen.mininet_cli()
+
+def test_pim_rp_sees_stream():
+ "Ensure that the RP sees the stream and has acted accordingly"
+ tgen = get_topogen()
+
+ rp = tgen.gears['rp']
+ json_file = '{}/{}/upstream.json'.format(CWD, rp.name)
+ expected = json.loads(open(json_file).read())
+ test_func = partial(topotest.router_json_cmp,
+ rp, 'show ip pim upstream json', expected)
+ _, result = topotest.run_and_expect(test_func, None, count=20, wait=.5)
+ assertmsg = '"{}" JSON output mismatches'.format(rp.name)
+ assert result is None, assertmsg
def test_pim_igmp_report():
"Send a igmp report from r2->r1 and ensure that the *,G state is created on r1"