]> git.proxmox.com Git - mirror_frr.git/blobdiff - tests/topotests/multicast_pim_static_rp_topo1/test_multicast_pim_static_rp.py
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / tests / topotests / multicast_pim_static_rp_topo1 / test_multicast_pim_static_rp.py
index a5cec9381356e3b8ebbdbb7344cacc114c439d2b..c492d95d40afd273a5d9c16226c2b46b6694c591 100755 (executable)
@@ -1,24 +1,11 @@
 #!/usr/bin/env python
+# SPDX-License-Identifier: ISC
 
 #
 # Copyright (c) 2019 by VMware, Inc. ("VMware")
 # Used Copyright (c) 2018 by Network Device Education Foundation,
 # Inc. ("NetDEF") in this file.
 #
-# Permission to use, copy, modify, and/or distribute this software
-# for any purpose with or without fee is hereby granted, provided
-# that the above copyright notice and this permission notice appear
-# in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND VMWARE DISCLAIMS ALL WARRANTIES
-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL VMWARE BE LIABLE FOR
-# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
-# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
-# OF THIS SOFTWARE.
-#
 
 """
 Following tests are covered to test Multicast basic functionality:
@@ -69,7 +56,7 @@ TC_18 : Verify RPF interface updated in mroute when higher preferred RP gets
         deleted
 TC_19 : Verify IIF and OIL in "show ip pim state" updated when higher
         preferred overlapping RP is deleted
-TC_20 : Verfiy PIM upstream IIF updated when higher preferred overlapping RP
+TC_20 : Verify PIM upstream IIF updated when higher preferred overlapping RP
         deleted
 TC_21_1 : Verify OIF and RFP for (*,G) and (S,G) when static RP configure in
           LHR router
@@ -94,7 +81,7 @@ TC_30 : Verify IIF and OIL change to other path after shut the primary path
 TC_31 : Verify RP info and (*,G) mroute after deleting the RP and shut / no
         shut the RPF interface.
 TC_32 : Verify RP info and (*,G) mroute after deleting the RP and shut / no
-        shut the RPF inteface
+        shut the RPF interface
 """
 
 import os
@@ -135,16 +122,16 @@ from lib.pim import (
     verify_igmp_groups,
     verify_upstream_iif,
     verify_join_state_and_timer,
-    verify_ip_mroutes,
+    verify_mroutes,
     verify_pim_neighbors,
     get_pim_interface_traffic,
     verify_pim_rp_info,
     verify_pim_state,
-    clear_ip_pim_interface_traffic,
-    clear_ip_igmp_interfaces,
-    clear_ip_pim_interfaces,
-    clear_ip_mroute,
-    clear_ip_mroute_verify,
+    clear_pim_interface_traffic,
+    clear_igmp_interfaces,
+    clear_pim_interfaces,
+    clear_mroute,
+    clear_mroute_verify,
     McastTesterHelper,
 )
 
@@ -223,12 +210,9 @@ def setup_module(mod):
 
     # ... and here it calls Mininet initialization functions.
 
-    # get list of daemons needs to be started for this suite.
-    daemons = topo_daemons(tgen, TOPO)
-
     # Starting topology, create tmp files which are loaded to routers
-    #  to start deamons and then start routers
-    start_topology(tgen, daemons)
+    #  to start daemons and then start routers
+    start_topology(tgen)
 
     # Don"t run this test if we have any failure.
     if tgen.routers_have_failure():
@@ -378,9 +362,8 @@ def test_add_delete_static_RP_p0(request):
     result = verify_igmp_groups(tgen, dut, interface, GROUP_ADDRESS, expected=False)
     assert result is not True, (
         "Testcase {} : Failed \n "
-        "r1: igmp group present without any IGMP join \n Error: {}".format(
-            tc_name, result
-        )
+        "Expected: [{}]: IGMP groups should not be present without any IGMP join\n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step("r1: Verify show ip pim interface traffic without any IGMP join")
@@ -419,7 +402,7 @@ def test_add_delete_static_RP_p0(request):
     result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
     step("r1: Verify ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
+    result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step("r1: Verify ip pim join")
@@ -448,17 +431,18 @@ def test_add_delete_static_RP_p0(request):
     result = verify_pim_rp_info(
         tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE, expected=False
     )
-    assert (
-        result is not True
-    ), "Testcase {} : Failed \n " "r1: RP info present \n Error: {}".format(
-        tc_name, result
+    assert result is not True, (
+        "Testcase {} : Failed \n "
+        "Expected: [{}]: RP info should not be present \n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step("r1: Verify upstream IIF interface")
     result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS, expected=False)
     assert result is not True, (
         "Testcase {} : Failed \n "
-        "r1: upstream IIF interface present \n Error: {}".format(tc_name, result)
+        "Expected: [{}]: Upstream IIF interface {} should not be present\n "
+        "Found: {}".format(tc_name, dut, iif, result)
     )
 
     step("r1: Verify upstream join state and join timer")
@@ -467,24 +451,25 @@ def test_add_delete_static_RP_p0(request):
     )
     assert result is not True, (
         "Testcase {} : Failed \n "
-        "r1: upstream join state is up and join timer is running \n Error: {}".format(
-            tc_name, result
-        )
+        "Expected: [{}]: Upstream Join State timer should not run\n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     # 20
     step("r1: Verify PIM state")
     result = verify_pim_state(tgen, dut, iif, oif, GROUP_ADDRESS, expected=False)
-    assert result is not True, "Testcase {} :Failed \n Error: {}".format(
-        tc_name, result
+    assert result is not True, (
+        "Testcase {} : Failed \n "
+        "Expected: [{}]: PIM state should not be up \n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step("r1: Verify ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
-    assert (
-        result is not True
-    ), "Testcase {} : Failed \n " "r1: mroutes are still present \n Error: {}".format(
-        tc_name, result
+    result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+    assert result is not True, (
+        "Testcase {} : Failed \n "
+        "Expected: [{}]: mroute (*, G) should not be present \n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step("r1: Verify show ip pim interface traffic without any IGMP join")
@@ -531,8 +516,8 @@ def test_SPT_RPT_path_same_p1(request):
     step("Creating configuration from JSON")
     reset_config_on_routers(tgen)
     app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
+    clear_mroute(tgen)
+    clear_pim_interface_traffic(tgen, TOPO)
 
     dut = "r1"
     intf = "r1-r3-eth2"
@@ -585,7 +570,7 @@ def test_SPT_RPT_path_same_p1(request):
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step("r1: Verify (*, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
+    result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step("r1: Verify (S, G) upstream IIF interface")
@@ -598,7 +583,7 @@ def test_SPT_RPT_path_same_p1(request):
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step("r1: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
+    result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step("r2: Verify (*, G) upstream IIF interface")
@@ -613,7 +598,7 @@ def test_SPT_RPT_path_same_p1(request):
 
     step("r2: Verify (*, G) ip mroutes")
     oif = "r2-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
+    result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step("r2: Verify (S, G) upstream IIF interface")
@@ -626,7 +611,7 @@ def test_SPT_RPT_path_same_p1(request):
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step("r2: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
+    result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step("r3: Verify (S, G) upstream IIF interface")
@@ -641,14 +626,13 @@ def test_SPT_RPT_path_same_p1(request):
     )
     assert result is not True, (
         "Testcase {} : Failed \n "
-        "r3: (S, G) upstream join state is up and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
+        "Expected: [{}]: Upstream Join State timer should not run\n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step("r3: Verify (S, G) ip mroutes")
     oif = "r3-r2-eth1"
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
+    result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     # Uncomment next line for debugging
@@ -683,8 +667,8 @@ def test_not_reachable_static_RP_p0(request):
     step("Creating configuration from JSON")
     reset_config_on_routers(tgen)
     app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
+    clear_mroute(tgen)
+    clear_pim_interface_traffic(tgen, TOPO)
 
     dut = "r1"
     intf = "r1-r3-eth2"
@@ -741,7 +725,7 @@ def test_not_reachable_static_RP_p0(request):
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step("r1 :Verify ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
+    result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step("r1: Make RP un-reachable")
@@ -770,16 +754,16 @@ def test_not_reachable_static_RP_p0(request):
     result = verify_pim_state(tgen, dut, iif, oif, GROUP_ADDRESS, expected=False)
     assert result is not True, (
         "Testcase {} : Failed \n "
-        "OIL is not same and IIF is not cleared on R1 \n Error: {}".format(
-            tc_name, result
-        )
+        "Expected: [{}]: OIL should be same and IIF should be cleared\n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step("r1: upstream IIF should be unknown , verify using show ip pim" "upstream")
     result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS, expected=False)
     assert result is not True, (
         "Testcase {} : Failed \n "
-        "r1: upstream IIF is not unknown \n Error: {}".format(tc_name, result)
+        "Expected: [{}]: Upstream IIF interface {} should be unknown \n "
+        "Found: {}".format(tc_name, dut, iif, result)
     )
 
     step(
@@ -791,9 +775,8 @@ def test_not_reachable_static_RP_p0(request):
     )
     assert result is not True, (
         "Testcase {} : Failed \n "
-        "r1: join state is joined and timer is not stopped \n Error: {}".format(
-            tc_name, result
-        )
+        "Expected: [{}]: Upstream Join State timer should not run\n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step(
@@ -811,14 +794,12 @@ def test_not_reachable_static_RP_p0(request):
     assert result is True, "Testcase{} : Failed Error: {}".format(tc_name, result)
 
     step("r1: (*, G) cleared from mroute table using show ip mroute")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+    result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
     assert result is not True, (
         "Testcase {} : Failed \n "
-        "r1: (*, G) are not cleared from mroute table \n Error: {}".format(
-            tc_name, result
-        )
+        "Expected: [{}]: mroute (*, G) should be cleared from mroute table\n "
+        "Found: {}".format(tc_name, dut, result)
     )
-    logger.info("Expected behavior: %s", result)
 
     # Uncomment next line for debugging
     # tgen.mininet_cli()
@@ -847,8 +828,8 @@ def test_add_RP_after_join_received_p1(request):
     step("Creating configuration from JSON")
     reset_config_on_routers(tgen)
     app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
+    clear_mroute(tgen)
+    clear_pim_interface_traffic(tgen, TOPO)
 
     step("Enable IGMP on R1 interface")
     step("Configure r2 loopback interface as RP")
@@ -880,10 +861,10 @@ def test_add_RP_after_join_received_p1(request):
     result = verify_pim_rp_info(
         tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE, expected=False
     )
-    assert (
-        result is not True
-    ), "Testcase {} : Failed \n " "r1: rp-info is present \n Error: {}".format(
-        tc_name, result
+    assert result is not True, (
+        "Testcase {} : Failed \n "
+        "Expected: [{}]: RP-info should not be present \n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step("joinTx value before join sent")
@@ -908,7 +889,8 @@ def test_add_RP_after_join_received_p1(request):
     result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS, expected=False)
     assert result is not True, (
         "Testcase {} : Failed \n "
-        "r1: upstream IFF interface is present \n Error: {}".format(tc_name, result)
+        "Expected: [{}]: Upstream IIF interface {} should not be present \n "
+        "Found: {}".format(tc_name, dut, iif, result)
     )
 
     step("r1: Verify upstream join state and join timer")
@@ -918,25 +900,24 @@ def test_add_RP_after_join_received_p1(request):
     )
     assert result is not True, (
         "Testcase {} : Failed \n "
-        "r1: upstream join state is joined and timer is running \n Error: {}".format(
-            tc_name, result
-        )
+        "Expected: [{}]: Upstream Join State timer should not run\n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step("r1: Verify PIM state")
     result = verify_pim_state(tgen, dut, iif, oif, GROUP_ADDRESS, expected=False)
-    assert (
-        result is not True
-    ), "Testcase {} : Failed \n " "r1: PIM state is up\n Error: {}".format(
-        tc_name, result
+    assert result is not True, (
+        "Testcase {} : Failed \n "
+        "Expected: [{}]: PIM state should not be up\n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step("r1: Verify ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
-    assert (
-        result is not True
-    ), "Testcase {} : Failed \n " "r1: mroutes are still present\n Error: {}".format(
-        tc_name, result
+    result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+    assert result is not True, (
+        "Testcase {} : Failed \n "
+        "Expected: [{}]: mroute (*, G) should not be present in mroute table \n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step("r1: Configure static RP")
@@ -975,7 +956,7 @@ def test_add_RP_after_join_received_p1(request):
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step("r1 : Verify ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
+    result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
     logger.info("Expected behavior: %s", result)
 
@@ -1015,8 +996,8 @@ def test_reachable_static_RP_after_join_p0(request):
     step("Creating configuration from JSON")
     reset_config_on_routers(tgen)
     app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
+    clear_mroute(tgen)
+    clear_pim_interface_traffic(tgen, TOPO)
 
     step("Enable IGMP on r1 interface and send IGMP " "join (225.1.1.1) to r1")
     step("Configure r2 loopback interface as RP")
@@ -1061,7 +1042,8 @@ def test_reachable_static_RP_after_join_p0(request):
     result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS, expected=False)
     assert result is not True, (
         "Testcase {} : Failed \n "
-        "r1: upstream IIF interface is present\n Error: {}".format(tc_name, result)
+        "Expected: [{}]: Upstream IIF interface {} should not be present \n "
+        "Found: {}".format(tc_name, dut, iif, result)
     )
 
     step("r1 : Verify upstream join state and join timer")
@@ -1070,25 +1052,24 @@ def test_reachable_static_RP_after_join_p0(request):
     )
     assert result is not True, (
         "Testcase {} : Failed \n "
-        "r1: upstream join state is joined and timer is running\n Error: {}".format(
-            tc_name, result
-        )
+        "Expected: [{}]: Upstream Join State timer should not run\n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step("r1 : Verify PIM state")
     result = verify_pim_state(tgen, dut, iif, oif, GROUP_ADDRESS, expected=False)
-    assert (
-        result is not True
-    ), "Testcase {} : Failed \n " "r1: PIM state is up\n Error: {}".format(
-        tc_name, result
+    assert result is not True, (
+        "Testcase {} : Failed \n "
+        "Expected: [{}]: PIM state should not be up \n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step("r1 : Verify ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
-    assert (
-        result is not True
-    ), "Testcase {} : Failed \n " "r1: mroutes are still present\n Error: {}".format(
-        tc_name, result
+    result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+    assert result is not True, (
+        "Testcase {} : Failed \n "
+        "Expected: [{}]: mroute (*, G) should not be present \n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step("r1: Make RP reachable")
@@ -1118,7 +1099,7 @@ def test_reachable_static_RP_after_join_p0(request):
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step("r1 : Verify ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
+    result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
     logger.info("Expected behavior: %s", result)
 
@@ -1157,7 +1138,7 @@ def test_send_join_on_higher_preffered_rp_p1(request):
                 gets deleted
      TC_19_P1 : Verify IIF and OIL in "show ip pim state" updated when higher
                 preferred overlapping RP is deleted
-     TC_20_P1 : Verfiy PIM upstream IIF updated when higher preferred
+     TC_20_P1 : Verify PIM upstream IIF updated when higher preferred
                 overlapping RP deleted
 
     Topology used:
@@ -1180,8 +1161,8 @@ def test_send_join_on_higher_preffered_rp_p1(request):
     step("Creating configuration from JSON")
     reset_config_on_routers(tgen)
     app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
+    clear_mroute(tgen)
+    clear_pim_interface_traffic(tgen, TOPO)
 
     step("Enable IGMP on r1 interface")
     step("Configure RP on r2 (loopback interface) for the group range " "224.0.0.0/4")
@@ -1273,7 +1254,7 @@ def test_send_join_on_higher_preffered_rp_p1(request):
 
     step("r1 : Verify ip mroutes")
     iif = "r1-r4-eth3"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
+    result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step("r1 : Verify PIM state")
@@ -1288,7 +1269,7 @@ def test_send_join_on_higher_preffered_rp_p1(request):
     result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
-    clear_ip_pim_interface_traffic(tgen, TOPO)
+    clear_pim_interface_traffic(tgen, TOPO)
 
     step("r1 : Verify joinTx, pruneTx count before RP gets deleted")
     state_dict = {"r1": {"r1-r2-eth1": ["joinTx"], "r1-r4-eth3": ["pruneTx"]}}
@@ -1332,9 +1313,8 @@ def test_send_join_on_higher_preffered_rp_p1(request):
     )
     assert result is not True, (
         "Testcase {} : Failed \n "
-        "r1: rp-info is present for group 225.1.1.1 \n Error: {}".format(
-            tc_name, result
-        )
+        "Expected: [{}]: RP-info should not be present \n "
+        "Found: {}".format(tc_name, dut, result)
     )
 
     step(
@@ -1342,7 +1322,7 @@ def test_send_join_on_higher_preffered_rp_p1(request):
         "RP gets deleted"
     )
     iif = "r1-r2-eth1"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
+    result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
     logger.info("Expected behavior: %s", result)
 
@@ -1354,7 +1334,7 @@ def test_send_join_on_higher_preffered_rp_p1(request):
     assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
 
     step(
-        "r1 : Verfiy upstream IIF updated when higher preferred overlapping"
+        "r1 : Verify upstream IIF updated when higher preferred overlapping"
         "RP deleted"
     )
     result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
@@ -1391,2555 +1371,6 @@ def test_send_join_on_higher_preffered_rp_p1(request):
     write_test_footer(tc_name)
 
 
-def test_RP_configured_as_LHR_1_p1(request):
-    """
-    TC_21_1_P1: Verify OIF and RPF for (*,G) and (S,G) when static RP configure
-             in LHR router
-
-    Topology used:
-                ________r2_____
-                |             |
-      iperf     |             |     iperf
-        r0-----r1-------------r3-----r5
-
-    r1 : LHR/RP
-    r3 : FHR
-    """
-
-    tgen = get_topogen()
-    tc_name = request.node.name
-    write_test_header(tc_name)
-
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
-    step("Creating configuration from JSON")
-    reset_config_on_routers(tgen)
-    app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
-
-    step("Enable IGMP on r1 interface")
-    step("Configure RP on r1 (loopback interface) for the group range" " 224.0.0.0/4")
-    step("Enable the PIM on all the interfaces of r1, r2, r3 and r4 routers")
-    step("Send the IGMP join from r0")
-    step("Send multicast traffic from r5")
-
-    step("r1 , r2, r3, r4: Delete existing RP configuration" "configure r1(LHR) as RP")
-    input_dict = {
-        "r1": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-        "r2": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-        "r3": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-        "r4": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-    }
-
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Configure r1(LHR) as RP")
-    input_dict = {
-        "r1": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.1.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-        "r2": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.1.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-        "r3": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.1.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-        "r4": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.1.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-    }
-
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    shutdown_bringup_interface(tgen, "r1", "lo", False)
-    sleep(5)
-    shutdown_bringup_interface(tgen, "r1", "lo", True)
-    sleep(5)
-
-    step("r1: Verify RP info")
-    dut = "r1"
-    rp_address = "1.0.1.17"
-    iif = "lo"
-    result = verify_pim_rp_info(
-        tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r0: Send IGMP join")
-    result = app_helper.run_join("r0", GROUP_ADDRESS, "r1")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify IGMP groups")
-    oif = "r1-r0-eth0"
-    result = verify_igmp_groups(tgen, dut, oif, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r5: Send multicast traffic for group 225.1.1.1")
-    result = app_helper.run_traffic("r5", GROUP_ADDRESS, "r3")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream IIF interface")
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream IIF interface")
-    iif = "r1-r3-eth2"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream IIF interface")
-    dut = "r3"
-    iif = "r3-r5-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r3: (S, G) upstream join state is joined and join"
-        " timer is running \n Error: {}".format(tc_name, result)
-    )
-
-    step("r3: Verify (S, G) ip mroutes")
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    # Uncomment next line for debugging
-    # tgen.mininet_cli()
-
-    write_test_footer(tc_name)
-
-
-def test_RP_configured_as_LHR_2_p1(request):
-    """
-    TC_21_2_P1: Verify OIF and RPF for (*,G) and (S,G) when static RP configure
-             in LHR router
-
-    Topology used:
-                ________r2_____
-                |             |
-      iperf     |             |     iperf
-        r0-----r1-------------r3-----r5
-
-    r1 : LHR/RP
-    r3 : FHR
-
-    """
-    tgen = get_topogen()
-    tc_name = request.node.name
-    write_test_header(tc_name)
-
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
-    step("Creating configuration from JSON")
-    reset_config_on_routers(tgen)
-    app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
-
-    step("Enable IGMP on r1 interface")
-    step("Configure RP on r1 (loopback interface) for the group range" " 224.0.0.0/4")
-    step("Enable the PIM on all the interfaces of r1, r2, r3 and r4 routers")
-    step("Send multicast traffic from r5")
-    step("Send the IGMP join from r0")
-
-    step("r1, r2, r3, r4: Delete existing RP configuration," "configure r1(LHR) as RP")
-    input_dict = {
-        "r1": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-        "r2": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-        "r3": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-        "r4": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-    }
-
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1, r2, r3, r4: Configure r1(LHR) as RP")
-    input_dict = {
-        "r1": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.1.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-        "r2": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.1.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-        "r3": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.1.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-        "r4": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.1.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-    }
-
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify RP info")
-    dut = "r1"
-    rp_address = "1.0.1.17"
-    iif = "lo"
-    result = verify_pim_rp_info(tgen, TOPO, dut, GROUP_ADDRESS, iif, rp_address, SOURCE)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r5: Send multicast traffic for group 225.1.1.1")
-    result = app_helper.run_traffic("r5", GROUP_ADDRESS, "r3")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r0: Send IGMP join")
-    result = app_helper.run_join("r0", GROUP_ADDRESS, "r1")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify IGMP groups")
-    oif = "r1-r0-eth0"
-    result = verify_igmp_groups(tgen, dut, oif, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream IIF interface")
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream IIF interface")
-    iif = "r1-r3-eth2"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream IIF interface")
-    dut = "r3"
-    iif = "r3-r5-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r3: Verify (S, G) ip mroutes")
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    # Uncomment next line for debugging
-    # tgen.mininet_cli()
-
-    write_test_footer(tc_name)
-
-
-def test_RP_configured_as_FHR_1_p1(request):
-    """
-    TC_22_1_P1: Verify OIF and RFP for (*,G) and (S,G) when static RP configure
-             in FHR router
-
-    Topology used:
-                ________r2_____
-                |             |
-      iperf     |             |     iperf
-        r0-----r1-------------r3-----r5
-
-    r1 : LHR
-    r3 : FHR/RP
-    """
-
-    tgen = get_topogen()
-    tc_name = request.node.name
-    write_test_header(tc_name)
-
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
-    step("Creating configuration from JSON")
-    reset_config_on_routers(tgen)
-    app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
-
-    step("Enable IGMP on r1 interface")
-    step("Configure RP on r2 (loopback interface) for the group range" " 225.1.1.0/24")
-    step("Enable the PIM on all the interfaces of r1, r2, r3 and r4 routers")
-    step("Send the IGMP join from r0")
-    step("Send multicast traffic from r5")
-
-    step("r1, r2, r3, r4: Delete existing RP configuration" "configure r3(FHR) as RP")
-    input_dict = {
-        "r1": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-        "r2": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-        "r3": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-        "r4": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-    }
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1, r2, r3, r4: Configure r3(FHR) as RP")
-    input_dict = {
-        "r1": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.3.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-        "r2": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.3.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-        "r3": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.3.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-        "r4": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.3.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-    }
-
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify RP info")
-    dut = "r1"
-    rp_address = "1.0.3.17"
-    iif = "r1-r3-eth2"
-    result = verify_pim_rp_info(
-        tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r0: Send IGMP join")
-    result = app_helper.run_join("r0", GROUP_ADDRESS, "r1")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r0: Verify IGMP groups")
-    oif = "r1-r0-eth0"
-    result = verify_igmp_groups(tgen, dut, oif, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r5: Send multicast traffic for group 225.1.1.1")
-    result = app_helper.run_traffic("r5", GROUP_ADDRESS, "r3")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream IIF interface")
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream IIF interface")
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream IIF interface")
-    dut = "r3"
-    iif = "r3-r5-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r3: Verify (S, G) ip mroutes")
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    # Uncomment next line for debugging
-    # tgen.mininet_cli()
-
-    write_test_footer(tc_name)
-
-
-def test_RP_configured_as_FHR_2_p2(request):
-    """
-    TC_22_2_P2: Verify OIF and RFP for (*,G) and (S,G) when static RP configure
-             in FHR router
-
-    Topology used:
-                ________r2_____
-                |             |
-      iperf     |             |     iperf
-        r0-----r1-------------r3-----r5
-
-    r1 : LHR
-    r3 : FHR/RP
-    """
-    tgen = get_topogen()
-    tc_name = request.node.name
-    write_test_header(tc_name)
-
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
-    step("Creating configuration from JSON")
-    reset_config_on_routers(tgen)
-    app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
-
-    step("Enable IGMP on r1 interface")
-    step("Configure RP on r2 (loopback interface) for the group range" " 225.1.1.0/24")
-    step("Enable the PIM on all the interfaces of r1, r2, r3 and r4 routers")
-    step("Send multicast traffic from r5")
-    step("Send the IGMP join from r0")
-
-    step("r1, r2, r3, r4: Delete existing RP configuration" "configure r3(FHR) as RP")
-    input_dict = {
-        "r1": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-        "r2": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-        "r3": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-        "r4": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-    }
-
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1, r2, r3, r4: Configure r3(FHR) as RP")
-    input_dict = {
-        "r1": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.3.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-        "r2": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.3.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-        "r3": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.3.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-        "r4": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.3.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        },
-    }
-
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify RP info")
-    dut = "r1"
-    rp_address = "1.0.3.17"
-    iif = "r1-r3-eth2"
-    result = verify_pim_rp_info(
-        tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r5: Send multicast traffic for group 225.1.1.1")
-    result = app_helper.run_traffic("r5", GROUP_ADDRESS, "r3")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r0: Send IGMP join")
-    result = app_helper.run_join("r0", GROUP_ADDRESS, "r1")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r0: Verify IGMP groups")
-    oif = "r1-r0-eth0"
-    result = verify_igmp_groups(tgen, dut, oif, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream IIF interface")
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream IIF interface")
-    iif = "r1-r3-eth2"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream IIF interface")
-    dut = "r3"
-    iif = "r3-r5-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r3: Verify (S, G) ip mroutes")
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    # Uncomment next line for debugging
-    # tgen.mininet_cli()
-
-    write_test_footer(tc_name)
-
-
-def test_SPT_RPT_path_different_p1(request):
-    """
-    TC_23_P1: Verify (*,G) and (S,G) populated correctly when RPT and SPT path
-              are different
-
-    Topology used:
-                ________r2_____
-                |             |
-      iperf     |             |     iperf
-        r0-----r1-------------r3-----r5
-
-    r1: LHR
-    r2: RP
-    r3: FHR
-    """
-
-    tgen = get_topogen()
-    tc_name = request.node.name
-    write_test_header(tc_name)
-
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
-    step("Creating configuration from JSON")
-    reset_config_on_routers(tgen)
-    app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
-
-    step("Enable IGMP on r1 interface and send IGMP join (225.1.1.1) to r1")
-    step("Configure RP on r2 (loopback interface) for the group range" " 224.0.0.0/4")
-    step("Enable the PIM on all the interfaces of r1, r2, r3 and r4 routers")
-    step("Send multicast traffic from r3")
-
-    step("r2: Verify RP info")
-    dut = "r2"
-    rp_address = "1.0.2.17"
-    iif = "lo"
-    result = verify_pim_rp_info(tgen, TOPO, dut, GROUP_ADDRESS, iif, rp_address, SOURCE)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r0: Send IGMP join")
-    result = app_helper.run_join("r0", GROUP_ADDRESS, "r1")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify IGMP groups")
-    dut = "r1"
-    oif = "r1-r0-eth0"
-    result = verify_igmp_groups(tgen, dut, oif, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r5: Send multicast traffic for group 225.1.1.1")
-    result = app_helper.run_traffic("r5", GROUP_ADDRESS, "r3")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream IIF interface")
-    iif = "r1-r2-eth1"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream IIF interface")
-    iif = "r1-r3-eth2"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) upstream IIF interface")
-    dut = "r2"
-    iif = "lo"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) ip mroutes")
-    oif = "r2-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream IIF interface")
-    dut = "r3"
-    iif = "r3-r5-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r3: Verify (S, G) ip mroutes")
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (S, G) upstream IIF interface")
-    dut = "r2"
-    iif = "r2-r3-eth1"
-    result = verify_upstream_iif(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, joinState="NotJoined"
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r2: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r2: Verify (S, G) ip mroutes")
-    oif = "none"
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    # Uncomment next line for debugging
-    # tgen.mininet_cli()
-
-    write_test_footer(tc_name)
-
-
-def test_clear_pim_configuration_p1(request):
-    """
-    TC_25_P1: Verify (*,G) and (S,G) populated correctly after clearing the
-              PIM,IGMP and mroutes joins
-
-    Topology used:
-                ________r2_____
-                |             |
-      iperf     |             |     iperf
-        r0-----r1-------------r3-----r5
-                |             |
-                |_____________|
-                        r4
-    r1 : LHR
-    r2 : RP
-    r3 : FHR
-    """
-
-    tgen = get_topogen()
-    tc_name = request.node.name
-    write_test_header(tc_name)
-
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
-    step("Creating configuration from JSON")
-    reset_config_on_routers(tgen)
-    app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
-
-    step("Enable IGMP on r1 interface")
-    step("Configure RP on r2 (loopback interface) for the group range" " 224.0.0.0/4")
-    step("Enable the PIM on all the interfaces of r1, r2, r3 and r4 routers")
-    step("Send the IGMP join from r0")
-    step("Send multicast traffic from r5")
-
-    step("r2: Verify RP info")
-    dut = "r2"
-    rp_address = "1.0.2.17"
-    oif = "lo"
-    result = verify_pim_rp_info(
-        tgen, TOPO, dut, GROUP_RANGE_ALL, oif, rp_address, SOURCE
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r0: Send IGMP join")
-    result = app_helper.run_join("r0", GROUP_ADDRESS, "r1")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify IGMP groups")
-    dut = "r1"
-    iif = "r1-r0-eth0"
-    result = verify_igmp_groups(tgen, dut, iif, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r5: Send multicast traffic for group 225.1.1.1")
-    result = app_helper.run_traffic("r5", GROUP_ADDRESS, "r3")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream IIF interface")
-    dut = "r1"
-    iif = "r1-r2-eth1"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    oif = "r1-r0-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify IGMP groups timer restarted")
-    result = clear_ip_igmp_interfaces(tgen, dut)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify PIM neighbor timer restarted")
-    result = clear_ip_pim_interfaces(tgen, dut)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify PIM mroute timer restarted")
-    result = clear_ip_mroute_verify(tgen, dut)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    # Uncomment next line for debugging
-    # tgen.mininet_cli()
-
-    write_test_footer(tc_name)
-
-
-def test_restart_pimd_process_p2(request):
-    """
-    TC_26_P2: Restart the PIMd process and verify PIM upstream and mroutes
-              entries
-    Topology used:
-                ________r2_____
-                |             |
-      iperf     |             |     iperf
-        r0-----r1-------------r3-----r5
-                |             |
-                |_____________|
-                        r4
-    r1 : LHR
-    r2 : RP
-    r3 : FHR
-    """
-
-    tgen = get_topogen()
-    tc_name = request.node.name
-    write_test_header(tc_name)
-
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
-    step("Creating configuration from JSON")
-    reset_config_on_routers(tgen)
-    app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
-
-    step("Enable IGMP on r1 interface and send IGMP join (225.1.1.1) to R1")
-    step("Configure RP on r3 (loopback interface) for the group range" " 224.0.0.0/4")
-    step("Enable the PIM on all the interfaces of r1, r2, r3 and r4 routers")
-    step("Send multicast traffic from R3")
-    step("Restart the PIMd process")
-
-    step("r2: Verify RP info")
-    dut = "r2"
-    rp_address = "1.0.2.17"
-    oif = "lo"
-    result = verify_pim_rp_info(
-        tgen, TOPO, dut, GROUP_RANGE_ALL, oif, rp_address, SOURCE
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r0: Send IGMP join")
-    result = app_helper.run_join("r0", GROUP_ADDRESS, "r1")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify IGMP groups")
-    dut = "r1"
-    oif = "r1-r0-eth0"
-    result = verify_igmp_groups(tgen, dut, oif, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r5: Send multicast traffic for group 225.1.1.1")
-    result = app_helper.run_traffic("r5", GROUP_ADDRESS, "r3")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream IIF interface")
-    iif = "r1-r2-eth1"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream IIF interface")
-    iif = "r1-r3-eth2"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) upstream IIF interface")
-    dut = "r2"
-    iif = "lo"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) ip mroutes")
-    oif = "r2-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream IIF interface")
-    dut = "r3"
-    iif = "r3-r5-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r3: Verify (S, G) ip mroutes")
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    dut = "r1"
-    iif = "r1-r2-eth1"
-    oil = "r1-r0-eth0"
-    logger.info("waiting for 10 sec to make sure old mroute time is higher")
-    sleep(10)
-    # Why do we then wait 60 seconds below before checking the routes?
-    uptime_before = verify_ip_mroutes(
-        tgen, dut, STAR, GROUP_ADDRESS, iif, oil, return_uptime=True, mwait=60
-    )
-    assert isinstance(uptime_before, dict), "Testcase{} : Failed Error: {}".format(
-        tc_name, result
-    )
-
-    step("r1: Kill pimd process")
-    kill_router_daemons(tgen, "r1", ["pimd"])
-
-    step("r1 : Start pimd process")
-    start_router_daemons(tgen, "r1", ["pimd"])
-
-    logger.info("Waiting for 5sec to get PIMd restarted and mroute" " re-learned..")
-    sleep(5)
-
-    # Why do we then wait 10 seconds below before checking the routes?
-    uptime_after = verify_ip_mroutes(
-        tgen, dut, STAR, GROUP_ADDRESS, iif, oil, return_uptime=True, mwait=10
-    )
-    assert isinstance(uptime_after, dict), "Testcase{} : Failed Error: {}".format(
-        tc_name, result
-    )
-
-    result = verify_mroute_repopulated(uptime_before, uptime_after)
-    assert result is True, "Testcase{} : Failed Error: {}".format(tc_name, result)
-
-    write_test_footer(tc_name)
-
-
-def test_multiple_groups_same_RP_address_p2(request):
-    """
-    TC_27_P2: Configure multiple  groups (10 grps) with same RP address
-
-    Topology used:
-                ________r2_____
-                |             |
-      iperf     |             |     iperf
-        r0-----r1-------------r3-----r5
-
-    r1 : LHR
-    r2 : RP
-    r3 : FHR
-    """
-
-    tgen = get_topogen()
-    tc_name = request.node.name
-    write_test_header(tc_name)
-
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
-    step("Creating configuration from JSON")
-    reset_config_on_routers(tgen)
-    app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
-
-    step("Enable IGMP on r1 interface and send IGMP join (225.1.1.1) to r1")
-    step("Configure RP on r2 (loopback interface) for the group range" "225.1.1.0/24")
-    step("Enable the PIM on all the interfaces of r1-r2-r3")
-    step("Send multicast traffic from r5 to all the groups")
-    step("r1 : Remove the groups to RP mapping one by one")
-    step("r1: Shut the upstream interfaces")
-    step("r1: No shut the upstream interfaces")
-    step("r1: Configure the RP again")
-    step("r1: Shut the receiver interfaces")
-    step("r1: No Shut the receiver interfaces")
-    step("r2: Verify RP info")
-
-    step("r2: verify rp-info")
-    dut = "r2"
-    rp_address = "1.0.2.17"
-    oif = "lo"
-    result = verify_pim_rp_info(
-        tgen, TOPO, dut, GROUP_RANGE_ALL, oif, rp_address, SOURCE
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    group_address_list = GROUP_ADDRESS_LIST_1 + GROUP_ADDRESS_LIST_2
-    step("r0: Send IGMP join for 10 groups")
-    result = app_helper.run_join("r0", group_address_list, "r1")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify IGMP groups")
-    dut = "r1"
-    oif = "r1-r0-eth0"
-    result = verify_igmp_groups(tgen, dut, oif, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r5: Send multicast traffic for group 225.1.1.1")
-    result = app_helper.run_traffic("r5", group_address_list, "r3")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream IIF interface")
-    dut = "r1"
-    iif = "r1-r2-eth1"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    oif = "r1-r0-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, group_address_list, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream IIF interface")
-    iif = "r1-r3-eth2"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, group_address_list
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) upstream IIF interface")
-    dut = "r2"
-    iif = "lo"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) ip mroutes")
-    oif = "r2-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, group_address_list, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream IIF interface")
-    dut = "r3"
-    iif = "r3-r5-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, group_address_list, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r3: Verify (S, G) ip mroutes")
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (S, G) upstream IIF interface")
-    dut = "r2"
-    iif = "r2-r3-eth1"
-    result = verify_upstream_iif(
-        tgen, dut, iif, SOURCE_ADDRESS, group_address_list, joinState="NotJoined"
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, group_address_list, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r2: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r2: Verify (S, G) ip mroutes")
-    oif = "none"
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Delete RP configuration")
-    input_dict = {
-        "r1": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        }
-    }
-
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Shut the interface r1-r2-eth1 from R1 to R2")
-    dut = "r1"
-    intf = "r1-r2-eth1"
-    shutdown_bringup_interface(tgen, dut, intf, False)
-
-    step("r1: No Shut the interface r1-r2-eth1 from R1 to R2")
-    intf = "r1-r2-eth1"
-    shutdown_bringup_interface(tgen, dut, intf, True)
-
-    step("r1: Configure RP")
-    input_dict = {
-        "r1": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                    }
-                ]
-            }
-        }
-    }
-
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Shut the interface r1-r0-eth0 from R1 to R2")
-    intf = "r1-r0-eth0"
-    shutdown_bringup_interface(tgen, dut, intf, False)
-
-    step("r1: No Shut the interface r1-r0-eth0 from R1 to R2")
-    intf = "r1-r0-eth0"
-    shutdown_bringup_interface(tgen, dut, intf, True)
-
-    step("r1: Verify (*, G) upstream IIF interface")
-    dut = "r1"
-    iif = "r1-r2-eth1"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    oif = "r1-r0-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, group_address_list, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream IIF interface")
-    iif = "r1-r3-eth2"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, group_address_list
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) upstream IIF interface")
-    dut = "r2"
-    iif = "lo"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) ip mroutes")
-    oif = "r2-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, group_address_list, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (S, G) upstream IIF interface")
-    dut = "r2"
-    iif = "r2-r3-eth1"
-    result = verify_upstream_iif(
-        tgen, dut, iif, SOURCE_ADDRESS, group_address_list, joinState="NotJoined"
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, group_address_list, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r2: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r2: Verify (S, G) ip mroutes")
-    oif = "none"
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream IIF interface")
-    dut = "r3"
-    iif = "r3-r5-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, group_address_list, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r3: Verify (S, G) ip mroutes")
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    write_test_footer(tc_name)
-
-
-def test_multiple_groups_different_RP_address_p2(request):
-    """
-    TC_28_P2: Verify IIF and OIL in updated in mroute when upstream interface
-              configure as RP
-
-    Topology used:
-                ________r2_____
-                |             |
-      iperf     |             |     iperf
-        r0-----r1-------------r3-----r5
-                |             |
-                |_____________|
-                        r4
-    r1 : LHR
-    r2 & r4 : RP
-    r3 : FHR
-    """
-
-    tgen = get_topogen()
-    tc_name = request.node.name
-    write_test_header(tc_name)
-
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
-    step("Creating configuration from JSON")
-    reset_config_on_routers(tgen)
-    app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
-
-    step("Delete existing RP configuration")
-    input_dict = {
-        "r2": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        }
-    }
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    input_dict = {
-        "r2": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_LIST_1,
-                    }
-                ]
-            }
-        },
-        "r4": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.4.17",
-                        "group_addr_range": GROUP_RANGE_LIST_2,
-                    }
-                ]
-            }
-        },
-    }
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify RP info")
-    dut = "r2"
-    rp_address = "1.0.2.17"
-    oif = "lo"
-    result = verify_pim_rp_info(
-        tgen, TOPO, dut, GROUP_RANGE_LIST_1, oif, rp_address, SOURCE
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r4: Verify RP info")
-    dut = "r4"
-    rp_address = "1.0.4.17"
-    result = verify_pim_rp_info(
-        tgen, TOPO, dut, GROUP_RANGE_LIST_2, oif, rp_address, SOURCE
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    group_address_list = GROUP_ADDRESS_LIST_1 + GROUP_ADDRESS_LIST_2
-    step("r0: Send IGMP join")
-    result = app_helper.run_join("r0", group_address_list, "r1")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify IGMP groups")
-    dut = "r1"
-    oif = "r1-r0-eth0"
-    result = verify_igmp_groups(tgen, dut, oif, group_address_list)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r5: Send multicast traffic for group 225.1.1.1")
-    result = app_helper.run_traffic("r5", group_address_list, "r3")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream IIF interface")
-    dut = "r1"
-    iif = "r1-r2-eth1"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_1)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_1)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_1, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream IIF interface")
-    iif = "r1-r3-eth2"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(
-        tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) upstream IIF interface")
-    dut = "r2"
-    iif = "lo"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_1)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_1)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) ip mroutes")
-    oif = "r2-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_1, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (S, G) upstream IIF interface")
-    iif = "r2-r3-eth1"
-    result = verify_upstream_iif(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, joinState="NotJoined"
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r2: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r2: Verify (S, G) ip mroutes")
-    oif = "none"
-    result = verify_ip_mroutes(
-        tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream IIF interface")
-    dut = "r3"
-    iif = "r3-r5-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r3: Verify (S, G) ip mroutes")
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(
-        tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream IIF interface")
-    dut = "r1"
-    iif = "r1-r4-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_2)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_2)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    oif = "r1-r0-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_2, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream IIF interface")
-    iif = "r1-r3-eth2"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(
-        tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r4: Verify (*, G) upstream IIF interface")
-    dut = "r4"
-    iif = "lo"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_2)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r4: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_2)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r4: Verify (*, G) ip mroutes")
-    oif = "r4-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_2, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r4: Verify (S, G) upstream IIF interface")
-    iif = "r4-r3-eth1"
-    result = verify_upstream_iif(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, joinState="NotJoined"
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r4: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r4: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r4: Verify (S, G) ip mroutes")
-    oif = "none"
-    result = verify_ip_mroutes(
-        tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream IIF interface")
-    dut = "r3"
-    iif = "r3-r5-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, expected=False
-    )
-    assert result is not True, "Testcase {} :Failed \n Error: {}".format(
-        tc_name, result
-    )
-
-    step("r3: Verify (S, G) ip mroutes")
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(
-        tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("Delete RP configuration")
-    input_dict = {
-        "r2": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_LIST_1,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-        "r4": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.4.17",
-                        "group_addr_range": GROUP_RANGE_LIST_2,
-                        "delete": True,
-                    }
-                ]
-            }
-        },
-    }
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1, r2, r3, r4: Re-configure RP")
-    input_dict = {
-        "r2": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_LIST_1,
-                    }
-                ]
-            }
-        },
-        "r4": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.4.17",
-                        "group_addr_range": GROUP_RANGE_LIST_2,
-                    }
-                ]
-            }
-        },
-    }
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Shut the interface r1-r2-eth1 from R1 to R2")
-    dut = "r1"
-    intf = "r1-r2-eth1"
-    shutdown_bringup_interface(tgen, dut, intf, False)
-
-    step("r1: No shut the interface r1-r2-eth1 from R1 to R2")
-    dut = "r1"
-    intf = "r1-r2-eth1"
-    shutdown_bringup_interface(tgen, dut, intf, True)
-
-    step("r1: Shut the interface r1-r2-eth1 from R1 to R4")
-    dut = "r1"
-    intf = "r1-r4-eth3"
-    shutdown_bringup_interface(tgen, dut, intf, False)
-
-    step("r1: No shut the interface r1-r2-eth1 from R1 to r4")
-    dut = "r1"
-    intf = "r1-r4-eth3"
-    shutdown_bringup_interface(tgen, dut, intf, True)
-
-    step("r1: Shut the interface r1-r0-eth0 from R1 to R0")
-    dut = "r1"
-    intf = "r1-r0-eth0"
-    shutdown_bringup_interface(tgen, dut, intf, False)
-
-    step("r1: No Shut the interface r1-r0-eth0 from R1 to R0")
-    dut = "r1"
-    intf = "r1-r0-eth0"
-    shutdown_bringup_interface(tgen, dut, intf, True)
-
-    step("r1: Verify (*, G) upstream IIF interface")
-    dut = "r1"
-    iif = "r1-r2-eth1"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_1)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_1)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    oif = "r1-r0-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_1, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream IIF interface")
-    iif = "r1-r3-eth2"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(
-        tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) upstream IIF interface")
-    dut = "r2"
-    iif = "lo"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_1)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_1)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) ip mroutes")
-    oif = "r2-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_1, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (S, G) upstream IIF interface")
-    iif = "r2-r3-eth1"
-    result = verify_upstream_iif(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, joinState="NotJoined"
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r2: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r2: Verify (S, G) ip mroutes")
-    oif = "none"
-    result = verify_ip_mroutes(
-        tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream IIF interface")
-    dut = "r3"
-    iif = "r3-r5-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r3: Verify (S, G) ip mroutes")
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(
-        tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream IIF interface")
-    dut = "r1"
-    iif = "r1-r4-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_2)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_2)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    oif = "r1-r0-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_2, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream IIF interface")
-    iif = "r1-r3-eth2"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (S, G) ip mroutes")
-    result = verify_ip_mroutes(
-        tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r4: Verify (*, G) upstream IIF interface")
-    dut = "r4"
-    iif = "lo"
-    result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_2)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r4: Verify (*, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST_2)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r4: Verify (*, G) ip mroutes")
-    oif = "r4-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_2, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r4: Verify (S, G) upstream IIF interface")
-    iif = "r4-r3-eth1"
-    result = verify_upstream_iif(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, joinState="NotJoined"
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r4: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r4: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r4: Verify (S, G) ip mroutes")
-    oif = "none"
-    result = verify_ip_mroutes(
-        tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream IIF interface")
-    dut = "r3"
-    iif = "r3-r5-eth3"
-    result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (S, G) upstream join state and join timer")
-    result = verify_join_state_and_timer(
-        tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, expected=False
-    )
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r3: Verify (S, G) ip mroutes")
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(
-        tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    write_test_footer(tc_name)
-
-
-def test_shutdown_primary_path_p1(request):
-    """
-    TC_30_P1: Verify IIF and OIL change to other path after shut the primary
-              path
-
-    Topology used:
-                ________r2_____
-                |             |
-      iperf     |             |
-        r0-----r1-------------r3
-    """
-
-    tgen = get_topogen()
-    tc_name = request.node.name
-    write_test_header(tc_name)
-
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
-    step("Creating configuration from JSON")
-    reset_config_on_routers(tgen)
-    app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
-
-    # Steps to execute
-    step("Enable IGMP on r1 interface")
-    step("Configure RP on r2 (loopback interface) for the group range" " 224.0.0.0/4")
-    step("r1: Shut the link from r1 to r2")
-    step("r3: Shut the link from r1 to r3")
-    step("r1: No shut the link from r1 to r2")
-    step("r3: No shut the link from r1 to r3")
-
-    step("r1: Verify RP info")
-    dut = "r1"
-    rp_address = "1.0.2.17"
-    iif = "r1-r2-eth1"
-    result = verify_pim_rp_info(
-        tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r0: Send IGMP join")
-    result = app_helper.run_join("r0", GROUP_ADDRESS, "r1")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify IGMP groups")
-    oif = "r1-r0-eth0"
-    result = verify_igmp_groups(tgen, dut, oif, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) ip mroutes")
-    dut = "r2"
-    iif = "lo"
-    oif = "r2-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Shut the interface r1-r2-eth1 from R1 to R2")
-    dut = "r1"
-    intf = "r1-r2-eth1"
-    shutdown_bringup_interface(tgen, dut, intf, False)
-
-    step(
-        "Verify after shut the R1 to R2 link , verify join is reaching to RP"
-        "via other path"
-    )
-
-    logger.info("Waiting for 110 sec only if test run with crucible")
-
-    step("r1: Verify (*, G) ip mroutes")
-    dut = "r1"
-    iif = "r1-r3-eth2"
-    oif = "r1-r0-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) ip mroutes")
-    dut = "r2"
-    iif = "lo"
-    oif = "r2-r3-eth1"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (*, G) ip mroutes")
-    dut = "r3"
-    iif = "r3-r2-eth1"
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Shut the link from R1 to R3 from R3 node")
-    dut = "r3"
-    intf = "r3-r1-eth0"
-    shutdown_bringup_interface(tgen, dut, intf, False)
-
-    step(
-        "Verify after shut of R1 to R3 link , verify (*,G) entries got"
-        " cleared from all the node R1, R2, R3"
-    )
-
-    step("r1: Verify (*, G) ip mroutes")
-    dut = "r1"
-    iif = "r1-r3-eth2"
-    oif = "r1-r0-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r1: (*,G) mroutes are not cleared after shut of R1 to R3 link\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r2: Verify (*, G) ip mroutes")
-    dut = "r2"
-    iif = "lo"
-    oif = "r2-r3-eth1"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r2: (*,G) mroutes are not cleared after shut of R1 to R3 link\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r3: Verify (*, G) ip mroutes")
-    dut = "r3"
-    iif = "r3-r2-eth1"
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r3: (*,G) mroutes are not cleared after shut of R1 to R3 link\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r3: No shutdown the link from R1 to R3 from R3 node")
-    dut = "r3"
-    intf = "r3-r1-eth0"
-    shutdown_bringup_interface(tgen, dut, intf, True)
-
-    step("r1: Verify (*, G) ip mroutes")
-    dut = "r1"
-    iif = "r1-r3-eth2"
-    oif = "r1-r0-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) ip mroutes")
-    dut = "r2"
-    iif = "lo"
-    oif = "r2-r3-eth1"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r3: Verify (*, G) ip mroutes")
-    dut = "r3"
-    iif = "r3-r2-eth1"
-    oif = "r3-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: No shutdown the link from R1 to R2 from R1 node")
-    dut = "r1"
-    intf = "r1-r2-eth1"
-    shutdown_bringup_interface(tgen, dut, intf, True)
-
-    step("r1: Verify (*, G) ip mroutes")
-    dut = "r1"
-    iif = "r1-r2-eth1"
-    oif = "r1-r0-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) ip mroutes")
-    dut = "r2"
-    iif = "lo"
-    oif = "r2-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    write_test_footer(tc_name)
-
-
-def test_delete_RP_shut_noshut_upstream_interface_p1(request):
-    """
-    TC_31_P1: Verify RP info and (*,G) mroute after deleting the RP and shut /
-           no shut the RPF interface.
-    Topology used:
-                ________r2_____
-                |             |
-      iperf     |             |
-        r0-----r1-------------r3
-    """
-
-    tgen = get_topogen()
-    tc_name = request.node.name
-    write_test_header(tc_name)
-
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
-    step("Creating configuration from JSON")
-    reset_config_on_routers(tgen)
-    app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
-
-    step("Enable IGMP on r1 interface")
-    step("Configure RP on r2 (loopback interface) for the group range" " 224.0.0.0/4")
-    step("r1: Delete the RP config")
-    step("r1: Shut and no shut the upstream interface (R1-R2) connected link")
-    step("r1: Shut and no shut the OIL interface")
-
-    step("r1: Verify RP info")
-    dut = "r1"
-    rp_address = "1.0.2.17"
-    iif = "r1-r2-eth1"
-    result = verify_pim_rp_info(
-        tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r0: Send IGMP join")
-    result = app_helper.run_join("r0", GROUP_ADDRESS, "r1")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify IGMP groups")
-    dut = "r1"
-    oif = "r1-r0-eth0"
-    result = verify_igmp_groups(tgen, dut, oif, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes created")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) ip mroutes created")
-    dut = "r2"
-    iif = "lo"
-    oif = "r2-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Delete RP configuration")
-
-    # Delete RP configuration
-    input_dict = {
-        "r1": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        }
-    }
-
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Shut the interface r1-r2-eth1 from R1 to R2")
-    dut = "r1"
-    intf = "r1-r2-eth1"
-    shutdown_bringup_interface(tgen, dut, intf, False)
-
-    step("r1: No shutdown the interface r1-r2-eth1 from R1 to R2")
-    dut = "r1"
-    intf = "r1-r2-eth1"
-    shutdown_bringup_interface(tgen, dut, intf, True)
-
-    step("r1: Shutdown the OIL interface r1-r0-eth0 from R1 to R0 ")
-    dut = "r1"
-    intf = "r1-r0-eth0"
-    shutdown_bringup_interface(tgen, dut, intf, False)
-
-    step("r1: No shutdown the OIL interface r1-r0-eth0 from R1 to R0")
-    dut = "r1"
-    intf = "r1-r0-eth0"
-    shutdown_bringup_interface(tgen, dut, intf, True)
-
-    step("r1: Verify (*, G) ip mroutes cleared")
-    dut = "r1"
-    iif = "r1-r2-eth1"
-    oif = "r1-r0-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r1: (*,G) mroutes are not cleared after shut of R1 to R0 link\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r2: Verify (*, G) ip mroutes cleared")
-    dut = "r2"
-    iif = "lo"
-    oif = "r2-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r2: (*,G) mroutes are not cleared after shut of R1 to R0 link\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    write_test_footer(tc_name)
-
-
-def test_delete_RP_shut_noshut_RP_interface_p1(request):
-    """
-    TC_32_P1: Verify RP info and (*,G) mroute after deleting the RP and shut/
-           no shut the RPF inteface
-
-    Topology used:
-                ________r2_____
-                |             |
-      iperf     |             |
-        r0-----r1-------------r3
-    """
-
-    tgen = get_topogen()
-    tc_name = request.node.name
-    write_test_header(tc_name)
-
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
-    step("Creating configuration from JSON")
-    reset_config_on_routers(tgen)
-    app_helper.stop_all_hosts()
-    clear_ip_mroute(tgen)
-    clear_ip_pim_interface_traffic(tgen, TOPO)
-
-    step("Enable IGMP on r1 interface")
-    step("Configure RP on r2 (lo) for the group range" " 224.0.0.0/4")
-    step("r2: Delete the RP configuration")
-    step("r2: Shut the RP interface (lo)")
-    step("r1: Shut the interface(r1-r2-eth1, r1-r3-eth2) towards rp")
-
-    step("r1: Verify RP info")
-    dut = "r1"
-    rp_address = "1.0.2.17"
-    iif = "r1-r2-eth1"
-    result = verify_pim_rp_info(
-        tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
-    )
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r0: Send IGMP join")
-    result = app_helper.run_join("r0", GROUP_ADDRESS, "r1")
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify IGMP groups")
-    oif = "r1-r0-eth0"
-    result = verify_igmp_groups(tgen, dut, oif, GROUP_ADDRESS)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r1: Verify (*, G) ip mroutes created")
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Verify (*, G) ip mroutes created")
-    dut = "r2"
-    iif = "lo"
-    oif = "r2-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Delete RP configuration")
-
-    # Delete RP configuration
-    input_dict = {
-        "r2": {
-            "pim": {
-                "rp": [
-                    {
-                        "rp_addr": "1.0.2.17",
-                        "group_addr_range": GROUP_RANGE_ALL,
-                        "delete": True,
-                    }
-                ]
-            }
-        }
-    }
-
-    result = create_pim_config(tgen, TOPO, input_dict)
-    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
-
-    step("r2: Shut the RP interface lo")
-    dut = "r2"
-    intf = "lo"
-    shutdown_bringup_interface(tgen, dut, intf, False)
-
-    step("r1: Shut the interface r1-r2-eth1 towards RP")
-    dut = "r1"
-    intf = "r1-r2-eth1"
-    shutdown_bringup_interface(tgen, dut, intf, False)
-
-    step("r1: Shut the interface r1-r3-eth2 towards RP")
-    dut = "r1"
-    intf = "r1-r3-eth2"
-    shutdown_bringup_interface(tgen, dut, intf, False)
-
-    step("r1: Verify (*, G) ip mroutes cleared")
-    dut = "r1"
-    iif = "r1-r2-eth1"
-    oif = "r1-r0-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r1: (*,G) mroutes are not cleared after shut of R1 to R2 and R3 link\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    step("r2: Verify (*, G) ip mroutes cleared")
-    dut = "r2"
-    iif = "lo"
-    oif = "r2-r1-eth0"
-    result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
-    assert result is not True, (
-        "Testcase {} : Failed \n "
-        "r2: (*,G) mroutes are not cleared after shut of R1 to R2 and R3 link\n Error: {}".format(
-            tc_name, result
-        )
-    )
-
-    write_test_footer(tc_name)
-
-
 if __name__ == "__main__":
     ARGS = ["-s"] + sys.argv[1:]
     sys.exit(pytest.main(ARGS))