summaryrefslogtreecommitdiff
path: root/tests/topotests/pim-basic/test_pim.py
diff options
context:
space:
mode:
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"