]> git.puffer.fish Git - mirror/frr.git/commitdiff
tests: micronet: adapt tests
authorChristian Hopps <chopps@labn.net>
Fri, 27 Aug 2021 18:28:29 +0000 (14:28 -0400)
committerChristian Hopps <chopps@labn.net>
Sat, 4 Sep 2021 13:04:46 +0000 (09:04 -0400)
Signed-off-by: Christian Hopps <chopps@labn.net>
194 files changed:
tests/topotests/all_protocol_startup/test_all_protocol_startup.py
tests/topotests/bfd_bgp_cbit_topo3/test_bfd_bgp_cbit_topo3.py
tests/topotests/bfd_isis_topo1/test_bfd_isis_topo1.py
tests/topotests/bfd_ospf_topo1/test_bfd_ospf_topo1.py
tests/topotests/bfd_profiles_topo1/test_bfd_profiles_topo1.py
tests/topotests/bfd_topo1/test_bfd_topo1.py
tests/topotests/bfd_topo2/test_bfd_topo2.py
tests/topotests/bfd_topo3/test_bfd_topo3.py
tests/topotests/bfd_vrf_topo1/test_bfd_vrf_topo1.py
tests/topotests/bgp_aggregate_address_origin/test_bgp_aggregate-address_origin.py
tests/topotests/bgp_aggregate_address_route_map/test_bgp_aggregate-address_route-map.py
tests/topotests/bgp_aggregate_address_topo1/test_bgp_aggregate_address_topo1.py
tests/topotests/bgp_aggregator_zero/test_bgp_aggregator_zero.py
tests/topotests/bgp_as_allow_in/test_bgp_as_allow_in.py
tests/topotests/bgp_as_wide_bgp_identifier/test_bgp_as_wide_bgp_identifier.py
tests/topotests/bgp_aspath_zero/test_bgp_aspath_zero.py
tests/topotests/bgp_auth/test_bgp_auth.py
tests/topotests/bgp_basic_functionality_topo1/test_bgp_basic_functionality.py
tests/topotests/bgp_blackhole_community/test_bgp_blackhole_community.py
tests/topotests/bgp_comm_list_delete/test_bgp_comm-list_delete.py
tests/topotests/bgp_communities_topo1/test_bgp_communities.py
tests/topotests/bgp_communities_topo1/test_bgp_communities_topo2.py
tests/topotests/bgp_community_alias/test_bgp-community-alias.py
tests/topotests/bgp_community_change_update/test_bgp_community_change_update.py
tests/topotests/bgp_conditional_advertisement/test_bgp_conditional_advertisement.py
tests/topotests/bgp_default_afi_safi/test_bgp-default-afi-safi.py
tests/topotests/bgp_default_route/test_bgp_default-originate.py
tests/topotests/bgp_default_route_route_map_match/test_bgp_default-originate_route-map_match.py
tests/topotests/bgp_default_route_route_map_match2/test_bgp_default-originate_route-map_match2.py
tests/topotests/bgp_default_route_route_map_match_set/test_bgp_default-originate_route-map_match_set.py
tests/topotests/bgp_default_route_route_map_set/test_bgp_default-originate_route-map_set.py
tests/topotests/bgp_distance_change/test_bgp_distance_change.py
tests/topotests/bgp_dont_capability_negogiate/test_bgp_dont_capability_negotiate.py
tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/test_bgp-ebgp-common-subnet-nexthop-unchanged.py
tests/topotests/bgp_ebgp_requires_policy/test_bgp_ebgp_requires_policy.py
tests/topotests/bgp_ecmp_topo1/test_bgp_ecmp_topo1.py
tests/topotests/bgp_ecmp_topo2/test_ebgp_ecmp_topo2.py
tests/topotests/bgp_ecmp_topo2/test_ibgp_ecmp_topo2.py
tests/topotests/bgp_evpn_mh/test_evpn_mh.py
tests/topotests/bgp_evpn_overlay_index_gateway/test_bgp_evpn_overlay_index_gateway.py
tests/topotests/bgp_evpn_rt5/test_bgp_evpn.py
tests/topotests/bgp_evpn_vxlan_topo1/test_bgp_evpn_vxlan.py
tests/topotests/bgp_features/test_bgp_features.py
tests/topotests/bgp_flowspec/test_bgp_flowspec_topo.py
tests/topotests/bgp_gr_functionality_topo1/test_bgp_gr_functionality_topo1.py
tests/topotests/bgp_gr_functionality_topo2/test_bgp_gr_functionality_topo2.py
tests/topotests/bgp_gshut/test_bgp_gshut.py
tests/topotests/bgp_gshut_topo1/test_ebgp_gshut_topo1.py
tests/topotests/bgp_gshut_topo1/test_ibgp_gshut_topo1.py
tests/topotests/bgp_ipv6_rtadv/test_bgp_ipv6_rtadv.py
tests/topotests/bgp_l3vpn_to_bgp_direct/customize.py
tests/topotests/bgp_l3vpn_to_bgp_vrf/customize.py
tests/topotests/bgp_large_community/bgp_large_community_topo_2.json
tests/topotests/bgp_large_community/test_bgp_large_community_topo_1.py
tests/topotests/bgp_large_community/test_bgp_large_community_topo_2.py
tests/topotests/bgp_link_bw_ip/test_bgp_linkbw_ip.py
tests/topotests/bgp_listen_on_multiple_addresses/test_bgp_listen_on_multiple_addresses.py
tests/topotests/bgp_local_as_private_remove/test_bgp_local_as_private_remove.py
tests/topotests/bgp_lu_topo1/test_bgp_lu.py
tests/topotests/bgp_maximum_prefix_invalid_update/test_bgp_maximum_prefix_invalid_update.py
tests/topotests/bgp_maximum_prefix_out/test_bgp_maximum_prefix_out.py
tests/topotests/bgp_multi_vrf_topo1/test_bgp_multi_vrf_topo1.py
tests/topotests/bgp_multi_vrf_topo2/test_bgp_multi_vrf_topo2.py
tests/topotests/bgp_multiview_topo1/test_bgp_multiview_topo1.py
tests/topotests/bgp_path_attributes_topo1/test_bgp_path_attributes.py
tests/topotests/bgp_peer_group/test_bgp_peer-group.py
tests/topotests/bgp_peer_type_multipath_relax/test_bgp_peer-type_multipath-relax.py
tests/topotests/bgp_prefix_list_topo1/test_prefix_lists.py
tests/topotests/bgp_prefix_sid/test_bgp_prefix_sid.py
tests/topotests/bgp_prefix_sid2/test_bgp_prefix_sid2.py
tests/topotests/bgp_recursive_route_ebgp_multi_hop/test_bgp_recursive_route_ebgp_multi_hop.py
tests/topotests/bgp_reject_as_sets/test_bgp_reject_as_sets.py
tests/topotests/bgp_rfapi_basic_sanity/customize.py
tests/topotests/bgp_route_aggregation/test_bgp_aggregation.py
tests/topotests/bgp_route_map/test_route_map_topo1.py
tests/topotests/bgp_route_map/test_route_map_topo2.py
tests/topotests/bgp_rr_ibgp/test_bgp_rr_ibgp_topo1.py
tests/topotests/bgp_sender_as_path_loop_detection/test_bgp_sender-as-path-loop-detection.py
tests/topotests/bgp_set_local_preference_add_subtract/test_bgp_set_local-preference_add_subtract.py
tests/topotests/bgp_snmp_mplsl3vpn/ce1/snmpd.conf
tests/topotests/bgp_snmp_mplsl3vpn/ce2/snmpd.conf
tests/topotests/bgp_snmp_mplsl3vpn/ce3/snmpd.conf
tests/topotests/bgp_snmp_mplsl3vpn/ce4/snmpd.conf
tests/topotests/bgp_snmp_mplsl3vpn/r1/snmpd.conf
tests/topotests/bgp_snmp_mplsl3vpn/r2/snmpd.conf
tests/topotests/bgp_snmp_mplsl3vpn/r3/snmpd.conf
tests/topotests/bgp_snmp_mplsl3vpn/r4/snmpd.conf
tests/topotests/bgp_snmp_mplsl3vpn/test_bgp_snmp_mplsvpn.py
tests/topotests/bgp_srv6l3vpn_to_bgp_vrf/test_bgp_srv6l3vpn_to_bgp_vrf.py
tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py
tests/topotests/bgp_tcp_mss/test_bgp_tcp_mss.py
tests/topotests/bgp_update_delay/test_bgp_update_delay.py
tests/topotests/bgp_vrf_dynamic_route_leak/test_bgp_vrf_dynamic_route_leak_topo1.py
tests/topotests/bgp_vrf_dynamic_route_leak/test_bgp_vrf_dynamic_route_leak_topo2.py
tests/topotests/bgp_vrf_lite_ipv6_rtadv/test_bgp_vrf_lite_ipv6_rtadv.py
tests/topotests/bgp_vrf_netns/test_bgp_vrf_netns_topo.py
tests/topotests/bgp_vrf_route_leak_basic/test_bgp-vrf-route-leak-basic.py
tests/topotests/config_timing/test_config_timing.py
tests/topotests/eigrp_topo1/test_eigrp_topo1.py
tests/topotests/evpn_pim_1/test_evpn_pim_topo1.py
tests/topotests/evpn_type5_test_topo1/test_evpn_type5_chaos_topo1.py
tests/topotests/evpn_type5_test_topo1/test_evpn_type5_topo1.py
tests/topotests/example_test/test_template.py
tests/topotests/example_topojson_test/test_topo_json_multiple_links/test_example_topojson_multiple_links.py
tests/topotests/example_topojson_test/test_topo_json_single_link/test_example_topojson.py
tests/topotests/example_topojson_test/test_topo_json_single_link_loopback/test_example_topojson.py
tests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py
tests/topotests/isis_lsp_bits_topo1/test_isis_lsp_bits_topo1.py
tests/topotests/isis_rlfa_topo1/test_isis_rlfa_topo1.py
tests/topotests/isis_snmp/r1/snmpd.conf
tests/topotests/isis_snmp/r2/snmpd.conf
tests/topotests/isis_snmp/r3/snmpd.conf
tests/topotests/isis_snmp/r4/snmpd.conf
tests/topotests/isis_snmp/r5/snmpd.conf
tests/topotests/isis_snmp/test_isis_snmp.py
tests/topotests/isis_sr_te_topo1/test_isis_sr_te_topo1.py
tests/topotests/isis_sr_topo1/test_isis_sr_topo1.py
tests/topotests/isis_tilfa_topo1/test_isis_tilfa_topo1.py
tests/topotests/isis_topo1/test_isis_topo1.py
tests/topotests/isis_topo1_vrf/test_isis_topo1_vrf.py
tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.py
tests/topotests/ldp_oc_topo1/test_ldp_oc_topo1.py
tests/topotests/ldp_snmp/r1/snmpd.conf
tests/topotests/ldp_snmp/r2/snmpd.conf
tests/topotests/ldp_snmp/test_ldp_snmp_topo1.py
tests/topotests/ldp_sync_isis_topo1/test_ldp_sync_isis_topo1.py
tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.py
tests/topotests/ldp_topo1/test_ldp_topo1.py
tests/topotests/ldp_vpls_topo1/test_ldp_vpls_topo1.py
tests/topotests/lib/ltemplate.py
tests/topotests/lib/lutil.py
tests/topotests/msdp_mesh_topo1/test_msdp_mesh_topo1.py
tests/topotests/msdp_topo1/test_msdp_topo1.py
tests/topotests/multicast_pim_bsm_topo1/test_mcast_pim_bsmp_01.py
tests/topotests/multicast_pim_bsm_topo2/test_mcast_pim_bsmp_02.py
tests/topotests/multicast_pim_sm_topo1/test_multicast_pim_sm_topo1.py
tests/topotests/multicast_pim_sm_topo2/test_multicast_pim_sm_topo2.py
tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo3.py
tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo4.py
tests/topotests/multicast_pim_static_rp_topo1/test_multicast_pim_static_rp.py
tests/topotests/nhrp_topo/test_nhrp_topo.py
tests/topotests/ospf6_topo1/test_ospf6_topo1.py
tests/topotests/ospf6_topo1_vrf/test_ospf6_topo1_vrf.py
tests/topotests/ospf6_topo2/test_ospf6_topo2.py
tests/topotests/ospf_basic_functionality/test_ospf_asbr_summary_topo1.py
tests/topotests/ospf_basic_functionality/test_ospf_asbr_summary_type7_lsa.py
tests/topotests/ospf_basic_functionality/test_ospf_authentication.py
tests/topotests/ospf_basic_functionality/test_ospf_chaos.py
tests/topotests/ospf_basic_functionality/test_ospf_ecmp.py
tests/topotests/ospf_basic_functionality/test_ospf_ecmp_lan.py
tests/topotests/ospf_basic_functionality/test_ospf_lan.py
tests/topotests/ospf_basic_functionality/test_ospf_nssa.py
tests/topotests/ospf_basic_functionality/test_ospf_p2mp.py
tests/topotests/ospf_basic_functionality/test_ospf_routemaps.py
tests/topotests/ospf_basic_functionality/test_ospf_rte_calc.py
tests/topotests/ospf_basic_functionality/test_ospf_single_area.py
tests/topotests/ospf_dual_stack/test_ospf_dual_stack.py
tests/topotests/ospf_gr_topo1/test_ospf_gr_topo1.py
tests/topotests/ospf_sr_te_topo1/test_ospf_sr_te_topo1.py
tests/topotests/ospf_sr_topo1/test_ospf_sr_topo1.py
tests/topotests/ospf_suppress_fa/test_ospf_suppress_fa.py
tests/topotests/ospf_te_topo1/test_ospf_te_topo1.py
tests/topotests/ospf_tilfa_topo1/test_ospf_tilfa_topo1.py
tests/topotests/ospf_topo1/test_ospf_topo1.py
tests/topotests/ospf_topo1_vrf/test_ospf_topo1_vrf.py
tests/topotests/ospf_topo2/test_ospf_topo2.py
tests/topotests/ospfv3_basic_functionality/test_ospfv3_asbr_summary_topo1.py
tests/topotests/ospfv3_basic_functionality/test_ospfv3_ecmp.py
tests/topotests/ospfv3_basic_functionality/test_ospfv3_routemaps.py
tests/topotests/ospfv3_basic_functionality/test_ospfv3_rte_calc.py
tests/topotests/ospfv3_basic_functionality/test_ospfv3_single_area.py
tests/topotests/pbr_topo1/test_pbr_topo1.py
tests/topotests/pim_acl/test_pim_acl.py
tests/topotests/pim_basic/test_pim.py
tests/topotests/pim_basic_topo2/test_pim_basic_topo2.py
tests/topotests/rip_topo1/test_rip_topo1.py
tests/topotests/ripng_topo1/test_ripng_topo1.py
tests/topotests/route_scale/test_route_scale.py
tests/topotests/simple_snmp_test/r1/snmpd.conf
tests/topotests/simple_snmp_test/test_simple_snmp.py
tests/topotests/srv6_locator/test_srv6_locator.py
tests/topotests/static_routing_with_ebgp/test_static_routes_topo1_ebgp.py
tests/topotests/static_routing_with_ebgp/test_static_routes_topo2_ebgp.py
tests/topotests/static_routing_with_ebgp/test_static_routes_topo3_ebgp.py
tests/topotests/static_routing_with_ebgp/test_static_routes_topo4_ebgp.py
tests/topotests/static_routing_with_ibgp/test_static_routes_topo1_ibgp.py
tests/topotests/static_routing_with_ibgp/test_static_routes_topo2_ibgp.py
tests/topotests/static_routing_with_ibgp/test_static_routes_topo3_ibgp.py
tests/topotests/static_routing_with_ibgp/test_static_routes_topo4_ibgp.py
tests/topotests/zebra_netlink/test_zebra_netlink.py
tests/topotests/zebra_opaque/test_zebra_opaque.py
tests/topotests/zebra_rib/test_zebra_rib.py
tests/topotests/zebra_seg6_route/test_zebra_seg6_route.py
tests/topotests/zebra_seg6local_route/test_zebra_seg6local_route.py

index 2d75428f1af6e8fc6d7024dfef50a0f6ca3c56fa..41597c449ed87183950d9be1e67b83f1723773c2 100644 (file)
@@ -34,12 +34,7 @@ import pytest
 import glob
 from time import sleep
 
-from mininet.topo import Topo
-from mininet.net import Mininet
-from mininet.node import Node, OVSSwitch, Host
-from mininet.log import setLogLevel, info
-from mininet.cli import CLI
-from mininet.link import Intf
+from lib.micronet_compat import Mininet, Topo
 
 from functools import partial
 
@@ -82,7 +77,7 @@ class NetworkTopo(Topo):
         switch = {}
         #
         for i in range(0, 10):
-            switch[i] = self.addSwitch("sw%s" % i, cls=topotest.LegacySwitch)
+            switch[i] = self.addSwitch("sw%s" % i)
             self.addLink(switch[i], router[1], intfName2="r1-eth%s" % i)
 
 
@@ -765,7 +760,7 @@ def test_ospfv2_interfaces():
             )
             # Mask out Bandwidth portion. They may change..
             actual = re.sub(r"BW [0-9]+ Mbit", "BW XX Mbit", actual)
-            actual = re.sub(r"ifindex [0-9]", "ifindex X", actual)
+            actual = re.sub(r"ifindex [0-9]+", "ifindex X", actual)
 
             # Drop time in next due
             actual = re.sub(r"Hello due in [0-9\.]+s", "Hello due in XX.XXXs", actual)
@@ -1155,7 +1150,7 @@ def test_nht():
         expected = ("\n".join(expected.splitlines()) + "\n").splitlines(1)
 
         actual = net["r%s" % i].cmd('vtysh -c "show ip nht" 2> /dev/null').rstrip()
-        actual = re.sub(r"fd [0-9][0-9]", "fd XX", actual)
+        actual = re.sub(r"fd [0-9]+", "fd XX", actual)
         actual = ("\n".join(actual.splitlines()) + "\n").splitlines(1)
 
         diff = topotest.get_textdiff(
@@ -1175,7 +1170,7 @@ def test_nht():
         expected = ("\n".join(expected.splitlines()) + "\n").splitlines(1)
 
         actual = net["r%s" % i].cmd('vtysh -c "show ipv6 nht" 2> /dev/null').rstrip()
-        actual = re.sub(r"fd [0-9][0-9]", "fd XX", actual)
+        actual = re.sub(r"fd [0-9]+", "fd XX", actual)
         actual = ("\n".join(actual.splitlines()) + "\n").splitlines(1)
 
         diff = topotest.get_textdiff(
@@ -1418,7 +1413,7 @@ def test_nexthop_groups_with_route_maps():
     net["r1"].cmd('vtysh -c "sharp remove routes %s 1"' % route_str)
     net["r1"].cmd('vtysh -c "c t" -c "no ip protocol sharp route-map NH-SRC"')
     net["r1"].cmd(
-        'vtysh -c "c t" -c "no route-map NH-SRC permit 111" -c "set src %s"' % src_str
+        'vtysh -c "c t" -c "no route-map NH-SRC permit 111" -c "set src %s"' % src_str
     )
     net["r1"].cmd('vtysh -c "c t" -c "no route-map NH-SRC"')
 
@@ -1659,8 +1654,6 @@ def test_shutdown_check_memleak():
 
 
 if __name__ == "__main__":
-
-    setLogLevel("info")
     # To suppress tracebacks, either use the following pytest call or add "--tb=no" to cli
     # retval = pytest.main(["-s", "--tb=no"])
     retval = pytest.main(["-s"])
index 560d6eebecf86f4f60d5f60a03d6ae43c4c106dd..29c25bba295317809b8ae3bd44def055481dea51 100644 (file)
@@ -41,35 +41,17 @@ from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
-
 pytestmark = [pytest.mark.bgpd, pytest.mark.bfdd]
 
 
-class BFDTopo(Topo):
-    "Test topology builder"
-
-    def build(self, *_args, **_opts):
-        "Build function"
-        tgen = get_topogen(self)
-
-        # Create 4 routers.
-        for routern in range(1, 4):
-            tgen.add_router("r{}".format(routern))
-
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r2"])
-
-        switch = tgen.add_switch("s2")
-        switch.add_link(tgen.gears["r2"])
-        switch.add_link(tgen.gears["r3"])
-
-
 def setup_module(mod):
     "Sets up the pytest environment"
-    tgen = Topogen(BFDTopo, mod.__name__)
+    from collections import OrderedDict
+    topodef = {
+        "s1": ("r1", "r2"),
+        "s2": ("r2", "r3"),
+    }
+    tgen = Topogen(topodef, mod.__name__)
     tgen.start_topology()
 
     router_list = tgen.routers()
index fcb5672dce2ec689d5507ea60a1c0a0f1a98cae6..6a19b1ea4684510a0ec34accf7b6d1b2107a4d01 100644 (file)
@@ -87,52 +87,18 @@ from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
-
 pytestmark = [pytest.mark.bfdd, pytest.mark.isisd]
 
-
-class TemplateTopo(Topo):
-    "Test topology builder"
-
-    def build(self, *_args, **_opts):
-        "Build function"
-        tgen = get_topogen(self)
-
-        #
-        # Define FRR Routers
-        #
-        for router in ["rt1", "rt2", "rt3", "rt4", "rt5"]:
-            tgen.add_router(router)
-
-        #
-        # Define connections
-        #
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["rt1"], nodeif="eth-rt2")
-        switch.add_link(tgen.gears["rt2"], nodeif="eth-rt1")
-
-        switch = tgen.add_switch("s2")
-        switch.add_link(tgen.gears["rt1"], nodeif="eth-rt3")
-        switch.add_link(tgen.gears["rt3"], nodeif="eth-rt1")
-
-        switch = tgen.add_switch("s3")
-        switch.add_link(tgen.gears["rt2"], nodeif="eth-rt5")
-        switch.add_link(tgen.gears["rt5"], nodeif="eth-rt2")
-
-        switch = tgen.add_switch("s4")
-        switch.add_link(tgen.gears["rt3"], nodeif="eth-rt4")
-        switch.add_link(tgen.gears["rt4"], nodeif="eth-rt3")
-
-        switch = tgen.add_switch("s5")
-        switch.add_link(tgen.gears["rt4"], nodeif="eth-rt5")
-        switch.add_link(tgen.gears["rt5"], nodeif="eth-rt4")
-
-
 def setup_module(mod):
     "Sets up the pytest environment"
-    tgen = Topogen(TemplateTopo, mod.__name__)
+    topodef = {
+        "s1": ("rt1:eth-rt2", "rt2:eth-rt1"),
+        "s2": ("rt1:eth-rt3", "rt3:eth-rt1"),
+        "s3": ("rt2:eth-rt5", "rt5:eth-rt2"),
+        "s4": ("rt3:eth-rt4", "rt4:eth-rt3"),
+        "s5": ("rt4:eth-rt5", "rt5:eth-rt4"),
+    }
+    tgen = Topogen(topodef, mod.__name__)
     tgen.start_topology()
 
     router_list = tgen.routers()
index ae148f948c288633b6584cd2a97203c3939a0121..c82b4b590a03a98a3216cbd28027d93ea0c11a7a 100755 (executable)
@@ -84,61 +84,29 @@ sys.path.append(os.path.join(CWD, "../"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib import topotest
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
-
 pytestmark = [pytest.mark.bfdd, pytest.mark.ospfd]
 
 
-class TemplateTopo(Topo):
-    "Test topology builder"
-
-    def build(self, *_args, **_opts):
-        "Build function"
-        tgen = get_topogen(self)
-
-        #
-        # Define FRR Routers
-        #
-        for router in ["rt1", "rt2", "rt3", "rt4", "rt5"]:
-            tgen.add_router(router)
-
-        #
-        # Define connections
-        #
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["rt1"], nodeif="eth-rt2")
-        switch.add_link(tgen.gears["rt2"], nodeif="eth-rt1")
-
-        switch = tgen.add_switch("s2")
-        switch.add_link(tgen.gears["rt1"], nodeif="eth-rt3")
-        switch.add_link(tgen.gears["rt3"], nodeif="eth-rt1")
-
-        switch = tgen.add_switch("s3")
-        switch.add_link(tgen.gears["rt2"], nodeif="eth-rt5")
-        switch.add_link(tgen.gears["rt5"], nodeif="eth-rt2")
-
-        switch = tgen.add_switch("s4")
-        switch.add_link(tgen.gears["rt3"], nodeif="eth-rt4")
-        switch.add_link(tgen.gears["rt4"], nodeif="eth-rt3")
-
-        switch = tgen.add_switch("s5")
-        switch.add_link(tgen.gears["rt4"], nodeif="eth-rt5")
-        switch.add_link(tgen.gears["rt5"], nodeif="eth-rt4")
-
-
 def setup_module(mod):
     "Sets up the pytest environment"
-    tgen = Topogen(TemplateTopo, mod.__name__)
+    topodef = {
+        "s1": ("rt1:eth-rt2", "rt2:eth-rt1"),
+        "s2": ("rt1:eth-rt3", "rt3:eth-rt1"),
+        "s3": ("rt2:eth-rt5", "rt5:eth-rt2"),
+        "s4": ("rt3:eth-rt4", "rt4:eth-rt3"),
+        "s5": ("rt4:eth-rt5", "rt5:eth-rt4"),
+    }
+    tgen = Topogen(topodef, mod.__name__)
     tgen.start_topology()
 
     router_list = tgen.routers()
 
     # For all registered routers, load the zebra configuration file
-    for rname, router in router_list.iteritems():
+    for rname, router in router_list.items():
         router.load_config(
             TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
         )
index 4a2c8ee00244ba1519222cedef1d7834b46f1b7e..02e1d8a20f6454651e9628623351822a674ec768 100644 (file)
@@ -42,47 +42,19 @@ from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
-
 pytestmark = [pytest.mark.bfdd, pytest.mark.bgpd, pytest.mark.isisd, pytest.mark.ospfd]
 
-
-class BFDProfTopo(Topo):
-    "Test topology builder"
-
-    def build(self, *_args, **_opts):
-        "Build function"
-        tgen = get_topogen(self)
-
-        # Create 6 routers
-        for routern in range(1, 7):
-            tgen.add_router("r{}".format(routern))
-
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r2"])
-
-        switch = tgen.add_switch("s2")
-        switch.add_link(tgen.gears["r2"])
-        switch.add_link(tgen.gears["r3"])
-
-        switch = tgen.add_switch("s3")
-        switch.add_link(tgen.gears["r3"])
-        switch.add_link(tgen.gears["r4"])
-
-        switch = tgen.add_switch("s4")
-        switch.add_link(tgen.gears["r4"])
-        switch.add_link(tgen.gears["r5"])
-
-        switch = tgen.add_switch("s5")
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r6"])
-
-
 def setup_module(mod):
     "Sets up the pytest environment"
-    tgen = Topogen(BFDProfTopo, mod.__name__)
+
+    topodef = {
+        "s1": ("r1", "r2"),
+        "s2": ("r2", "r3"),
+        "s3": ("r3", "r4"),
+        "s4": ("r4", "r5"),
+        "s5": ("r1", "r6"),
+    }
+    tgen = Topogen(topodef, mod.__name__)
     tgen.start_topology()
 
     router_list = tgen.routers()
index 86bdcfed04e2f8ac6635f3da7dc0ada3eb1fc90f..adf02b02d42946cacf5d7d597ca6d3d28d8ba11c 100644 (file)
@@ -42,39 +42,17 @@ from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
-
 pytestmark = [pytest.mark.bfdd, pytest.mark.bgpd]
 
 
-class BFDTopo(Topo):
-    "Test topology builder"
-
-    def build(self, *_args, **_opts):
-        "Build function"
-        tgen = get_topogen(self)
-
-        # Create 4 routers
-        for routern in range(1, 5):
-            tgen.add_router("r{}".format(routern))
-
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r2"])
-
-        switch = tgen.add_switch("s2")
-        switch.add_link(tgen.gears["r2"])
-        switch.add_link(tgen.gears["r3"])
-
-        switch = tgen.add_switch("s3")
-        switch.add_link(tgen.gears["r2"])
-        switch.add_link(tgen.gears["r4"])
-
-
 def setup_module(mod):
     "Sets up the pytest environment"
-    tgen = Topogen(BFDTopo, mod.__name__)
+    topodef = {
+        "s1": ("r1", "r2"),
+        "s2": ("r2", "r3"),
+        "s3": ("r2", "r4"),
+    }
+    tgen = Topogen(topodef, mod.__name__)
     tgen.start_topology()
 
     router_list = tgen.routers()
index 2cc12bc7b07b3a54330f2444e09d96be50301d4b..00431ea1ff2b34f02b99f19ca04a8e1fb8cc978a 100644 (file)
@@ -43,39 +43,40 @@ from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
-
 pytestmark = [pytest.mark.bfdd, pytest.mark.bgpd, pytest.mark.ospfd]
 
 
-class BFDTopo(Topo):
-    "Test topology builder"
+def build(self, *_args, **_opts):
+    "Build function"
+    tgen = get_topogen(self)
 
-    def build(self, *_args, **_opts):
-        "Build function"
-        tgen = get_topogen(self)
+    # Create 4 routers.
+    for routern in range(1, 5):
+        tgen.add_router("r{}".format(routern))
 
-        # Create 4 routers.
-        for routern in range(1, 5):
-            tgen.add_router("r{}".format(routern))
+    switch = tgen.add_switch("s1")
+    switch.add_link(tgen.gears["r1"])
+    switch.add_link(tgen.gears["r2"])
 
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r2"])
+    switch = tgen.add_switch("s2")
+    switch.add_link(tgen.gears["r2"])
+    switch.add_link(tgen.gears["r3"])
 
-        switch = tgen.add_switch("s2")
-        switch.add_link(tgen.gears["r2"])
-        switch.add_link(tgen.gears["r3"])
+    switch = tgen.add_switch("s3")
+    switch.add_link(tgen.gears["r2"])
+    switch.add_link(tgen.gears["r4"])
 
-        switch = tgen.add_switch("s3")
-        switch.add_link(tgen.gears["r2"])
-        switch.add_link(tgen.gears["r4"])
 
 
 def setup_module(mod):
     "Sets up the pytest environment"
-    tgen = Topogen(BFDTopo, mod.__name__)
+    topodef = {
+        "s1": ("r1", "r2"),
+        "s2": ("r2", "r3"),
+        "s3": ("r2", "r4"),
+    }
+    tgen = Topogen(topodef, mod.__name__)
+    # tgen = Topogen(build, mod.__name__)
     tgen.start_topology()
 
     router_list = tgen.routers()
index 6bb223e2036259b67113387c6ca9ca8b487f3bbf..9ed8f5fcbfde7ba02d8c3e59e119bdd444fc981c 100644 (file)
@@ -39,42 +39,21 @@ sys.path.append(os.path.join(CWD, "../"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib import topotest
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
-
 pytestmark = [pytest.mark.bfdd, pytest.mark.bgpd]
 
 
-class BFDTopo(Topo):
-    "Test topology builder"
-
-    def build(self, *_args, **_opts):
-        "Build function"
-        tgen = get_topogen(self)
-
-        # Create 4 routers
-        for routern in range(1, 5):
-            tgen.add_router("r{}".format(routern))
-
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r2"])
-
-        switch = tgen.add_switch("s2")
-        switch.add_link(tgen.gears["r2"])
-        switch.add_link(tgen.gears["r3"])
-
-        switch = tgen.add_switch("s3")
-        switch.add_link(tgen.gears["r3"])
-        switch.add_link(tgen.gears["r4"])
-
-
 def setup_module(mod):
     "Sets up the pytest environment"
-    tgen = Topogen(BFDTopo, mod.__name__)
+    topodef = {
+        "s1": ("r1", "r2"),
+        "s2": ("r2", "r3"),
+        "s3": ("r3", "r4"),
+    }
+    tgen = Topogen(topodef, mod.__name__)
     tgen.start_topology()
 
     router_list = tgen.routers()
index 0e0dd4db4a540a0a42a92a26531fad0b0ad0f9b4..125cc183c5cb6e8a56678a9ed1647fdca7dce87e 100644 (file)
@@ -44,7 +44,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bfdd, pytest.mark.bgpd]
 
@@ -94,24 +94,14 @@ def setup_module(mod):
 
     logger.info("Testing with VRF Namespace support")
 
-    cmds = [
-        "if [ -e /var/run/netns/{0}-bfd-cust1 ] ; then ip netns del {0}-bfd-cust1 ; fi",
-        "ip netns add {0}-bfd-cust1",
-        "ip link set dev {0}-eth0 netns {0}-bfd-cust1 up",
-    ]
-    cmds2 = [
-        "ip link set dev {0}-eth1 netns {0}-bfd-cust1",
-        "ip netns exec {0}-bfd-cust1 ip link set {0}-eth1 up",
-        "ip link set dev {0}-eth2 netns {0}-bfd-cust1 up",
-    ]
-
     for rname, router in router_list.items():
         # create VRF rx-bfd-cust1 and link rx-eth0 to rx-bfd-cust1
-        for cmd in cmds:
-            output = tgen.net[rname].cmd_raises(cmd.format(rname))
+        ns = "{}-bfd-cust1".format(rname)
+        router.net.add_netns(ns)
+        router.net.set_intf_netns(rname + "-eth0", ns, up=True)
         if rname == "r2":
-            for cmd in cmds2:
-                output = tgen.net[rname].cmd_raises(cmd.format(rname))
+            router.net.set_intf_netns(rname + "-eth1", ns, up=True)
+            router.net.set_intf_netns(rname + "-eth2", ns, up=True)
 
     for rname, router in router_list.items():
         router.load_config(
@@ -133,24 +123,15 @@ def setup_module(mod):
 def teardown_module(_mod):
     "Teardown the pytest environment"
     tgen = get_topogen()
-    # move back rx-eth0 to default VRF
-    # delete rx-vrf
-    cmds = [
-        "ip netns exec {0}-bfd-cust1 ip link set {0}-eth0 netns 1",
-        "ip netns delete {0}-bfd-cust1",
-    ]
-    cmds2 = [
-        "ip netns exec {0}-bfd-cust1 ip link set {0}-eth1 netns 1",
-        "ip netns exec {0}-cust2 ip link set {0}-eth1 netns 1",
-    ]
 
+    # Move interfaces out of vrf namespace and delete the namespace
     router_list = tgen.routers()
     for rname, router in router_list.items():
         if rname == "r2":
-            for cmd in cmds2:
-                tgen.net[rname].cmd(cmd.format(rname))
-        for cmd in cmds:
-            tgen.net[rname].cmd(cmd.format(rname))
+            router.net.reset_intf_netns(rname + "-eth2")
+            router.net.reset_intf_netns(rname + "-eth1")
+        router.net.reset_intf_netns(rname + "-eth0")
+        router.net.delete_netns("{}-bfd-cust1".format(rname))
     tgen.stop_topology()
 
 
index be07fab87b75d9c5a3b9427ee5a76bc9224c0b77..4fa6828efc177ed5df3b90ae0848e8d6a614b234 100644 (file)
@@ -45,7 +45,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 484f40251ff0875de15a7d3a5f876512b9007c0c..f4b98895455aa8d8744866813d15fd287a6baa9c 100644 (file)
@@ -48,7 +48,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 9f269782594ef7bcead61b4ba971a349c2190033..6566a860bc97f66f8ef9569350cf70706570dfa7 100644 (file)
@@ -40,7 +40,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index c4bbdce2c3eb0659cbb46ebb67f049226bd8fcd2..99c31a355bfa262fd21b049a356bf97078eb919f 100644 (file)
@@ -38,7 +38,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 4d41c7a321301f57f186d12cc018ec39f57771f8..4c0142fd030e13e4d57663d7d27265ea9aa1406a 100644 (file)
@@ -51,7 +51,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
@@ -251,9 +251,11 @@ def test_bgp_allowas_in_p0(request):
             protocol=protocol,
             expected=False,
         )
-        assert result is not True, "Testcase {} : Failed \n"
-        "Expected behavior: routes should not present in rib \n"
-        "Error: {}".format(tc_name, result)
+        assert result is not True, (
+            "Testcase {} : Failed \n".format(tc_name) +
+            "Expected behavior: routes should not present in rib \n" +
+            "Error: {}".format(result)
+        )
 
         step("Configure allowas-in on R3 for R2.")
         step("We should see the prefix advertised from R1 in R3's BGP table.")
@@ -396,9 +398,11 @@ def test_bgp_allowas_in_per_addr_family_p0(request):
     result = verify_rib(
         tgen, "ipv6", dut, static_route_ipv6, protocol=protocol, expected=False
     )
-    assert result is not True, "Testcase {} : Failed \n"
-    "Expected behavior: routes are should not be present in ipv6 rib\n"
-    " Error: {}".format(tc_name, result)
+    assert result is not True, (
+        "Testcase {} : Failed \n".format(tc_name) +
+        "Expected behavior: routes are should not be present in ipv6 rib\n" +
+        " Error: {}".format(result)
+    )
 
     step("Repeat the same test for IPv6 AFI.")
     step("Configure allowas-in on R3 for R2 under IPv6 addr-family only")
@@ -444,9 +448,11 @@ def test_bgp_allowas_in_per_addr_family_p0(request):
     result = verify_rib(
         tgen, "ipv4", dut, static_route_ipv4, protocol=protocol, expected=False
     )
-    assert result is not True, "Testcase {} : Failed \n"
-    "Expected behavior: routes should not be present in ipv4 rib\n"
-    " Error: {}".format(tc_name, result)
+    assert result is not True, (
+        "Testcase {} : Failed \n".format(tc_name) +
+        "Expected behavior: routes should not be present in ipv4 rib\n" +
+        " Error: {}".format(result)
+    )
     result = verify_rib(tgen, "ipv6", dut, static_route_ipv6, protocol=protocol)
     assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
 
@@ -598,9 +604,11 @@ def test_bgp_allowas_in_no_of_occurrences_p0(request):
         result = verify_rib(
             tgen, addr_type, dut, static_routes, protocol=protocol, expected=False
         )
-        assert result is not True, "Testcase {} : Failed \n "
-        "Expected behavior: routes are should not be present in rib\n"
-        "Error: {}".format(tc_name, result)
+        assert result is not True, (
+            "Testcase {} : Failed \n ".format(tc_name) +
+            "Expected behavior: routes are should not be present in rib\n" +
+            "Error: {}".format(result)
+        )
 
     for addr_type in ADDR_TYPES:
         step('Configure "allowas-in 5" on R3 for R2.')
index a7364639277a95357d5ba4683b29c000a6613bf9..046f3f80a3fe7dc19bbe697ebdf2e4a0f16da973 100644 (file)
@@ -43,7 +43,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 903ab12a1334d2008d7d1f1c3e998af09e463de5..3c264a7da012e02f3a44df200ffc998b42c378bb 100644 (file)
@@ -38,7 +38,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index b2cdef1c9302e102e36e5c273f88271bb7d6439b..b13f3d6e2338734098a28b20e8db38b41bf51b8f 100644 (file)
@@ -63,7 +63,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import apply_raw_config
 
index 3623e89dcbb5ca66f3660da8da6527d1834cc03f..e3f07166f9f5a185214c9f3b149ee8b385d6aec0 100644 (file)
@@ -55,41 +55,24 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # Required to instantiate the topology builder class.
 
+from lib.bgp import (clear_bgp_and_verify, create_router_bgp, modify_as_number,
+                     verify_as_numbers, verify_bgp_convergence, verify_bgp_rib,
+                     verify_bgp_timers_and_functionality, verify_router_id)
+from lib.common_config import (addKernelRoute, apply_raw_config,
+                               check_address_types, create_prefix_lists,
+                               create_route_maps, create_static_routes,
+                               required_linux_kernel_version,
+                               reset_config_on_routers, start_topology, step,
+                               verify_admin_distance_for_static_routes,
+                               verify_bgp_community, verify_fib_routes,
+                               verify_rib, write_test_footer,
+                               write_test_header)
+from lib.micronet_compat import Topo
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
-
-from lib.common_config import (
-    step,
-    start_topology,
-    write_test_header,
-    write_test_footer,
-    reset_config_on_routers,
-    create_static_routes,
-    verify_rib,
-    verify_admin_distance_for_static_routes,
-    check_address_types,
-    apply_raw_config,
-    addKernelRoute,
-    verify_fib_routes,
-    create_prefix_lists,
-    create_route_maps,
-    verify_bgp_community,
-    required_linux_kernel_version,
-)
+from lib.topojson import build_config_from_json, build_topo_from_json
 from lib.topolog import logger
-from lib.bgp import (
-    verify_bgp_convergence,
-    create_router_bgp,
-    verify_router_id,
-    modify_as_number,
-    verify_as_numbers,
-    clear_bgp_and_verify,
-    verify_bgp_timers_and_functionality,
-    verify_bgp_rib,
-)
-from lib.topojson import build_topo_from_json, build_config_from_json
 
 pytestmark = [pytest.mark.bgpd, pytest.mark.staticd]
 
@@ -1158,10 +1141,12 @@ def test_bgp_with_loopback_with_same_subnet_p1(request):
     dut = "r1"
     protocol = "bgp"
     for addr_type in ADDR_TYPES:
-        result = verify_fib_routes(tgen, addr_type, dut, input_dict_r1)
-        assert result is not True, "Testcase {} : Failed \n"
-        "Expected behavior: routes should not present in fib \n"
-        "Error: {}".format(tc_name, result)
+        result = verify_fib_routes(tgen, addr_type, dut, input_dict_r1, expected=False)  # pylint: disable=E1123
+        assert result is not True, (
+            "Testcase {} : Failed \n".format(tc_name) +
+            "Expected behavior: routes should not present in fib \n" +
+            "Error: {}".format(result)
+        )
 
     step("Verify Ipv4 and Ipv6 network installed in r3 RIB but not in FIB")
     input_dict_r3 = {
@@ -1175,10 +1160,12 @@ def test_bgp_with_loopback_with_same_subnet_p1(request):
     dut = "r3"
     protocol = "bgp"
     for addr_type in ADDR_TYPES:
-        result = verify_fib_routes(tgen, addr_type, dut, input_dict_r1)
-        assert result is not True, "Testcase {} : Failed \n"
-        "Expected behavior: routes should not present in fib \n"
-        "Error: {}".format(tc_name, result)
+        result = verify_fib_routes(tgen, addr_type, dut, input_dict_r1, expected=False)  # pylint: disable=E1123
+        assert result is not True, (
+            "Testcase {} : Failed \n".format(tc_name) +
+            "Expected behavior: routes should not present in fib \n" +
+            "Error: {}".format(result)
+        )
 
     write_test_footer(tc_name)
 
index 6512e4d4c6dd617d43ad2d65c9d2bef6bb2e34c9..7e78722da3d6d2a4a7082c8209a12173c9ec9526 100644 (file)
@@ -37,7 +37,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.common_config import step
 
 pytestmark = [pytest.mark.bgpd]
index 81bf8da31ab2c7ba20fb9a2893cfb89610110649..2c1546a3bff02f364379f3783e4e1c040ef9385c 100644 (file)
@@ -43,7 +43,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 6d4a7d82e5e2d38a5e67c6a05d167b6a76923a78..f52f539afbf5455f545ce29f50ea1fc7c184eee7 100644 (file)
@@ -38,7 +38,7 @@ sys.path.append(os.path.join(CWD, "../"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
index 3415789068b771c6178ab4396d5fc734c53ade84..24dc6bb487b1babdd0fe7971d48335ca49119aa5 100644 (file)
@@ -40,7 +40,7 @@ sys.path.append(os.path.join(CWD, "../"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
index 26933a799269cc08fdb65b0a765a0e47e9e11088..2ef30249e7624c93d51f037643200fb1d72af105 100644 (file)
@@ -38,7 +38,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 9f449d79790388888cb6860dbd232076a7f3414c..eee9294df44e7a7023ecbefe519586dd38bd9eee 100644 (file)
@@ -54,7 +54,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import step
 from time import sleep
index 44f54c7b515d11f0f718cbac0b49229e1abc3c82..9e020ae86e7c068655107cb4b21a7e07ce169523 100644 (file)
@@ -137,7 +137,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 6ed7023044ab7c0fd34362fa9aabcca2d25b1bde..a22cd94063cf6fd31e5312575a7ffb12b7f697ed 100644 (file)
@@ -44,7 +44,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.common_config import step
 
 pytestmark = [pytest.mark.bgpd]
index 6fbdfbe78a539baaaf875e6cb76a684ff39755bb..68d9c52f451414f43d173125016616e743b86fb6 100644 (file)
@@ -36,7 +36,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index e7e3512b17131dd80da22a8f8455210e7af5fecd..11a26570f8e945934697c5c01db1685d262f1183 100644 (file)
@@ -36,7 +36,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 5852ac268b5284ecda286a508f4d889b2d0ef16c..f8c36f632453f8e5069801d7285ebc860b395ee0 100644 (file)
@@ -38,7 +38,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.common_config import step
 
 pytestmark = [pytest.mark.bgpd]
index e2fa89fccb79f73f828c517ffa80ed4f7d14dad9..3735fcfb3c0bc77eac763c24349a70d2666e79b7 100644 (file)
@@ -37,7 +37,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 
 pytestmark = [pytest.mark.bgpd]
index be87dc61cf3ebe40ffcd172e92ae9f4a929456f3..05f14f35255da15a68f1f36ac72ca833a54f9492 100644 (file)
@@ -36,7 +36,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index bf267140870bbf36bd8d950edd588853560f28a6..2583db01e1ffd0b45f824838690d44bae9dafb87 100644 (file)
@@ -47,7 +47,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 398fa57ba9399fa13d6feb379c898e41b83b1f24..6025ad935ceee853aeeeb818f29575a0b54022e4 100644 (file)
@@ -39,25 +39,13 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
 
-class TemplateTopo(Topo):
-    def build(self, *_args, **_opts):
-        tgen = get_topogen(self)
-
-        for routern in range(1, 3):
-            tgen.add_router("r{}".format(routern))
-
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r2"])
-
-
 def setup_module(mod):
-    tgen = Topogen(TemplateTopo, mod.__name__)
+    topodef = { "s1": ("r1", "r2") }
+    tgen = Topogen(topodef, mod.__name__)
     tgen.start_topology()
 
     router_list = tgen.routers()
index 6db2697e754afeadf70699bb139b57c6690334b6..9460d6bae9fbdc4831feeb2a7bdf310a28018c92 100644 (file)
@@ -49,7 +49,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 2731d37fb04148f755dcebbc8e7d0d34e9cb7b9c..390c8b2901c11595ccacc6a270a3baed501059bd 100644 (file)
@@ -55,7 +55,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 75506d1a51a1968c28b74091c8ef600533f05b43..dea2ffbd8f302b2ea03dc538832f55180a87feca 100644 (file)
@@ -43,7 +43,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 
 pytestmark = [pytest.mark.bgpd]
index fffcbbd0ef206fd390a6bae83c8a1ae821fc45cc..7bc3d2912d5007f4f7e9635b6233d52506a6b94b 100644 (file)
@@ -50,7 +50,7 @@ sys.path.append(os.path.join(CWD, "../../"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import (
     start_topology,
index 342a0a4b2f2aa0cfa7309afd9e5fa0ee7d74f698..15982dad55eb4ec90c238079dd8449919cd4931a 100644 (file)
@@ -50,7 +50,7 @@ sys.path.append(os.path.join(CWD, "../../"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import (
     start_topology,
index 7c2787d557727c3fc8c2fc3dab4c022f20fe4737..8cdf3529dd7d099a1ca07183c3cd1d948d7dee9c 100644 (file)
@@ -47,15 +47,13 @@ sys.path.append(os.path.join(CWD, "../"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib import topotest
+# Required to instantiate the topology builder class.
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
-
 pytestmark = [pytest.mark.bgpd, pytest.mark.pimd]
 
-
 #####################################################
 ##
 ##   Network Topology Definition
index a411f13d2e4592f97e44eaa3584e6740e0e541e2..7a53173dcaada26d7a10292f282b75c425e18e10 100755 (executable)
@@ -75,7 +75,7 @@ from lib.common_config import (
 )
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
@@ -142,47 +142,58 @@ def setup_module(mod):
     tgen.start_topology()
 
     # Configure MAC address for hosts as these MACs are advertised with EVPN type-2 routes
-    for (name, host) in tgen.gears.items():
+    for name in tgen.gears:
         if name not in HOSTS:
             continue
+        host = tgen.net[name]
 
         host_mac = "1a:2b:3c:4d:5e:6{}".format(HOST_SUFFIX[name])
-        host.run("ip link set dev {}-eth0 down").format(name)
-        host.run("ip link set dev {0}-eth0 address {1}".format(name, host_mac))
-        host.run("ip link set dev {}-eth0 up").format(name)
+        host.cmd_raises("ip link set dev {}-eth0 down".format(name))
+        host.cmd_raises("ip link set dev {0}-eth0 address {1}".format(name, host_mac))
+        host.cmd_raises("ip link set dev {}-eth0 up".format(name))
 
     # Configure PE VxLAN and Bridge interfaces
-    for (name, pe) in tgen.gears.items():
+    for name in tgen.gears:
         if name not in PES:
             continue
+        pe = tgen.net[name]
+
         vtep_ip = "10.100.0.{}".format(PE_SUFFIX[name])
         bridge_ip = "50.0.1.{}/24".format(PE_SUFFIX[name])
         bridge_ipv6 = "50:0:1::{}/48".format(PE_SUFFIX[name])
 
-        pe.run("ip link add vrf-blue type vrf table 10")
-        pe.run("ip link set dev vrf-blue up")
-        pe.run("ip link add vxlan100 type vxlan id 100 dstport 4789 local {}".format(vtep_ip))
-        pe.run("ip link add name br100 type bridge stp_state 0")
-        pe.run("ip link set dev vxlan100 master br100")
-        pe.run("ip link set dev {}-eth1 master br100".format(name))
-        pe.run("ip addr add {} dev br100".format(bridge_ip))
-        pe.run("ip link set up dev br100")
-        pe.run("ip link set up dev vxlan100")
-        pe.run("ip link set up dev {}-eth1".format(name))
-        pe.run("ip link set dev br100 master vrf-blue")
-        pe.run("ip -6 addr add {} dev br100".format(bridge_ipv6))
-
-        pe.run("ip link add vxlan1000 type vxlan id 1000 dstport 4789 local {}".format(vtep_ip))
-        pe.run("ip link add name br1000 type bridge stp_state 0")
-        pe.run("ip link set dev vxlan1000 master br100")
-        pe.run("ip link set up dev br1000")
-        pe.run("ip link set up dev vxlan1000")
-        pe.run("ip link set dev br1000 master vrf-blue")
-
-        pe.run("sysctl -w net.ipv4.ip_forward=1")
-        pe.run("sysctl -w net.ipv6.conf.all.forwarding=1")
-        pe.run("sysctl -w net.ipv4.udp_l3mdev_accept={}".format(l3mdev_accept))
-        pe.run("sysctl -w net.ipv4.tcp_l3mdev_accept={}".format(l3mdev_accept))
+        pe.cmd_raises("ip link add vrf-blue type vrf table 10")
+        pe.cmd_raises("ip link set dev vrf-blue up")
+        pe.cmd_raises(
+            "ip link add vxlan100 type vxlan id 100 dstport 4789 local {}".format(
+                vtep_ip
+            )
+        )
+        pe.cmd_raises("ip link add name br100 type bridge stp_state 0")
+        pe.cmd_raises("ip link set dev vxlan100 master br100")
+        pe.cmd_raises("ip link set dev {}-eth1 master br100".format(name))
+        pe.cmd_raises("ip addr add {} dev br100".format(bridge_ip))
+        pe.cmd_raises("ip link set up dev br100")
+        pe.cmd_raises("ip link set up dev vxlan100")
+        pe.cmd_raises("ip link set up dev {}-eth1".format(name))
+        pe.cmd_raises("ip link set dev br100 master vrf-blue")
+        pe.cmd_raises("ip -6 addr add {} dev br100".format(bridge_ipv6))
+
+        pe.cmd_raises(
+            "ip link add vxlan1000 type vxlan id 1000 dstport 4789 local {}".format(
+                vtep_ip
+            )
+        )
+        pe.cmd_raises("ip link add name br1000 type bridge stp_state 0")
+        pe.cmd_raises("ip link set dev vxlan1000 master br100")
+        pe.cmd_raises("ip link set up dev br1000")
+        pe.cmd_raises("ip link set up dev vxlan1000")
+        pe.cmd_raises("ip link set dev br1000 master vrf-blue")
+
+        pe.cmd_raises("sysctl -w net.ipv4.ip_forward=1")
+        pe.cmd_raises("sysctl -w net.ipv6.conf.all.forwarding=1")
+        pe.cmd_raises("sysctl -w net.ipv4.udp_l3mdev_accept={}".format(l3mdev_accept))
+        pe.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept={}".format(l3mdev_accept))
 
     # For all registred routers, load the zebra configuration file
     for (name, router) in tgen.routers().items():
@@ -353,9 +364,9 @@ def test_evpn_gateway_ip_flap_rt2(request):
 
     step("Shut down VxLAN interface at PE1 which results in withdraw of type-2 routes")
 
-    pe1 = tgen.gears['PE1']
+    pe1 = tgen.net["PE1"]
 
-    pe1.run('ip link set dev vxlan100 down')
+    pe1.cmd_raises("ip link set dev vxlan100 down")
 
     result, assertmsg = evpn_gateway_ip_show_op_check("no_rt2")
     if result is not None:
@@ -364,7 +375,7 @@ def test_evpn_gateway_ip_flap_rt2(request):
 
     step("Bring up VxLAN interface at PE1 and advertise type-2 routes again")
 
-    pe1.run('ip link set dev vxlan100 up')
+    pe1.cmd_raises("ip link set dev vxlan100 up")
 
     result, assertmsg = evpn_gateway_ip_show_op_check("base")
     if result is not None:
index 59024f7b71c15265896ec0e7b0cd03e2c271000a..02e67b70c03c4462b309af2d5b47a65d52905274 100644 (file)
@@ -44,7 +44,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
@@ -97,12 +97,6 @@ def setup_module(mod):
         "ip link set dev loop101 master {}-vrf-101",
         "ip link set dev loop101 up",
     ]
-    cmds_netns = [
-        "ip netns add {}-vrf-101",
-        "ip link add loop101 type dummy",
-        "ip link set dev loop101 netns {}-vrf-101",
-        "ip netns exec {}-vrf-101 ip link set dev loop101 up",
-    ]
 
     cmds_r2 = [  # config routing 101
         "ip link add name bridge-101 up type bridge stp_state 0",
@@ -113,40 +107,41 @@ def setup_module(mod):
         "ip link set vxlan-101 up type bridge_slave learning off flood off mcast_flood off",
     ]
 
-    cmds_r1_netns_method3 = [
-        "ip link add name vxlan-{1} type vxlan id {1} dstport 4789 dev {0}-eth0 local 192.168.100.21",
-        "ip link set dev vxlan-{1} netns {0}-vrf-{1}",
-        "ip netns exec {0}-vrf-{1} ip li set dev lo up",
-        "ip netns exec {0}-vrf-{1} ip link add name bridge-{1} up type bridge stp_state 0",
-        "ip netns exec {0}-vrf-{1} ip link set dev vxlan-{1} master bridge-{1}",
-        "ip netns exec {0}-vrf-{1} ip link set bridge-{1} up",
-        "ip netns exec {0}-vrf-{1} ip link set vxlan-{1} up",
-    ]
+    cmds_r1_netns_method3 = [
+        "ip link add name vxlan-{1} type vxlan id {1} dstport 4789 dev {0}-eth0 local 192.168.100.21",
+        "ip link set dev vxlan-{1} netns {0}-vrf-{1}",
+        "ip netns exec {0}-vrf-{1} ip li set dev lo up",
+        "ip netns exec {0}-vrf-{1} ip link add name bridge-{1} up type bridge stp_state 0",
+        "ip netns exec {0}-vrf-{1} ip link set dev vxlan-{1} master bridge-{1}",
+        "ip netns exec {0}-vrf-{1} ip link set bridge-{1} up",
+        "ip netns exec {0}-vrf-{1} ip link set vxlan-{1} up",
+    ]
 
     router = tgen.gears["r1"]
-    for cmd in cmds_netns:
-        logger.info("cmd to r1: " + cmd)
-        output = router.run(cmd.format("r1"))
-        logger.info("result: " + output)
+
+    ns = "r1-vrf-101"
+    tgen.net["r1"].add_netns(ns)
+    tgen.net["r1"].cmd_raises("ip link add loop101 type dummy")
+    tgen.net["r1"].set_intf_netns("loop101", ns, up=True)
 
     router = tgen.gears["r2"]
     for cmd in cmds_vrflite:
         logger.info("cmd to r2: " + cmd.format("r2"))
-        output = router.run(cmd.format("r2"))
+        output = router.cmd_raises(cmd.format("r2"))
         logger.info("result: " + output)
 
     for cmd in cmds_r2:
         logger.info("cmd to r2: " + cmd.format("r2"))
-        output = router.run(cmd.format("r2"))
+        output = router.cmd_raises(cmd.format("r2"))
         logger.info("result: " + output)
 
-    router = tgen.gears["r1"]
-    bridge_id = "101"
-    for cmd in cmds_r1_netns_method3:
-        logger.info("cmd to r1: " + cmd.format("r1", bridge_id))
-        output = router.run(cmd.format("r1", bridge_id))
-        logger.info("result: " + output)
-    router = tgen.gears["r1"]
+    tgen.net["r1"].cmd_raises("ip link add name vxlan-101 type vxlan id 101 dstport 4789 dev r1-eth0 local 192.168.100.21")
+    tgen.net["r1"].set_intf_netns("vxlan-101", "r1-vrf-101", up=True)
+    tgen.net["r1"].cmd_raises("ip -n r1-vrf-101 link set lo up")
+    tgen.net["r1"].cmd_raises("ip -n r1-vrf-101 link add name bridge-101 up type bridge stp_state 0")
+    tgen.net["r1"].cmd_raises("ip -n r1-vrf-101 link set dev vxlan-101 master bridge-101")
+    tgen.net["r1"].cmd_raises("ip -n r1-vrf-101 link set bridge-101 up")
+    tgen.net["r1"].cmd_raises("ip -n r1-vrf-101 link set vxlan-101 up")
 
     for rname, router in router_list.items():
         if rname == "r1":
@@ -170,12 +165,8 @@ def setup_module(mod):
 def teardown_module(_mod):
     "Teardown the pytest environment"
     tgen = get_topogen()
-    cmds_rx_netns = ["ip netns del {}-vrf-101"]
 
-    router = tgen.gears["r1"]
-    for cmd in cmds_rx_netns:
-        logger.info("cmd to r1: " + cmd.format("r1"))
-        output = router.run(cmd.format("r1"))
+    tgen.net["r1"].delete_netns("r1-vrf-101")
     tgen.stop_topology()
 
 
index 763cf9c156c635383d185dfc7303a6732bf99bdf..0380ac07d0083d59d0318892e6baa987e55d390e 100755 (executable)
@@ -44,7 +44,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd, pytest.mark.ospfd]
 
index d19b7722d05cab16a675e46c2f208e7a0ca83657..54f61f92e5c11f6a352fffe03a5882d81d6a433c 100644 (file)
@@ -45,7 +45,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd, pytest.mark.ospfd]
 
index fdd84fcd401a7a9d2c5e0992c5ef9555f982c242..6a12ed80d34761bfe8f578bfb0628ca164fb0ee5 100644 (file)
@@ -69,7 +69,7 @@ from lib.lutil import lUtil
 from lib.lutil import luCommand
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 
 pytestmark = [pytest.mark.bgpd]
index 330ae5e437607b915ed98b881f6504b4ab28af8c..bd3f6209ae12d04579284e589942c6278b09cf03 100644 (file)
@@ -106,7 +106,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 # Import topoJson from lib, to create topology and initial configuration
 from lib.topojson import build_topo_from_json, build_config_from_json
index 83bf4fcc1832d2db0adfa20b74237467a185331c..dd44cbf96d4949c4f37259c529aca5a529c55e75 100644 (file)
@@ -102,7 +102,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 # Import topoJson from lib, to create topology and initial configuration
 from lib.topojson import build_topo_from_json, build_config_from_json
index 77f86a0bb801bc072774195b32fbe3b87529e78d..d32ba1c1f176b96efe3223daf1ae2e807bee1820 100644 (file)
@@ -73,7 +73,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index fcfeaab6132cd450eab516bda6020683475c388c..2595b2099694a77fc7a035ff0272ff859b352731 100644 (file)
@@ -42,7 +42,7 @@ sys.path.append(os.path.join(CWD, "../../"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from time import sleep
 
 from lib.common_config import (
index d83e9e25a1e046aacd4a1721af7889c6f7f3dd79..3f3354dc802055469df3d18189c8170234933686 100644 (file)
@@ -42,7 +42,7 @@ sys.path.append(os.path.join(CWD, "../../"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from time import sleep
 
 from lib.common_config import (
index 0df2c9cb5a31b0f769b224416f96832c6bfacc4f..dc587cd70919d8612061ba403c1bf613c943bc39 100644 (file)
@@ -43,7 +43,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 
 pytestmark = [pytest.mark.bgpd]
index 752e37f5f880f522fb713647a6579fc0365c039d..6eaf8e07f9e571e5a194a9a20743d75054723716 100644 (file)
@@ -85,7 +85,7 @@ from lib.topolog import logger
 from lib.ltemplate import ltemplateRtrCmd
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 import shutil
 
@@ -146,10 +146,6 @@ def ltemplatePreRouterStartHook():
     if tgen.hasmpls != True:
         logger.info("MPLS not available, skipping setup")
         return False
-    # check for normal init
-    if len(tgen.net) == 1:
-        logger.info("Topology not configured, skipping setup")
-        return False
     # configure r2 mpls interfaces
     intfs = ["lo", "r2-eth0", "r2-eth1", "r2-eth2"]
     for intf in intfs:
index c2f85c68c4b7704eb0734333edfc61653dd86521..40009b9ba94dd205aee0c3fc0e8c5d1c64347aeb 100644 (file)
@@ -86,7 +86,7 @@ from lib.topolog import logger
 from lib.ltemplate import ltemplateRtrCmd
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 import shutil
 
@@ -155,10 +155,6 @@ def ltemplatePreRouterStartHook():
     if tgen.hasmpls != True:
         logger.info("MPLS not available, skipping setup")
         return False
-    # check for normal init
-    if len(tgen.net) == 1:
-        logger.info("Topology not configured, skipping setup")
-        return False
     # trace errors/unexpected output
     cc.resetCounts()
     # configure r2 mpls interfaces
index 6f1ca90afbc6a734517374aa354a941fc8c4b6d2..36dee39a1374493ae633b239121592741b1fc3f9 100644 (file)
@@ -12,7 +12,7 @@
     "lo_prefix": {
         "ipv4": "1.0.",
         "v4mask": 32,
-        "ipv6": "2001:DB8:F::",
+        "ipv6": "2001:db8:f::",
         "v6mask": 128
     },
     "routers": {
index 69eba23e0fe47f925f053680504ca1cc8368c902..d138a689e2cc31f74e4506bebac63ac33f6d124e 100644 (file)
@@ -54,7 +54,7 @@ from json import load as json_load
 
 # Required to instantiate the topology builder class.
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import (
     start_topology,
index b033c7e5cdb902754035e0219e19c1ce93792cdb..c9115bf42b5d396dc6dcea749c44bb4f27dc3b03 100644 (file)
@@ -74,7 +74,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # Import topogen and topotest helpers
 # Import topoJson from lib, to create topology and initial configuration
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import (
     start_topology,
index a9b4b6b03165487e39f432ebbb0af81d09acb12b..4ad1dbcaa64f1ade842267810298f55a486cd977 100644 (file)
@@ -44,7 +44,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index a7959fe61beaf72c5dd47bb6d570b96b8db04bd3..fdbc5e553b07531fc747d9fb6f5b414c830436c8 100755 (executable)
@@ -53,7 +53,7 @@ from lib.topojson import build_topo_from_json, build_config_from_json
 from lib.topojson import linux_intf_config_from_json
 from lib.common_config import start_topology
 from lib.topotest import router_json_cmp, run_and_expect
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from functools import partial
 
 pytestmark = [pytest.mark.bgpd]
index 7c5ed87dd0771a4d72c540c249dcbb5146a5e66f..ec4919650e9175f3f444e0f950088769f3c9fd4f 100644 (file)
@@ -41,7 +41,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index d1745674f008fdc1e70862c44c070bd2e6485593..258ddb148d06c6b5e5868af0443d8fb1930ebf39 100644 (file)
@@ -43,7 +43,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 
 pytestmark = [pytest.mark.bgpd]
index 0fde32a68bec14b789f406d5d99aada9452840c3..c800946840df127bab19fffee529e2fa821efa4a 100644 (file)
@@ -45,7 +45,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 5c939107886a4770330c72122c116e1b7d65e0cc..5b762bfe52a8cdc1800ff4be6841d6b6493d3439 100644 (file)
@@ -41,7 +41,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 84e10af5b3845e7ff65b1076613afd2bb85a23f7..9a20f7d451ef74f89a853b93f1e7667f04b484e8 100644 (file)
@@ -114,7 +114,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topotest import iproute2_is_vrf_capable
 from lib.common_config import (
     step,
index 31569e69b4b507bb1f75ca4a578f7473c038f73b..7fd9fac6ef6a9473179f0e08e43605e0ce72d469 100644 (file)
@@ -70,7 +70,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topotest import iproute2_is_vrf_capable
 from lib.common_config import (
     step,
index caaa81066213183f4e0d6abdef43705970c16354..a949c5282c1489a1842edb5b93225766d49c0638 100644 (file)
@@ -70,17 +70,12 @@ import glob
 import json
 from time import sleep
 
-from mininet.topo import Topo
-from mininet.net import Mininet
-from mininet.node import Node, OVSSwitch, Host
-from mininet.log import setLogLevel, info
-from mininet.cli import CLI
-from mininet.link import Intf
-
 from functools import partial
 
 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 from lib import topotest
+from lib.micronet_compat import Mininet
+from lib.micronet_compat import Topo
 
 
 pytestmark = [pytest.mark.bgpd]
@@ -121,10 +116,10 @@ class NetworkTopo(Topo):
         # Setup Switches
         switch = {}
         # First switch is for a dummy interface (for local network)
-        switch[0] = self.addSwitch("sw0", cls=topotest.LegacySwitch)
+        switch[0] = self.addSwitch("sw0")
         self.addLink(switch[0], router[1], intfName2="r1-stub")
         # Second switch is for connection to all peering routers
-        switch[1] = self.addSwitch("sw1", cls=topotest.LegacySwitch)
+        switch[1] = self.addSwitch("sw1")
         self.addLink(switch[1], router[1], intfName2="r1-eth0")
         for j in range(1, 9):
             self.addLink(switch[1], peer[j], intfName2="peer%s-eth0" % j)
@@ -353,8 +348,6 @@ def test_shutdown_check_memleak():
 
 
 if __name__ == "__main__":
-
-    setLogLevel("info")
     # To suppress tracebacks, either use the following pytest call or add "--tb=no" to cli
     # retval = pytest.main(["-s", "--tb=no"])
     retval = pytest.main(["-s"])
index a591c2f3f4ff4216c1bd17badeb6745917d13e36..0fc9b7e021a1223b96d61d16b7738032c7dae3de 100644 (file)
@@ -65,7 +65,7 @@ sys.path.append(os.path.join(CWD, "../"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 
index 21dc7257933b3d0e4254d065ae0275e0ca29acf7..70e49d5cd4aaca03cc70fd7a5381b6b3c79656e5 100644 (file)
@@ -36,7 +36,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 
 pytestmark = [pytest.mark.bgpd]
index 743fcf7b3a00a6d4e996353f07a905e38bf936f7..c5924c787cabffb48392b10de162fabb99fff18b 100755 (executable)
@@ -71,7 +71,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd, pytest.mark.staticd]
 
index 10dee0f77bea4f4c4ebb7ec79714b74b1775de01..287ff87bf8e59d195291fd88dcc195bc69d246f7 100644 (file)
@@ -55,7 +55,7 @@ sys.path.append(os.path.join(CWD, "../"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
index fffe135b77dc6bb3b16012ebb4340bfd6505510c..72df2eab6b6a6f5f023667f94c2ef87b3f518fa0 100644 (file)
@@ -39,7 +39,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 703dcd7e2dbdc4c9c4c74398353228cadaa8ba62..6da44faf57947533349e745e7fe443439ff0bf27 100755 (executable)
@@ -39,7 +39,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 2fe80c77f0a9f59d2e1d5790ec2d1d0c248528bc..320c7eb78c6bf10ae229dffdf9724236d52d835b 100644 (file)
@@ -52,7 +52,7 @@ sys.path.append(os.path.join(CWD, "../"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib import topotest
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
index c644d2104f35eb990399c4fdd00e17993afcb123..f13b068d96b0c4d57d172c4ebc3c17910da3c9a5 100644 (file)
@@ -48,7 +48,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 2c85cf6e9da6e5595f52e266e6f334e5851acaae..9166c57dfc83f7abb4e475c6f7979feb8c3b79a3 100644 (file)
@@ -72,7 +72,7 @@ from lib.topolog import logger
 from lib.ltemplate import ltemplateRtrCmd
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 import shutil
 
@@ -116,10 +116,6 @@ def ltemplatePreRouterStartHook():
     cc = ltemplateRtrCmd()
     tgen = get_topogen()
     logger.info("pre router-start hook")
-    # check for normal init
-    if len(tgen.net) == 1:
-        logger.info("Topology not configured, skipping setup")
-        return False
     return True
 
 
index ecf1ed521c4aa84ced6ee404bbaaae4cdd7b254c..04a66d0e25fe118d82c58e3075b27671e7cb3af3 100644 (file)
@@ -43,7 +43,7 @@ sys.path.append(os.path.join(CWD, "../"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib import topotest
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
index 7de56849c81c443f67512b953845aca1333a88af..17058d178b03d5b43905c2778e6b7c67d2a8ae97 100644 (file)
@@ -36,7 +36,7 @@ sys.path.append(os.path.join(CWD, "../"))
 # Import topogen and topotest helpers
 from lib import topotest
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 # Required to instantiate the topology builder class.
 from lib.topojson import *
index 230a89ace1560ec7e005839ff6021b51d7e5494a..54b3340d68d7cb8a115ae4b92f22a8b5ee9d741d 100644 (file)
@@ -118,7 +118,7 @@ sys.path.append(os.path.join(CWD, "../"))
 # Import topogen and topotest helpers
 from lib import topotest
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 # Required to instantiate the topology builder class.
 from lib.common_config import (
index 664c9dc91a131a8ebe3a98825ef883012b037b5d..72c25a3c6f1c39bc387ccc91d2f9c188791026d9 100644 (file)
@@ -47,7 +47,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index dffe24f3a02017e6d88f4d6c64811896b00c95c8..526e1202da8ea2fbb320dcff280583ccc96be7f9 100644 (file)
@@ -41,7 +41,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 
 pytestmark = [pytest.mark.bgpd]
index b4af911d91dd09cc289e06dd01156df9669e7302..531e1814a50a903af7bd2d844b8606a0a53d7c44 100644 (file)
@@ -42,7 +42,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 36218d35384cfee1c22cba75f2158b4dd7608777..4aff57acaf17ecf5f4906cf1901f72caee10ae78 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index 714585cb9bc35c6d0fb87dbb8249a0644018985a..29c2041d12fa5cd30a09f458ebc299f2dbe6d5bc 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index 36218d35384cfee1c22cba75f2158b4dd7608777..4aff57acaf17ecf5f4906cf1901f72caee10ae78 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index 36218d35384cfee1c22cba75f2158b4dd7608777..4aff57acaf17ecf5f4906cf1901f72caee10ae78 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index c903c1ad2e7e2cf8d2642975be5ea920f7aadd9f..2ada53ced999556c1ac42d34331040fc2bb9db5c 100644 (file)
@@ -14,4 +14,7 @@ rouser frr
 
 master agentx
 
-noRangeCheck yes
\ No newline at end of file
+noRangeCheck yes
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index 0cfebc72381c6c52181693d654645c76d699fe74..3db1ab7acedb9416edd51ec41d8c2314ffb9fdd7 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index b9eb00ea521d45dc127eafeaafab6cb3f872632e..494df81ffb4abf588b483d3d146f007061d8496d 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index ec35f9f9c97c7eac1e74fa979ff46afc0dce7720..f3809607e35e6bf4dab31ee9b4193f1bafd8d333 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index b830e16b9a03a5cee10278e5962e9aacd730239c..37486f1d7359c27f4dae465d418955c51ac8f7be 100755 (executable)
@@ -45,7 +45,7 @@ from lib.topolog import logger
 from lib.snmptest import SnmpTester
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd, pytest.mark.isisd, pytest.mark.snmp]
 
@@ -255,7 +255,7 @@ def test_pe1_converge_evpn():
     "Wait for protocol convergence"
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "10.1.1.1", "public", "2c")
 
     assertmsg = "BGP SNMP does not seem to be running"
@@ -297,7 +297,7 @@ interfaces_down_test = {
 def test_r1_mplsvpn_scalars():
     "check scalar values"
     tgen = get_topogen()
-    r1 = tgen.net.get("r1")
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "10.1.1.1", "public", "2c")
 
     for item in interfaces_up_test.keys():
@@ -310,12 +310,11 @@ def test_r1_mplsvpn_scalars():
 def test_r1_mplsvpn_scalars_interface():
     "check scalar interface changing values"
     tgen = get_topogen()
-    r1 = tgen.net.get("r1")
-    r1_cmd = tgen.gears["r1"]
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "10.1.1.1", "public", "2c")
 
-    r1_cmd.vtysh_cmd("conf t\ninterface r1-eth3\nshutdown")
-    r1_cmd.vtysh_cmd("conf t\ninterface r1-eth4\nshutdown")
+    r1.vtysh_cmd("conf t\ninterface r1-eth3\nshutdown")
+    r1.vtysh_cmd("conf t\ninterface r1-eth4\nshutdown")
 
     for item in interfaces_up_test.keys():
         assertmsg = "{} should be {}: value {}".format(
@@ -323,8 +322,8 @@ def test_r1_mplsvpn_scalars_interface():
         )
         assert r1_snmp.test_oid(item, interfaces_down_test[item]), assertmsg
 
-    r1_cmd.vtysh_cmd("conf t\ninterface r1-eth3\nno shutdown")
-    r1_cmd.vtysh_cmd("conf t\ninterface r1-eth4\nno shutdown")
+    r1.vtysh_cmd("conf t\ninterface r1-eth3\nno shutdown")
+    r1.vtysh_cmd("conf t\ninterface r1-eth4\nno shutdown")
 
     for item in interfaces_up_test.keys():
         assertmsg = "{} should be {}: value {}".format(
@@ -378,15 +377,14 @@ def test_r1_mplsvpn_IfTable():
     "mplsL3VpnIf table values"
 
     tgen = get_topogen()
-    r1 = tgen.net.get("r1")
-    r1r = tgen.gears["r1"]
+    r1 = tgen.gears["r1"]
 
     r1_snmp = SnmpTester(r1, "10.1.1.1", "public", "2c")
 
     # tgen.mininet_cli()
-    eth3_ifindex = router_interface_get_ifindex(r1r, "eth3")
-    eth4_ifindex = router_interface_get_ifindex(r1r, "eth4")
-    eth5_ifindex = router_interface_get_ifindex(r1r, "eth5")
+    eth3_ifindex = router_interface_get_ifindex(r1, "eth3")
+    eth4_ifindex = router_interface_get_ifindex(r1, "eth4")
+    eth5_ifindex = router_interface_get_ifindex(r1, "eth5")
 
     # get ifindex and make sure the oid is correct
 
@@ -432,8 +430,7 @@ vrftable_test = {
 def test_r1_mplsvpn_VrfTable():
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
-    r1r = tgen.gears["r1"]
+    r1 = tgen.gears["r1"]
 
     r1_snmp = SnmpTester(r1, "10.1.1.1", "public", "2c")
 
@@ -476,7 +473,7 @@ def test_r1_mplsvpn_VrfTable():
         "mplsL3VpnVrfConfLastChanged.{}".format(snmp_str_to_oid("VRF-a"))
     )
     ts_val_last_1 = get_timetick_val(ts_last)
-    r1r.vtysh_cmd("conf t\ninterface r1-eth3\nshutdown")
+    r1.vtysh_cmd("conf t\ninterface r1-eth3\nshutdown")
     active_int = r1_snmp.get(
         "mplsL3VpnVrfActiveInterfaces.{}".format(snmp_str_to_oid("VRF-a"))
     )
@@ -491,7 +488,7 @@ def test_r1_mplsvpn_VrfTable():
     ts_val_last_2 = get_timetick_val(ts_last)
     assertmsg = "mplsL3VpnVrfConfLastChanged does not update on interface change"
     assert ts_val_last_2 > ts_val_last_1, assertmsg
-    r1r.vtysh_cmd("conf t\ninterface r1-eth3\nno shutdown")
+    r1.vtysh_cmd("conf t\ninterface r1-eth3\nno shutdown")
 
     # take Last changed time, fiddle with associated interfaces, ensure
     # time changes and active interfaces change
@@ -533,8 +530,7 @@ rt_table_test = {
 def test_r1_mplsvpn_VrfRT_table():
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
-    r1r = tgen.gears["r1"]
+    r1 = tgen.gears["r1"]
 
     r1_snmp = SnmpTester(r1, "10.1.1.1", "public", "2c")
 
@@ -554,8 +550,7 @@ def test_r1_mplsvpn_VrfRT_table():
 def test_r1_mplsvpn_perf_table():
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
-    r1r = tgen.gears["r1"]
+    r1 = tgen.gears["r1"]
 
     r1_snmp = SnmpTester(r1, "10.1.1.1", "public", "2c")
 
@@ -682,8 +677,7 @@ rte_table_test = {
 def test_r1_mplsvpn_rte_table():
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
-    r1r = tgen.gears["r1"]
+    r1 = tgen.gears["r1"]
 
     r1_snmp = SnmpTester(r1, "10.1.1.1", "public", "2c")
 
@@ -734,12 +728,12 @@ def test_r1_mplsvpn_rte_table():
     # generate ifindex row grabbing ifindices from vtysh
     if passed:
         ifindex_row = [
-            router_interface_get_ifindex(r1r, "eth3"),
-            router_interface_get_ifindex(r1r, "eth4"),
-            router_interface_get_ifindex(r1r, "eth2"),
-            router_interface_get_ifindex(r1r, "eth3"),
+            router_interface_get_ifindex(r1, "eth3"),
+            router_interface_get_ifindex(r1, "eth4"),
+            router_interface_get_ifindex(r1, "eth2"),
+            router_interface_get_ifindex(r1, "eth3"),
             "0",
-            router_interface_get_ifindex(r1r, "eth4"),
+            router_interface_get_ifindex(r1, "eth4"),
             "0",
         ]
         if not r1_snmp.test_oid_walk(
index 3251484514e945b78133d9df78aba664c8f663d8..a50151ab23caacf33d091d11b75c0f457ae5b6e6 100755 (executable)
@@ -37,7 +37,7 @@ from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 from lib.common_config import required_linux_kernel_version
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 476f6b556b70d7bef53554ed4e64f57f763eca74..3e421ad5c1bfc82865469279f91afd1d83ce617a 100644 (file)
@@ -38,7 +38,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index cb1d28cc06388a2d915510ec531d2d36fd90d666..7ca30daf4241a5169e1dabcc86dcbea724bc0475 100644 (file)
@@ -49,7 +49,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 2972a25f38dcacb2b7ac56d2fc18523238cea08b..a936d44d1bb9807533f7543bba3b3bec988ddf49 100644 (file)
@@ -71,7 +71,7 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 1e371f2195f3b30cd2920a2d730e16be64d7c3a7..55b4f1581f0ebd5bee73670f7d5d64db234af5d7 100644 (file)
@@ -49,7 +49,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
 from lib.topotest import version_cmp
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import (
     start_topology,
index f701529b525572c39aae283fe6726f08bd9f1a00..18f048129c1ec777f245a8ab94f2a711ab920465 100644 (file)
@@ -47,7 +47,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
 from lib.topotest import version_cmp
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import (
     start_topology,
index 57ba87e887e3de8b78e029c74d8b1447c720c60e..b818816d9ecdf03cfd1e64212bd63fa8c4d5c94f 100644 (file)
@@ -45,7 +45,7 @@ from lib.topolog import logger
 from lib.common_config import required_linux_kernel_version
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index 60511aebde75742c9842b3fb5ffabce55d936ce0..9c4c78bf1a38d3f43bf74e0e1be5ab7d11b2e991 100644 (file)
@@ -42,7 +42,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
@@ -108,24 +108,11 @@ def setup_module(module):
 
     # create VRF r1-bgp-cust1
     # move r1-eth0 to VRF r1-bgp-cust1
-    cmds = [
-        "if [ -e /var/run/netns/{0}-bgp-cust1 ] ; then ip netns del {0}-bgp-cust1 ; fi",
-        "ip netns add {0}-bgp-cust1",
-        "ip link set {0}-eth0 netns {0}-bgp-cust1 up",
-    ]
-    for cmd in cmds:
-        cmd = cmd.format("r1")
-        logger.info("cmd: " + cmd)
-        output = router.run(cmd.format("r1"))
-        if output != None and len(output) > 0:
-            logger.info(
-                'Aborting due to unexpected output: cmd="{}" output=\n{}'.format(
-                    cmd, output
-                )
-            )
-            return pytest.skip(
-                "Skipping BGP VRF NETNS Test. Unexpected output to command: " + cmd
-            )
+
+    ns = "{}-bgp-cust1".format("r1")
+    router.net.add_netns(ns)
+    router.net.set_intf_netns("r1-eth0", ns, up=True)
+
     # run daemons
     router.load_config(
         TopoRouter.RD_ZEBRA,
@@ -152,14 +139,10 @@ def setup_module(module):
 
 def teardown_module(module):
     tgen = get_topogen()
-    # move back r1-eth0 to default VRF
-    # delete VRF r1-bgp-cust1
-    cmds = [
-        "ip netns exec {0}-bgp-cust1 ip link set {0}-eth0 netns 1",
-        "ip netns delete {0}-bgp-cust1",
-    ]
-    for cmd in cmds:
-        tgen.net["r1"].cmd(cmd.format("r1"))
+
+    # Move interfaces out of vrf namespace and delete the namespace
+    tgen.net["r1"].reset_intf_netns("r1-eth0")
+    tgen.net["r1"].delete_netns("r1-bgp-cust1")
 
     tgen.stop_topology()
 
index fcec0c23af2c84ac8fbc34103165eb8a6b452a12..7ab2c608b193fd1f064171c28ecc28144b165997 100644 (file)
@@ -39,7 +39,7 @@ from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
index db8baa860dfbb169bc9f60542dba90ae863cf01b..54dca32e17f296f69b5ea077db69758a67508fdc 100644 (file)
@@ -45,7 +45,7 @@ sys.path.append(os.path.join(CWD, "../"))
 # pylint: disable=C0413
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.staticd]
 
@@ -172,7 +172,7 @@ def test_static_timing():
         do_config(prefix_count, bad_indices, base_delta, 2, True, ipv6, prefix_base[ipv6][0])
 
         # Remove 1/2 of duplicate
-        do_config(prefix_count / 2, bad_indices, base_delta, 2, False, ipv6, prefix_base[ipv6][0])
+        do_config(prefix_count // 2, bad_indices, base_delta, 2, False, ipv6, prefix_base[ipv6][0])
 
         # Add all back in so 1/2 replicate 1/2 new
         do_config(prefix_count, bad_indices, base_delta, 2, True, ipv6, prefix_base[ipv6][0])
index 6993bc53e706fe545834e6ceecc48d007f874b97..982d3f0fa3992bf7a5c66605410514b22173a4e6 100644 (file)
@@ -46,7 +46,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 #####################################################
 ##
index b1f5daef1e435fc47f43aa2400bc54e12126bca9..e549d1acb2a6953169d87cca616f0bcef3bf0f85 100644 (file)
@@ -47,7 +47,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd, pytest.mark.bgpd]
 
index 09d66baa79ceb1b23d89a103c0fecab9f979703a..86253acc4df712c3678f00d529580b7aa5bc6c62 100644 (file)
@@ -51,7 +51,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # Import topogen and topotest helpers
 from lib.topotest import version_cmp
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import (
     start_topology,
@@ -99,7 +99,6 @@ except IOError:
 # Reading the data from JSON File for topology creation
 # Global variables
 TCPDUMP_FILE = "evpn_log.txt"
-LOGDIR = "/tmp/topotests/"
 NETWORK1_1 = {"ipv4": "10.1.1.1/32", "ipv6": "10::1/128"}
 NETWORK1_2 = {"ipv4": "40.1.1.1/32", "ipv6": "40::1/128"}
 NETWORK1_3 = {"ipv4": "40.1.1.2/32", "ipv6": "40::2/128"}
index 521f2335b47331c98c36230aec8a8a72a7e07431..4f2aef17c07f1e63aeb530d3238251f133d163ab 100644 (file)
@@ -55,7 +55,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # Import topogen and topotest helpers
 from lib.topotest import version_cmp
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import (
     start_topology,
index 0265dbe796cb616dcb68ed0e31fd03561678743f..534dd998d9ca4554fe295efbb2efa954f5b4db2a 100644 (file)
@@ -41,7 +41,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 
 # TODO: select markers based on daemons used during test
@@ -87,7 +87,7 @@ def setup_module(mod):
     "Sets up the pytest environment"
     # This function initiates the topology build with Topogen...
     tgen = Topogen(TemplateTopo, mod.__name__)
-    # ... and here it calls Mininet initialization functions.
+    # ... and here it calls initialization functions.
     tgen.start_topology()
 
     # This is a sample of configuration loading.
@@ -113,15 +113,15 @@ def teardown_module(mod):
     tgen.stop_topology()
 
 
-def test_call_mininet_cli():
-    "Dummy test that just calls mininet CLI so we can interact with the build."
+def test_call_cli():
+    "Dummy test that just calls tgen.cli() so we can interact with the build."
     tgen = get_topogen()
     # Don't run this test if we have any failure.
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
 
-    logger.info("calling mininet CLI")
-    tgen.mininet_cli()
+    # logger.info("calling CLI")
+    # tgen.cli()
 
 
 # Memory leak test template
index 09ac9f2fa43cecdf5e2ce1c590b66a5568babe9a..b088616374a561dcc9576b672fa12d14b5daab8e 100755 (executable)
@@ -40,7 +40,7 @@ sys.path.append(os.path.join(CWD, "../../"))
 from lib.topogen import Topogen, get_topogen
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 # Import topoJson from lib, to create topology and initial configuration
 from lib.common_config import (
index 26336d5de1eace20a04de6aceaf95198cc640b90..4b13dce7df347866aa93437a8c1250e038aeedda 100755 (executable)
@@ -39,7 +39,7 @@ sys.path.append(os.path.join(CWD, "../../"))
 from lib.topogen import Topogen, get_topogen
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 # Import topoJson from lib, to create topology and initial configuration
 from lib.common_config import (
index 012b05d3769dac9ab57234e2c88541c015a0f21b..07d13cb711b9abc92f701f84060380cefe76e51b 100755 (executable)
@@ -41,7 +41,7 @@ sys.path.append(os.path.join(CWD, "../../"))
 from lib.topogen import Topogen, get_topogen
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 # Import topoJson from lib, to create topology and initial configuration
 from lib.common_config import (
index dcfcd114356625b250a04797b9aace0fb2ec8738..a253b11c07f4c8c06cd16861e6d426092fab1d60 100755 (executable)
@@ -71,7 +71,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.isisd]
 
@@ -79,91 +79,87 @@ pytestmark = [pytest.mark.isisd]
 outputs = {}
 
 
-class TemplateTopo(Topo):
-    "Test topology builder"
-
-    def build(self, *_args, **_opts):
-        "Build function"
-        tgen = get_topogen(self)
-
-        #
-        # Define FRR Routers
-        #
-        for router in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6", "rt7"]:
-            tgen.add_router(router)
-
-        #
-        # Define connections
-        #
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["rt1"], nodeif="eth-rt2")
-        switch.add_link(tgen.gears["rt2"], nodeif="eth-rt1")
-        switch = tgen.add_switch("s2")
-        switch.add_link(tgen.gears["rt2"], nodeif="eth-rt3")
-        switch.add_link(tgen.gears["rt3"], nodeif="eth-rt2")
-        switch = tgen.add_switch("s3")
-        switch.add_link(tgen.gears["rt1"], nodeif="eth-rt3")
-        switch.add_link(tgen.gears["rt3"], nodeif="eth-rt1")
-        switch = tgen.add_switch("s4")
-        switch.add_link(tgen.gears["rt1"], nodeif="eth-rt4")
-        switch.add_link(tgen.gears["rt4"], nodeif="eth-rt1")
-        switch = tgen.add_switch("s5")
-        switch.add_link(tgen.gears["rt1"], nodeif="eth-rt5")
-        switch.add_link(tgen.gears["rt5"], nodeif="eth-rt1")
-        switch = tgen.add_switch("s6")
-        switch.add_link(tgen.gears["rt1"], nodeif="eth-rt6")
-        switch.add_link(tgen.gears["rt6"], nodeif="eth-rt1")
-        switch = tgen.add_switch("s7")
-        switch.add_link(tgen.gears["rt2"], nodeif="eth-rt7")
-        switch.add_link(tgen.gears["rt7"], nodeif="eth-rt2")
-        switch = tgen.add_switch("s8")
-        switch.add_link(tgen.gears["rt3"], nodeif="eth-rt7")
-        switch.add_link(tgen.gears["rt7"], nodeif="eth-rt3")
-        switch = tgen.add_switch("s9")
-        switch.add_link(tgen.gears["rt4"], nodeif="eth-rt7")
-        switch.add_link(tgen.gears["rt7"], nodeif="eth-rt4")
-        switch = tgen.add_switch("s10")
-        switch.add_link(tgen.gears["rt5"], nodeif="eth-rt7")
-        switch.add_link(tgen.gears["rt7"], nodeif="eth-rt5")
-        switch = tgen.add_switch("s11")
-        switch.add_link(tgen.gears["rt6"], nodeif="eth-rt7")
-        switch.add_link(tgen.gears["rt7"], nodeif="eth-rt6")
-
-        #
-        # Populate multi-dimensional dictionary containing all expected outputs
-        #
-        files = ["show_ipv6_route.ref", "show_yang_interface_isis_adjacencies.ref"]
-        for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6", "rt7"]:
-            outputs[rname] = {}
-            for step in range(1, 13 + 1):
-                outputs[rname][step] = {}
-                for file in files:
-                    if step == 1:
-                        # Get snapshots relative to the expected initial network convergence
-                        filename = "{}/{}/step{}/{}".format(CWD, rname, step, file)
-                        outputs[rname][step][file] = open(filename).read()
-                    else:
-                        if rname != "rt1":
-                            continue
-                        if file == "show_yang_interface_isis_adjacencies.ref":
-                            continue
-
-                        # Get diff relative to the previous step
-                        filename = "{}/{}/step{}/{}.diff".format(CWD, rname, step, file)
-
-                        # Create temporary files in order to apply the diff
-                        f_in = tempfile.NamedTemporaryFile()
-                        f_in.write(outputs[rname][step - 1][file])
-                        f_in.flush()
-                        f_out = tempfile.NamedTemporaryFile()
-                        os.system(
-                            "patch -s -o %s %s %s" % (f_out.name, f_in.name, filename)
-                        )
-
-                        # Store the updated snapshot and remove the temporary files
-                        outputs[rname][step][file] = open(f_out.name).read()
-                        f_in.close()
-                        f_out.close()
+def build_topo(tgen):
+    "Build function"
+
+    #
+    # Define FRR Routers
+    #
+    for router in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6", "rt7"]:
+        tgen.add_router(router)
+
+    #
+    # Define connections
+    #
+    switch = tgen.add_switch("s1")
+    switch.add_link(tgen.gears["rt1"], nodeif="eth-rt2")
+    switch.add_link(tgen.gears["rt2"], nodeif="eth-rt1")
+    switch = tgen.add_switch("s2")
+    switch.add_link(tgen.gears["rt2"], nodeif="eth-rt3")
+    switch.add_link(tgen.gears["rt3"], nodeif="eth-rt2")
+    switch = tgen.add_switch("s3")
+    switch.add_link(tgen.gears["rt1"], nodeif="eth-rt3")
+    switch.add_link(tgen.gears["rt3"], nodeif="eth-rt1")
+    switch = tgen.add_switch("s4")
+    switch.add_link(tgen.gears["rt1"], nodeif="eth-rt4")
+    switch.add_link(tgen.gears["rt4"], nodeif="eth-rt1")
+    switch = tgen.add_switch("s5")
+    switch.add_link(tgen.gears["rt1"], nodeif="eth-rt5")
+    switch.add_link(tgen.gears["rt5"], nodeif="eth-rt1")
+    switch = tgen.add_switch("s6")
+    switch.add_link(tgen.gears["rt1"], nodeif="eth-rt6")
+    switch.add_link(tgen.gears["rt6"], nodeif="eth-rt1")
+    switch = tgen.add_switch("s7")
+    switch.add_link(tgen.gears["rt2"], nodeif="eth-rt7")
+    switch.add_link(tgen.gears["rt7"], nodeif="eth-rt2")
+    switch = tgen.add_switch("s8")
+    switch.add_link(tgen.gears["rt3"], nodeif="eth-rt7")
+    switch.add_link(tgen.gears["rt7"], nodeif="eth-rt3")
+    switch = tgen.add_switch("s9")
+    switch.add_link(tgen.gears["rt4"], nodeif="eth-rt7")
+    switch.add_link(tgen.gears["rt7"], nodeif="eth-rt4")
+    switch = tgen.add_switch("s10")
+    switch.add_link(tgen.gears["rt5"], nodeif="eth-rt7")
+    switch.add_link(tgen.gears["rt7"], nodeif="eth-rt5")
+    switch = tgen.add_switch("s11")
+    switch.add_link(tgen.gears["rt6"], nodeif="eth-rt7")
+    switch.add_link(tgen.gears["rt7"], nodeif="eth-rt6")
+
+    #
+    # Populate multi-dimensional dictionary containing all expected outputs
+    #
+    files = ["show_ipv6_route.ref", "show_yang_interface_isis_adjacencies.ref"]
+    for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6", "rt7"]:
+        outputs[rname] = {}
+        for step in range(1, 13 + 1):
+            outputs[rname][step] = {}
+            for file in files:
+                if step == 1:
+                    # Get snapshots relative to the expected initial network convergence
+                    filename = "{}/{}/step{}/{}".format(CWD, rname, step, file)
+                    outputs[rname][step][file] = open(filename).read()
+                else:
+                    if rname != "rt1":
+                        continue
+                    if file == "show_yang_interface_isis_adjacencies.ref":
+                        continue
+
+                    # Get diff relative to the previous step
+                    filename = "{}/{}/step{}/{}.diff".format(CWD, rname, step, file)
+
+                    # Create temporary files in order to apply the diff
+                    f_in = tempfile.NamedTemporaryFile(mode="w")
+                    f_in.write(outputs[rname][step - 1][file])
+                    f_in.flush()
+                    f_out = tempfile.NamedTemporaryFile(mode="r")
+                    os.system(
+                        "patch -s -o %s %s %s" % (f_out.name, f_in.name, filename)
+                    )
+
+                    # Store the updated snapshot and remove the temporary files
+                    outputs[rname][step][file] = open(f_out.name).read()
+                    f_in.close()
+                    f_out.close()
 
 
 def setup_module(mod):
index 70dcff035fc11578ed06b198c207b663b4d305d3..df174e953186d086c5f2ddfecb6cd61a3f6819a7 100755 (executable)
@@ -82,7 +82,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.isisd]
 
index ded1a4cc22e986fc913bbdbcccb1f2dfa6434e18..325638a4783494e482a63b6910a26ae4b34afcd8 100755 (executable)
@@ -80,7 +80,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.isisd, pytest.mark.ldpd]
 
@@ -88,84 +88,80 @@ pytestmark = [pytest.mark.isisd, pytest.mark.ldpd]
 outputs = {}
 
 
-class TemplateTopo(Topo):
-    "Test topology builder"
-
-    def build(self, *_args, **_opts):
-        "Build function"
-        tgen = get_topogen(self)
-
-        #
-        # Define FRR Routers
-        #
-        for router in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6", "rt7", "rt8"]:
-            tgen.add_router(router)
-
-        #
-        # Define connections
-        #
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["rt1"], nodeif="eth-rt2")
-        switch.add_link(tgen.gears["rt2"], nodeif="eth-rt1")
-        switch = tgen.add_switch("s2")
-        switch.add_link(tgen.gears["rt1"], nodeif="eth-rt3")
-        switch.add_link(tgen.gears["rt3"], nodeif="eth-rt1")
-        switch = tgen.add_switch("s3")
-        switch.add_link(tgen.gears["rt2"], nodeif="eth-rt4")
-        switch.add_link(tgen.gears["rt4"], nodeif="eth-rt2")
-        switch = tgen.add_switch("s4")
-        switch.add_link(tgen.gears["rt3"], nodeif="eth-rt5")
-        switch.add_link(tgen.gears["rt5"], nodeif="eth-rt3")
-        switch = tgen.add_switch("s5")
-        switch.add_link(tgen.gears["rt4"], nodeif="eth-rt6")
-        switch.add_link(tgen.gears["rt6"], nodeif="eth-rt4")
-        switch = tgen.add_switch("s6")
-        switch.add_link(tgen.gears["rt5"], nodeif="eth-rt7")
-        switch.add_link(tgen.gears["rt7"], nodeif="eth-rt5")
-        switch = tgen.add_switch("s7")
-        switch.add_link(tgen.gears["rt6"], nodeif="eth-rt8")
-        switch.add_link(tgen.gears["rt8"], nodeif="eth-rt6")
-        switch = tgen.add_switch("s8")
-        switch.add_link(tgen.gears["rt7"], nodeif="eth-rt8")
-        switch.add_link(tgen.gears["rt8"], nodeif="eth-rt7")
-
-        #
-        # Populate multi-dimensional dictionary containing all expected outputs
-        #
-        files = [
-            "show_ip_route.ref",
-            "show_ipv6_route.ref",
-            "show_yang_interface_isis_adjacencies.ref",
-        ]
-        for rname in ["rt1"]:
-            outputs[rname] = {}
-            for step in range(1, 10 + 1):
-                outputs[rname][step] = {}
-                for file in files:
-                    if step == 1:
-                        # Get snapshots relative to the expected initial network convergence
-                        filename = "{}/{}/step{}/{}".format(CWD, rname, step, file)
-                        outputs[rname][step][file] = open(filename).read()
-                    else:
-                        if file == "show_yang_interface_isis_adjacencies.ref":
-                            continue
-
-                        # Get diff relative to the previous step
-                        filename = "{}/{}/step{}/{}.diff".format(CWD, rname, step, file)
-
-                        # Create temporary files in order to apply the diff
-                        f_in = tempfile.NamedTemporaryFile()
-                        f_in.write(outputs[rname][step - 1][file])
-                        f_in.flush()
-                        f_out = tempfile.NamedTemporaryFile()
-                        os.system(
-                            "patch -s -o %s %s %s" % (f_out.name, f_in.name, filename)
-                        )
-
-                        # Store the updated snapshot and remove the temporary files
-                        outputs[rname][step][file] = open(f_out.name).read()
-                        f_in.close()
-                        f_out.close()
+def build_topo(tgen):
+    "Build function"
+
+    #
+    # Define FRR Routers
+    #
+    for router in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6", "rt7", "rt8"]:
+        tgen.add_router(router)
+
+    #
+    # Define connections
+    #
+    switch = tgen.add_switch("s1")
+    switch.add_link(tgen.gears["rt1"], nodeif="eth-rt2")
+    switch.add_link(tgen.gears["rt2"], nodeif="eth-rt1")
+    switch = tgen.add_switch("s2")
+    switch.add_link(tgen.gears["rt1"], nodeif="eth-rt3")
+    switch.add_link(tgen.gears["rt3"], nodeif="eth-rt1")
+    switch = tgen.add_switch("s3")
+    switch.add_link(tgen.gears["rt2"], nodeif="eth-rt4")
+    switch.add_link(tgen.gears["rt4"], nodeif="eth-rt2")
+    switch = tgen.add_switch("s4")
+    switch.add_link(tgen.gears["rt3"], nodeif="eth-rt5")
+    switch.add_link(tgen.gears["rt5"], nodeif="eth-rt3")
+    switch = tgen.add_switch("s5")
+    switch.add_link(tgen.gears["rt4"], nodeif="eth-rt6")
+    switch.add_link(tgen.gears["rt6"], nodeif="eth-rt4")
+    switch = tgen.add_switch("s6")
+    switch.add_link(tgen.gears["rt5"], nodeif="eth-rt7")
+    switch.add_link(tgen.gears["rt7"], nodeif="eth-rt5")
+    switch = tgen.add_switch("s7")
+    switch.add_link(tgen.gears["rt6"], nodeif="eth-rt8")
+    switch.add_link(tgen.gears["rt8"], nodeif="eth-rt6")
+    switch = tgen.add_switch("s8")
+    switch.add_link(tgen.gears["rt7"], nodeif="eth-rt8")
+    switch.add_link(tgen.gears["rt8"], nodeif="eth-rt7")
+
+    #
+    # Populate multi-dimensional dictionary containing all expected outputs
+    #
+    files = [
+        "show_ip_route.ref",
+        "show_ipv6_route.ref",
+        "show_yang_interface_isis_adjacencies.ref",
+    ]
+    for rname in ["rt1"]:
+        outputs[rname] = {}
+        for step in range(1, 10 + 1):
+            outputs[rname][step] = {}
+            for file in files:
+                if step == 1:
+                    # Get snapshots relative to the expected initial network convergence
+                    filename = "{}/{}/step{}/{}".format(CWD, rname, step, file)
+                    outputs[rname][step][file] = open(filename).read()
+                else:
+                    if file == "show_yang_interface_isis_adjacencies.ref":
+                        continue
+
+                    # Get diff relative to the previous step
+                    filename = "{}/{}/step{}/{}.diff".format(CWD, rname, step, file)
+
+                    # Create temporary files in order to apply the diff
+                    f_in = tempfile.NamedTemporaryFile(mode="w")
+                    f_in.write(outputs[rname][step - 1][file])
+                    f_in.flush()
+                    f_out = tempfile.NamedTemporaryFile(mode="r")
+                    os.system(
+                        "patch -s -o %s %s %s" % (f_out.name, f_in.name, filename)
+                    )
+
+                    # Store the updated snapshot and remove the temporary files
+                    outputs[rname][step][file] = open(f_out.name).read()
+                    f_in.close()
+                    f_out.close()
 
 
 def setup_module(mod):
index b37911da36717999455bddd343fc97f5917438c0..3fd5e982e8fbbdaa4adce98ed82577445e0e1d03 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index 0f779b8b915802fb78e46b064dd16c57db616eff..fc648057a5e10fe578074f446b5c8142aa1a9c21 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index 3f3501a6fd84e8fabc3c3ca835884c9a7bfdb89f..20af65e431bd6a9d4ce52c137fb7312a26549c8d 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index e5e336d88859df28ee61dc50202d05ffb7abb0e1..76e4b79069610a3e45a7754825c4828d3d2652b2 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index 5bebbdebd48b5e5d1a2c6850699cb962de2ec2ef..af59194bc9e2e566b828063be2b43460acc5e5c5 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index 2cd07299b0fb5fd6ea4790984932af907abe1679..c6fc69800524aa79732cc9b040d4746e270dfc9b 100755 (executable)
@@ -80,7 +80,7 @@ from lib.topolog import logger
 from lib.snmptest import SnmpTester
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.isisd, pytest.mark.ldpd, pytest.mark.snmp]
 
@@ -219,7 +219,7 @@ def test_r1_scalar_snmp():
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
 
-    r1 = tgen.net.get("r1")
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
 
     assert r1_snmp.test_oid("isisSysVersion", "one(1)")
@@ -231,7 +231,7 @@ def test_r1_scalar_snmp():
     assert r1_snmp.test_oid("isisSysMaxAge", "1200 seconds")
     assert r1_snmp.test_oid("isisSysProtSupported", "07 5 6 7")
 
-    r2 = tgen.net.get("r2")
+    r2 = tgen.gears["r2"]
     r2_snmp = SnmpTester(r2, "2.2.2.2", "public", "2c")
 
     assert r2_snmp.test_oid("isisSysVersion", "one(1)")
@@ -260,9 +260,7 @@ circtable_test = {
 def test_r1_isisCircTable():
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
-    r1r = tgen.gears["r1"]
-
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
 
     oids = []
@@ -296,9 +294,7 @@ circleveltable_test = {
 def test_r1_isislevelCircTable():
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
-    r1r = tgen.gears["r1"]
-
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
 
     oids = []
@@ -335,8 +331,7 @@ adjtable_down_test = {
 def test_r1_isisAdjTable():
     "check ISIS Adjacency Table"
     tgen = get_topogen()
-    r1 = tgen.net.get("r1")
-    r1_cmd = tgen.gears["r1"]
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
 
     oids = []
@@ -355,7 +350,7 @@ def test_r1_isisAdjTable():
 
     # shutdown interface and one adjacency should be removed
     "check ISIS adjacency is removed when interface is shutdown"
-    r1_cmd.vtysh_cmd("conf t\ninterface r1-eth1\nshutdown")
+    r1.vtysh_cmd("conf t\ninterface r1-eth1\nshutdown")
     r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
 
     for item in adjtable_down_test.keys():
@@ -367,7 +362,7 @@ def test_r1_isisAdjTable():
         ), assertmsg
 
     # no shutdown interface and adjacency should be restored
-    r1_cmd.vtysh_cmd("conf t\ninterface r1-eth1\nno shutdown")
+    r1.vtysh_cmd("conf t\ninterface r1-eth1\nno shutdown")
 
 
 # Memory leak test template
index 6bbb5702679bc523e4085c7c61dc13bd5fa081c8..06d15afe6c6b1cb86dd0b94fe10e1b02de82406f 100755 (executable)
@@ -94,7 +94,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd, pytest.mark.isisd, pytest.mark.pathd]
 
index c22bd65d2d6c07c0f59c730162a2a88cc6f28633..8aa187871c909bae1cd7a2c4e4acf58f8fb0c30a 100644 (file)
@@ -82,7 +82,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.isisd]
 
index 00cb6239996785359380b0b564e8ccf2a26140c4..351bce99e53424100fdb98caa084bcd0bae97514 100755 (executable)
@@ -83,7 +83,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.isisd]
 
@@ -91,93 +91,89 @@ pytestmark = [pytest.mark.isisd]
 outputs = {}
 
 
-class TemplateTopo(Topo):
-    "Test topology builder"
-
-    def build(self, *_args, **_opts):
-        "Build function"
-        tgen = get_topogen(self)
-
-        #
-        # Define FRR Routers
-        #
-        for router in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
-            tgen.add_router(router)
-
-        #
-        # Define connections
-        #
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["rt1"], nodeif="eth-sw1")
-        switch.add_link(tgen.gears["rt2"], nodeif="eth-sw1")
-        switch.add_link(tgen.gears["rt3"], nodeif="eth-sw1")
-
-        switch = tgen.add_switch("s2")
-        switch.add_link(tgen.gears["rt2"], nodeif="eth-rt4-1")
-        switch.add_link(tgen.gears["rt4"], nodeif="eth-rt2-1")
-
-        switch = tgen.add_switch("s3")
-        switch.add_link(tgen.gears["rt2"], nodeif="eth-rt4-2")
-        switch.add_link(tgen.gears["rt4"], nodeif="eth-rt2-2")
-
-        switch = tgen.add_switch("s4")
-        switch.add_link(tgen.gears["rt3"], nodeif="eth-rt5-1")
-        switch.add_link(tgen.gears["rt5"], nodeif="eth-rt3-1")
-
-        switch = tgen.add_switch("s5")
-        switch.add_link(tgen.gears["rt3"], nodeif="eth-rt5-2")
-        switch.add_link(tgen.gears["rt5"], nodeif="eth-rt3-2")
-
-        switch = tgen.add_switch("s6")
-        switch.add_link(tgen.gears["rt4"], nodeif="eth-rt5")
-        switch.add_link(tgen.gears["rt5"], nodeif="eth-rt4")
-
-        switch = tgen.add_switch("s7")
-        switch.add_link(tgen.gears["rt4"], nodeif="eth-rt6")
-        switch.add_link(tgen.gears["rt6"], nodeif="eth-rt4")
-
-        switch = tgen.add_switch("s8")
-        switch.add_link(tgen.gears["rt5"], nodeif="eth-rt6")
-        switch.add_link(tgen.gears["rt6"], nodeif="eth-rt5")
-
-        #
-        # Populate multi-dimensional dictionary containing all expected outputs
-        #
-        files = [
-            "show_ip_route.ref",
-            "show_ipv6_route.ref",
-            "show_mpls_table.ref",
-            "show_yang_interface_isis_adjacencies.ref",
-        ]
-        for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
-            outputs[rname] = {}
-            for step in range(1, 9 + 1):
-                outputs[rname][step] = {}
-                for file in files:
-                    if step == 1:
-                        # Get snapshots relative to the expected initial network convergence
-                        filename = "{}/{}/step{}/{}".format(CWD, rname, step, file)
-                        outputs[rname][step][file] = open(filename).read()
-                    else:
-                        if file == "show_yang_interface_isis_adjacencies.ref":
-                            continue
-
-                        # Get diff relative to the previous step
-                        filename = "{}/{}/step{}/{}.diff".format(CWD, rname, step, file)
-
-                        # Create temporary files in order to apply the diff
-                        f_in = tempfile.NamedTemporaryFile()
-                        f_in.write(outputs[rname][step - 1][file])
-                        f_in.flush()
-                        f_out = tempfile.NamedTemporaryFile()
-                        os.system(
-                            "patch -s -o %s %s %s" % (f_out.name, f_in.name, filename)
-                        )
-
-                        # Store the updated snapshot and remove the temporary files
-                        outputs[rname][step][file] = open(f_out.name).read()
-                        f_in.close()
-                        f_out.close()
+def build_topo(tgen):
+    "Build function"
+
+    #
+    # Define FRR Routers
+    #
+    for router in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
+        tgen.add_router(router)
+
+    #
+    # Define connections
+    #
+    switch = tgen.add_switch("s1")
+    switch.add_link(tgen.gears["rt1"], nodeif="eth-sw1")
+    switch.add_link(tgen.gears["rt2"], nodeif="eth-sw1")
+    switch.add_link(tgen.gears["rt3"], nodeif="eth-sw1")
+
+    switch = tgen.add_switch("s2")
+    switch.add_link(tgen.gears["rt2"], nodeif="eth-rt4-1")
+    switch.add_link(tgen.gears["rt4"], nodeif="eth-rt2-1")
+
+    switch = tgen.add_switch("s3")
+    switch.add_link(tgen.gears["rt2"], nodeif="eth-rt4-2")
+    switch.add_link(tgen.gears["rt4"], nodeif="eth-rt2-2")
+
+    switch = tgen.add_switch("s4")
+    switch.add_link(tgen.gears["rt3"], nodeif="eth-rt5-1")
+    switch.add_link(tgen.gears["rt5"], nodeif="eth-rt3-1")
+
+    switch = tgen.add_switch("s5")
+    switch.add_link(tgen.gears["rt3"], nodeif="eth-rt5-2")
+    switch.add_link(tgen.gears["rt5"], nodeif="eth-rt3-2")
+
+    switch = tgen.add_switch("s6")
+    switch.add_link(tgen.gears["rt4"], nodeif="eth-rt5")
+    switch.add_link(tgen.gears["rt5"], nodeif="eth-rt4")
+
+    switch = tgen.add_switch("s7")
+    switch.add_link(tgen.gears["rt4"], nodeif="eth-rt6")
+    switch.add_link(tgen.gears["rt6"], nodeif="eth-rt4")
+
+    switch = tgen.add_switch("s8")
+    switch.add_link(tgen.gears["rt5"], nodeif="eth-rt6")
+    switch.add_link(tgen.gears["rt6"], nodeif="eth-rt5")
+
+    #
+    # Populate multi-dimensional dictionary containing all expected outputs
+    #
+    files = [
+        "show_ip_route.ref",
+        "show_ipv6_route.ref",
+        "show_mpls_table.ref",
+        "show_yang_interface_isis_adjacencies.ref",
+    ]
+    for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
+        outputs[rname] = {}
+        for step in range(1, 9 + 1):
+            outputs[rname][step] = {}
+            for file in files:
+                if step == 1:
+                    # Get snapshots relative to the expected initial network convergence
+                    filename = "{}/{}/step{}/{}".format(CWD, rname, step, file)
+                    outputs[rname][step][file] = open(filename).read()
+                else:
+                    if file == "show_yang_interface_isis_adjacencies.ref":
+                        continue
+
+                    # Get diff relative to the previous step
+                    filename = "{}/{}/step{}/{}.diff".format(CWD, rname, step, file)
+
+                    # Create temporary files in order to apply the diff
+                    f_in = tempfile.NamedTemporaryFile(mode="w")
+                    f_in.write(outputs[rname][step - 1][file])
+                    f_in.flush()
+                    f_out = tempfile.NamedTemporaryFile(mode="r")
+                    os.system(
+                        "patch -s -o %s %s %s" % (f_out.name, f_in.name, filename)
+                    )
+
+                    # Store the updated snapshot and remove the temporary files
+                    outputs[rname][step][file] = open(f_out.name).read()
+                    f_in.close()
+                    f_out.close()
 
 
 def setup_module(mod):
index 083a8b1e8d659490edfa7287db464218bf259dcb..3927222553d93ebd9da5a83c7e99547ff328a6ac 100644 (file)
@@ -43,7 +43,7 @@ from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.isisd]
 
index ff1544e4a2ec7455bc4952db1618cb2135141d77..67c60c729fb8db8d61dc0884d9f54061fbcb3d0a 100644 (file)
@@ -43,7 +43,7 @@ from lib.topolog import logger
 from lib.topotest import iproute2_is_vrf_capable
 from lib.common_config import required_linux_kernel_version
 
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.isisd]
 
index 9aa402459887d4c357352133b1bdb259dda780be..f26c56e54a3bcabdc4113bb23b47e0658862319e 100644 (file)
@@ -76,7 +76,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.ldpd, pytest.mark.ospfd]
 
index aef22c395d551e886463f666a36d989eb42cf881..5208728a98925dc684fa5bf559ac572ec117bcd6 100644 (file)
@@ -76,7 +76,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.ldpd, pytest.mark.ospfd]
 
index b37911da36717999455bddd343fc97f5917438c0..3fd5e982e8fbbdaa4adce98ed82577445e0e1d03 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index 0f779b8b915802fb78e46b064dd16c57db616eff..fc648057a5e10fe578074f446b5c8142aa1a9c21 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
\ No newline at end of file
index 8052316d7356d623ae4ea784b1096bbdc3720cef..f0473257c98a71e88eaac7b35856574df2a3101f 100644 (file)
@@ -79,7 +79,7 @@ from lib.topolog import logger
 from lib.snmptest import SnmpTester
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.ldpd, pytest.mark.isisd, pytest.mark.snmp]
 
@@ -241,7 +241,7 @@ def test_r1_ldp_lsr_objects():
     "Test mplsLdpLsrObjects objects"
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
 
     assert r1_snmp.test_oid("mplsLdpLsrId", "01 01 01 01")
@@ -252,7 +252,7 @@ def test_r1_ldp_entity_table():
     "Test mplsLdpEntityTable"
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
 
     assert r1_snmp.test_oid_walk("mplsLdpEntityLdpId", ["1.1.1.1:0"])
@@ -286,7 +286,7 @@ def test_r1_ldp_entity_stats_table():
     "Test mplsLdpEntityStatsTable"
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
 
     assert r1_snmp.test_oid_walk("mplsLdpEntityStatsSessionAttempts", ["0"])
@@ -312,7 +312,7 @@ def test_r1_ldp_peer_table():
     "Test mplsLdpPeerTable"
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
 
     assert r1_snmp.test_oid_walk("mplsLdpPeerLdpId", ["2.2.2.2:0", "3.3.3.3:0"])
@@ -331,7 +331,7 @@ def test_r1_ldp_session_table():
     "Test mplsLdpSessionTable"
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
 
     assert r1_snmp.test_oid_walk(
@@ -354,7 +354,7 @@ def test_r1_ldp_session_stats_table():
     "Test mplsLdpSessionStatsTable"
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
 
     assert r1_snmp.test_oid_walk("mplsLdpSessionStatsUnknownMesTypeErrors", ["0", "0"])
@@ -365,7 +365,7 @@ def test_r1_ldp_hello_adjacency_table():
     "Test mplsLdpHelloAdjacencyTable"
     tgen = get_topogen()
 
-    r1 = tgen.net.get("r1")
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
 
     assert r1_snmp.test_oid_walk("mplsLdpHelloAdjacencyIndex", ["1", "2", "1"])
index 44b34c485f75385faa08b9c80ddd4af0802ec889..3c26bd5ba2d8a64a9fe2b01563addbc999a992a1 100644 (file)
@@ -78,7 +78,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.isisd, pytest.mark.ldpd]
 
@@ -466,20 +466,20 @@ def parse_show_isis_ldp_sync(lines, rname):
             interface = {}
             interface_name = None
 
-            line = it.next()
+            line = next(it)
 
             if line.startswith(rname + "-eth"):
                 interface_name = line
 
-            line = it.next()
+            line = next(it)
 
             if line.startswith(" LDP-IGP Synchronization enabled: "):
                 interface["ldpIgpSyncEnabled"] = line.endswith("yes")
-                line = it.next()
+                line = next(it)
 
                 if line.startswith(" holddown timer in seconds: "):
                     interface["holdDownTimeInSec"] = int(line.split(": ")[-1])
-                    line = it.next()
+                    line = next(it)
 
                 if line.startswith(" State: "):
                     interface["ldpIgpSyncState"] = line.split(": ")[-1]
@@ -539,7 +539,7 @@ def parse_show_isis_interface_detail(lines, rname):
 
     while True:
         try:
-            line = it.next()
+            line = next(it)
 
             area_match = re.match(r"Area (.+):", line)
             if not area_match:
@@ -548,7 +548,7 @@ def parse_show_isis_interface_detail(lines, rname):
             area_id = area_match.group(1)
             area = {}
 
-            line = it.next()
+            line = next(it)
 
             while line.startswith(" Interface: "):
                 interface_name = re.split(":|,", line)[1].lstrip()
@@ -557,7 +557,7 @@ def parse_show_isis_interface_detail(lines, rname):
 
                 # Look for keyword: Level-1 or Level-2
                 while not line.startswith(" Level-"):
-                    line = it.next()
+                    line = next(it)
 
                 while line.startswith(" Level-"):
 
@@ -566,7 +566,7 @@ def parse_show_isis_interface_detail(lines, rname):
                     level_name = line.split()[0]
                     level["level"] = level_name
 
-                    line = it.next()
+                    line = next(it)
 
                     if line.startswith(" Metric:"):
                         level["metric"] = re.split(":|,", line)[1].lstrip()
@@ -577,7 +577,7 @@ def parse_show_isis_interface_detail(lines, rname):
                     while not line.startswith(" Level-") and not line.startswith(
                         " Interface: "
                     ):
-                        line = it.next()
+                        line = next(it)
 
                     if line.startswith(" Level-"):
                         continue
index 57b45e5fdfad5668145d9e9986d3d78e75453f78..c5bd97edf3a79e5f1ecad7b8ee1e375ad8db53f1 100644 (file)
@@ -77,7 +77,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.ldpd, pytest.mark.ospfd]
 
index 06e773409415fecf86b4c62dec08043b20721af1..c0f869f8262601aab44c07b88adc6bf8ebaa2d70 100644 (file)
@@ -65,15 +65,10 @@ import sys
 import pytest
 from time import sleep
 
-from mininet.topo import Topo
-from mininet.net import Mininet
-from mininet.node import Node, OVSSwitch, Host
-from mininet.log import setLogLevel, info
-from mininet.cli import CLI
-from mininet.link import Intf
-
 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 from lib import topotest
+from lib.micronet_compat import Topo
+from lib.micronet_compat import Mininet
 
 fatal_error = ""
 
@@ -99,7 +94,7 @@ class NetworkTopo(Topo):
         # Setup Switches, add Interfaces and Connections
         switch = {}
         # First switch
-        switch[0] = self.addSwitch("sw0", cls=topotest.LegacySwitch)
+        switch[0] = self.addSwitch("sw0")
         self.addLink(
             switch[0],
             router[1],
@@ -115,7 +110,7 @@ class NetworkTopo(Topo):
             addr2="00:11:00:02:00:00",
         )
         # Second switch
-        switch[1] = self.addSwitch("sw1", cls=topotest.LegacySwitch)
+        switch[1] = self.addSwitch("sw1")
         self.addLink(
             switch[1],
             router[2],
@@ -138,7 +133,7 @@ class NetworkTopo(Topo):
             addr2="00:11:00:04:00:00",
         )
         # Third switch
-        switch[2] = self.addSwitch("sw2", cls=topotest.LegacySwitch)
+        switch[2] = self.addSwitch("sw2")
         self.addLink(
             switch[2],
             router[2],
@@ -885,7 +880,6 @@ def test_shutdown_check_memleak():
 
 if __name__ == "__main__":
 
-    setLogLevel("info")
     # To suppress tracebacks, either use the following pytest call or add "--tb=no" to cli
     # retval = pytest.main(["-s", "--tb=no"])
     retval = pytest.main(["-s"])
index 0ea7aca3eb74eeeab1a5d7aebb4409bdef2b2f15..8dc8039c99a2dee4851ad98dbe587c21400f2064 100644 (file)
@@ -78,7 +78,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.ldpd, pytest.mark.ospfd]
 
index 56eca4be04319a2126f2d9ff7b7e346a775a5b22..1ea033a12c84b7f2942b04401d6bd3ace088a836 100644 (file)
@@ -39,7 +39,7 @@ from lib.topolog import logger
 from lib.lutil import *
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 customize = None
 
index f8f580632e7175f78a0605086a9dc5861ebeef41..7248ce267f92340adaa85648798a2c8a763bb6cb 100644 (file)
@@ -26,7 +26,7 @@ import math
 import time
 from lib.topolog import logger
 from lib.topotest import json_cmp
-from mininet.net import Mininet
+from lib.micronet_compat import Mininet
 
 
 # L utility functions
index 222fb28ade355463508ce8a0f43fddf59dc50490..a10477d283be8e5f4e322c52f40d5e11a03f7ddd 100644 (file)
@@ -40,11 +40,11 @@ sys.path.append(os.path.join(CWD, "../"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib import topotest
+# Required to instantiate the topology builder class.
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
 
 pytestmark = [pytest.mark.bgpd, pytest.mark.ospfd, pytest.mark.pimd]
 
@@ -52,21 +52,28 @@ pytestmark = [pytest.mark.bgpd, pytest.mark.ospfd, pytest.mark.pimd]
 # Test global variables:
 # They are used to handle communicating with external application.
 #
-APP_SOCK_PATH = '/tmp/topotests/apps.sock'
 HELPER_APP_PATH = os.path.join(CWD, "../lib/mcast-tester.py")
 app_listener = None
 app_clients = {}
+app_procs = []
+
+
+def get_app_sock_path():
+    tgen = get_topogen()
+    return os.path.join(tgen.logdir, "apps.sock")
+
 
 def listen_to_applications():
     "Start listening socket to connect with applications."
     # Remove old socket.
+    app_sock_path = get_app_sock_path()
     try:
-        os.unlink(APP_SOCK_PATH)
+        os.unlink(app_sock_path)
     except OSError:
         pass
 
     sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0)
-    sock.bind(APP_SOCK_PATH)
+    sock.bind(app_sock_path)
     sock.listen(10)
     global app_listener
     app_listener = sock
@@ -87,9 +94,11 @@ def close_applications():
     # Close listening socket.
     app_listener.close()
 
+    app_sock_path = get_app_sock_path()
+
     # Remove old socket.
     try:
-        os.unlink(APP_SOCK_PATH)
+        os.unlink(app_sock_path)
     except OSError:
         pass
 
@@ -99,6 +108,10 @@ def close_applications():
             continue
         app_clients["h1"]["fd"].close()
 
+    for p in app_procs:
+        p.terminate()
+        p.wait()
+
 
 class MSDPMeshTopo1(Topo):
     "Test topology builder"
@@ -120,12 +133,12 @@ class MSDPMeshTopo1(Topo):
         switch.add_link(tgen.gears["r3"])
 
         # Create stub networks for multicast traffic.
-        tgen.add_host("h1", "192.168.10.2/24", "192.168.10.1")
+        tgen.add_host("h1", "192.168.10.2/24", "via 192.168.10.1")
         switch = tgen.add_switch("s3")
         switch.add_link(tgen.gears["r1"])
         switch.add_link(tgen.gears["h1"])
 
-        tgen.add_host("h2", "192.168.30.2/24", "192.168.30.1")
+        tgen.add_host("h2", "192.168.30.2/24", "via 192.168.30.1")
         switch = tgen.add_switch("s4")
         switch.add_link(tgen.gears["r3"])
         switch.add_link(tgen.gears["h2"])
@@ -206,14 +219,6 @@ def test_wait_msdp_convergence():
 
     logger.info("test MSDP convergence")
 
-    tgen.gears["h1"].run("{} --send='0.7' '{}' '{}' '{}' &".format(
-        HELPER_APP_PATH, APP_SOCK_PATH, '229.0.1.10', 'h1-eth0'))
-    accept_host("h1")
-
-    tgen.gears["h2"].run("{} '{}' '{}' '{}' &".format(
-        HELPER_APP_PATH, APP_SOCK_PATH, '229.0.1.10', 'h2-eth0'))
-    accept_host("h2")
-
     def expect_msdp_peer(router, peer, sa_count=0):
         "Expect MSDP peer connection to be established with SA amount."
         logger.info("waiting MSDP connection from peer {} on router {}".format(peer, router))
@@ -227,6 +232,22 @@ def test_wait_msdp_convergence():
         assertmsg = '"{}" MSDP connection failure'.format(router)
         assert result is None, assertmsg
 
+    app_sock_path = get_app_sock_path()
+
+
+    python3_path = tgen.net.get_exec_path(["python3", "python"])
+    ph_base = [python3_path, HELPER_APP_PATH, app_sock_path]
+
+    ph1_cmd = ph_base + ["--send=0.7", "229.0.1.10", "h1-eth0"]
+    ph1 = tgen.gears["h1"].popen(ph1_cmd)
+    app_procs.append(ph1)
+    accept_host("h1")
+
+    ph2_cmd = ph_base + ["229.0.1.10", "h2-eth0"]
+    ph2 = tgen.gears["h2"].popen(ph2_cmd)
+    app_procs.append(ph2)
+    accept_host("h2")
+
     # R1 peers.
     expect_msdp_peer("r1", "10.254.254.2")
     expect_msdp_peer("r1", "10.254.254.3")
index b860c04faa286623f5ca422aa0bd2c51875ebded..796706a2e083f24f1dc10854ea3ed501fbd58e75 100755 (executable)
@@ -41,11 +41,11 @@ sys.path.append(os.path.join(CWD, "../"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib import topotest
+# Required to instantiate the topology builder class.
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
 
 pytestmark = [pytest.mark.bgpd, pytest.mark.pimd]
 
@@ -53,22 +53,30 @@ pytestmark = [pytest.mark.bgpd, pytest.mark.pimd]
 # Test global variables:
 # They are used to handle communicating with external application.
 #
-APP_SOCK_PATH = '/tmp/topotests/apps.sock'
 HELPER_APP_PATH = os.path.join(CWD, "../lib/mcast-tester.py")
 app_listener = None
 app_clients = {}
 
 
+def get_app_sock_path():
+    tgen = get_topogen()
+    return os.path.join(tgen.logdir, "apps.sock")
+
+
 def listen_to_applications():
     "Start listening socket to connect with applications."
+
+    app_sock_path = get_app_sock_path()
     # Remove old socket.
     try:
-        os.unlink(APP_SOCK_PATH)
+        os.unlink(app_sock_path)
     except OSError:
         pass
 
     sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0)
-    sock.bind(APP_SOCK_PATH)
+    # Do not block forever
+    sock.settimeout(10)
+    sock.bind(app_sock_path)
     sock.listen(10)
     global app_listener
     app_listener = sock
@@ -91,9 +99,10 @@ def close_applications():
     # Close listening socket.
     app_listener.close()
 
+    app_sock_path = get_app_sock_path()
     # Remove old socket.
     try:
-        os.unlink(APP_SOCK_PATH)
+        os.unlink(app_sock_path)
     except OSError:
         pass
 
@@ -135,12 +144,12 @@ class MSDPTopo1(Topo):
         switch.add_link(tgen.gears["r4"])
 
         # Create a host connected and direct at r4:
-        tgen.add_host("h1", "192.168.4.100/24", "192.168.4.1")
+        tgen.add_host("h1", "192.168.4.100/24", "via 192.168.4.1")
         switch.add_link(tgen.gears["h1"])
 
         # Create a host connected and direct at r1:
         switch = tgen.add_switch("s6")
-        tgen.add_host("h2", "192.168.10.100/24", "192.168.10.1")
+        tgen.add_host("h2", "192.168.10.100/24", "via 192.168.10.1")
         switch.add_link(tgen.gears["r1"])
         switch.add_link(tgen.gears["h2"])
 
@@ -219,21 +228,12 @@ def test_bgp_convergence():
     expect_loopback_route("r4", "ip", "10.254.254.2/32", "bgp")
     expect_loopback_route("r4", "ip", "10.254.254.3/32", "bgp")
 
-
-def test_mroute_install():
+def _test_mroute_install():
     "Test that multicast routes propagated and installed"
     tgen = get_topogen()
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
 
-    tgen.gears["h1"].run("{} '{}' '{}' '{}' &".format(
-        HELPER_APP_PATH, APP_SOCK_PATH, '229.1.2.3', 'h1-eth0'))
-    accept_host("h1")
-
-    tgen.gears["h2"].run("{} --send='0.7' '{}' '{}' '{}' &".format(
-        HELPER_APP_PATH, APP_SOCK_PATH, '229.1.2.3', 'h2-eth0'))
-    accept_host("h2")
-
     #
     # Test R1 mroute
     #
@@ -366,6 +366,40 @@ def test_mroute_install():
     _, val = topotest.run_and_expect(test_func, None, count=55, wait=2)
     assert val is None, 'multicast route convergence failure'
 
+def test_mroute_install():
+    tgen = get_topogen()
+    # pytest.skip("FOO")
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    ph1 = ph2 = None
+
+    app_sock_path = get_app_sock_path()
+    try:
+        logger.info("Starting helper1")
+        ph1 = tgen.gears["h1"].popen(
+            "{} '{}' '{}' '{}'".format(
+                HELPER_APP_PATH, app_sock_path, "229.1.2.3", "h1-eth0"
+            )
+        )
+        logger.info("Accepting helper1")
+        accept_host("h1")
+
+        logger.info("Starting helper2")
+        ph2 = tgen.gears["h2"].popen(
+            "{} --send='0.7' '{}' '{}' '{}'".format(
+                HELPER_APP_PATH, app_sock_path, "229.1.2.3", "h2-eth0"
+            )
+        )
+        accept_host("h2")
+
+        _test_mroute_install()
+    finally:
+        if ph1:
+            ph1.terminate()
+            ph1.wait()
+            ph2.terminate()
+            ph2.wait()
 
 def test_msdp():
     """
index 827dde69ecb376a932d3c8feb16e97c7dacafc01..60a883b285c8f1aec01ae57e723882b573639fff 100644 (file)
@@ -66,7 +66,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import (
     start_topology,
@@ -213,6 +213,9 @@ def teardown_module():
 
     tgen = get_topogen()
 
+    # Kill any iperfs we left running.
+    kill_iperf(tgen)
+
     # Stop toplogy and Remove tmp files
     tgen.stop_topology()
 
@@ -401,15 +404,15 @@ def test_BSR_higher_prefer_ip_p0(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     reset_config_on_routers(tgen)
     step("pre-configure BSM packet")
     step("Configure cisco-1 as BSR1 1.1.2.7")
@@ -607,15 +610,15 @@ def test_BSR_CRP_with_blackhole_address_p1(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     reset_config_on_routers(tgen)
     step("pre-configure BSM packet")
     step("Configure cisco-1 as BSR1 1.1.2.7")
@@ -782,15 +785,15 @@ def test_new_router_fwd_p0(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     reset_config_on_routers(tgen)
 
     result = pre_config_to_bsm(
@@ -919,15 +922,15 @@ def test_int_bsm_config_p1(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     reset_config_on_routers(tgen)
 
     result = pre_config_to_bsm(
@@ -1080,15 +1083,15 @@ def test_static_rp_override_p1(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     reset_config_on_routers(tgen)
 
     result = pre_config_to_bsm(
@@ -1231,15 +1234,15 @@ def test_bsmp_stress_add_del_restart_p2(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     reset_config_on_routers(tgen)
 
     result = pre_config_to_bsm(
@@ -1400,15 +1403,15 @@ def test_BSM_timeout_p0(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     result = pre_config_to_bsm(
         tgen, topo, tc_name, "b1", "s1", "r1", "f1", "i1", "l1", "packet1"
     )
@@ -1557,15 +1560,15 @@ def test_iif_join_state_p0(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     reset_config_on_routers(tgen)
 
     result = pre_config_to_bsm(
index 894326f19f5b3462eac62db7d6bbdf88f7d7f99a..115d0bff0d348b6681a3c3ccc922b4f44b11c617 100644 (file)
@@ -57,7 +57,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import (
     start_topology,
@@ -204,6 +204,9 @@ def teardown_module():
 
     tgen = get_topogen()
 
+    # Kill any iperfs we left running.
+    kill_iperf(tgen)
+
     # Stop toplogy and Remove tmp files
     tgen.stop_topology()
 
@@ -354,15 +357,15 @@ def test_starg_mroute_p0(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     reset_config_on_routers(tgen)
 
     result = pre_config_to_bsm(
@@ -506,15 +509,15 @@ def test_overlapping_group_p0(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     reset_config_on_routers(tgen)
 
     result = pre_config_to_bsm(
@@ -612,15 +615,15 @@ def test_RP_priority_p0(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     reset_config_on_routers(tgen)
 
     result = pre_config_to_bsm(
@@ -861,15 +864,15 @@ def test_RP_hash_p0(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     reset_config_on_routers(tgen)
 
     result = pre_config_to_bsm(
@@ -954,6 +957,10 @@ def test_BSM_fragmentation_p1(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
@@ -961,10 +968,6 @@ def test_BSM_fragmentation_p1(request):
 
     reset_config_on_routers(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     result = pre_config_to_bsm(
         tgen, topo, tc_name, "b1", "s1", "r1", "f1", "i1", "l1", "packet1"
     )
@@ -1072,14 +1075,15 @@ def test_RP_with_all_ip_octet_p1(request):
     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)
+
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
     step("pre-configure BSM packet")
     result = pre_config_to_bsm(
         tgen, topo, tc_name, "b1", "s1", "r1", "f1", "i1", "l1", "packet1"
index 36a3103c9da6107ccb1f0154a3dcda1dee110a0f..487ec924e9d656ec230697d9b74962d14f70aff0 100755 (executable)
@@ -69,7 +69,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import (
     start_topology,
@@ -133,8 +133,8 @@ TOPOLOGY = """
     Description:
     i1, i2, i3. i4, i5, i6, i7, i8 - FRR running iperf to send IGMP
                                      join and traffic
-    l1 - LHR
-    f1 - FHR
+    l1 - LHR (last hop router)
+    f1 - FHR (first hop router)
     r2 - FRR router
     c1 - FRR router
     c2 - FRR router
@@ -219,7 +219,7 @@ def setup_module(mod):
         pytest.skip(tgen.errors)
 
     # Creating configuration from JSON
-    build_config_from_json(tgen, topo)
+    build_config_from_json(tgen, tgen.json_topo)
 
     logger.info("Running setup_module() done")
 
@@ -231,6 +231,9 @@ def teardown_module():
 
     tgen = get_topogen()
 
+    # Kill any iperfs we left running.
+    kill_iperf(tgen)
+
     # Stop toplogy and Remove tmp files
     tgen.stop_topology()
 
@@ -276,13 +279,8 @@ def config_to_send_igmp_join_and_traffic(
         result = addKernelRoute(tgen, iperf, iperf_intf, GROUP_RANGE)
         assert result is True, "Testcase {}: Failed Error: {}".format(tc_name, result)
 
-        router_list = tgen.routers()
-        for router in router_list.keys():
-            if router == iperf:
-                continue
-
-            rnode = router_list[router]
-            rnode.run("echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter")
+        rnode = tgen.gears[iperf]
+        rnode.run("echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter")
 
     return True
 
@@ -333,6 +331,7 @@ def test_multicast_data_traffic_static_RP_send_join_then_traffic_p0(request):
     """
 
     tgen = get_topogen()
+    topo = tgen.json_topo
     tc_name = request.node.name
     write_test_header(tc_name)
 
@@ -342,10 +341,6 @@ def test_multicast_data_traffic_static_RP_send_join_then_traffic_p0(request):
 
     step("Enable IGMP on FRR1 interface and send IGMP join (225.1.1.1)")
     intf_i1_l1 = topo["routers"]["i1"]["links"]["l1"]["interface"]
-    result = config_to_send_igmp_join_and_traffic(
-        tgen, topo, tc_name, "i1", intf_i1_l1, GROUP_RANGE, join=True
-    )
-    assert result is True, "Testcase {}: Failed Error: {}".format(tc_name, result)
 
     step("joinRx value before join sent")
     intf_r2_l1 = topo["routers"]["r2"]["links"]["l1"]["interface"]
@@ -356,7 +351,7 @@ def test_multicast_data_traffic_static_RP_send_join_then_traffic_p0(request):
     ), "Testcase {} : Failed \n state_before is not dictionary \n "
     "Error: {}".format(tc_name, result)
 
-    result = iperfSendIGMPJoin(tgen, "i1", IGMP_JOIN, join_interval=1)
+    result = iperfSendIGMPJoin(tgen, "i1", ["{}%{}".format(IGMP_JOIN, intf_i1_l1)], join_interval=1)
     assert result is True, "Testcase {}: Failed Error: {}".format(tc_name, result)
 
     step("Send the IGMP join first and then start the traffic")
@@ -382,13 +377,7 @@ def test_multicast_data_traffic_static_RP_send_join_then_traffic_p0(request):
     assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result)
 
     step("Send multicast traffic from FRR3 to 225.1.1.1 receiver")
-    intf_i2_f1 = topo["routers"]["i2"]["links"]["f1"]["interface"]
-    result = config_to_send_igmp_join_and_traffic(
-        tgen, topo, tc_name, "i2", intf_i2_f1, GROUP_RANGE, traffic=True
-    )
-    assert result is True, "Testcase {}: Failed Error: {}".format(tc_name, result)
-
-    result = iperfSendTraffic(tgen, "i2", IGMP_JOIN, 32, 2500)
+    result = iperfSendTraffic(tgen, "i2", IGMP_JOIN, 32, 2500, bindToIntf="f1")
     assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result)
 
     step(
@@ -456,19 +445,20 @@ def test_multicast_data_traffic_static_RP_send_traffic_then_join_p0(request):
     """
 
     tgen = get_topogen()
+    topo = tgen.json_topo
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure RP on R2 (loopback interface) for the" " group range 225.0.0.0/8")
 
     input_dict = {
@@ -580,19 +570,20 @@ def test_clear_pim_neighbors_and_mroute_p0(request):
     """
 
     tgen = get_topogen()
+    topo = tgen.json_topo
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure static RP on c1 for group (225.1.1.1-5)")
     input_dict = {
         "c1": {
@@ -673,19 +664,20 @@ def test_verify_mroute_when_same_receiver_in_FHR_LHR_and_RP_p0(request):
     """
 
     tgen = get_topogen()
+    topo = tgen.json_topo
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure RP on R2 (loopback interface) for the" " group range 225.0.0.0/8")
 
     input_dict = {
@@ -738,7 +730,7 @@ def test_verify_mroute_when_same_receiver_in_FHR_LHR_and_RP_p0(request):
     step("IGMP is received on FRR1 , FRR2 , FRR3, using " "'show ip igmp groups'")
     igmp_groups = {"l1": "l1-i1-eth1", "r2": "r2-i3-eth1", "f1": "f1-i8-eth2"}
     for dut, interface in igmp_groups.items():
-        result = verify_igmp_groups(tgen, dut, interface, IGMP_JOIN)
+        result = verify_igmp_groups(tgen, dut, interface, IGMP_JOIN, retry_timeout=80)
         assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result)
 
     step("(*,G) present on all the node with correct OIL" " using 'show ip mroute'")
@@ -768,19 +760,20 @@ def test_verify_mroute_when_same_receiver_joining_5_diff_sources_p0(request):
     """
 
     tgen = get_topogen()
+    topo = tgen.json_topo
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure static RP for (226.1.1.1-5) and (232.1.1.1-5)" " in c1")
 
     _GROUP_RANGE = GROUP_RANGE_2 + GROUP_RANGE_3
@@ -1088,19 +1081,20 @@ def test_verify_mroute_when_frr_is_transit_router_p2(request):
     """
 
     tgen = get_topogen()
+    topo = tgen.json_topo
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure static RP for (226.1.1.1-5) in c2")
     input_dict = {
         "c2": {
@@ -1197,19 +1191,20 @@ def test_verify_mroute_when_RP_unreachable_p1(request):
     """
 
     tgen = get_topogen()
+    topo = tgen.json_topo
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure RP on FRR2 (loopback interface) for " "the group range 225.0.0.0/8")
 
     input_dict = {
@@ -1317,19 +1312,20 @@ def test_modify_igmp_query_timer_p0(request):
     """
 
     tgen = get_topogen()
+    topo = tgen.json_topo
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Enable IGMP on FRR1 interface and send IGMP join (225.1.1.1)")
     result = config_to_send_igmp_join_and_traffic(
         tgen, topo, tc_name, "i1", "i1-l1-eth0", GROUP_RANGE, join=True
@@ -1455,19 +1451,20 @@ def test_modify_igmp_max_query_response_timer_p0(request):
     """
 
     tgen = get_topogen()
+    topo = tgen.json_topo
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Enable IGMP on FRR1 interface and send IGMP join (225.1.1.1)")
     result = config_to_send_igmp_join_and_traffic(
         tgen, topo, tc_name, "i1", "i1-l1-eth0", GROUP_RANGE, join=True
@@ -1477,7 +1474,7 @@ def test_modify_igmp_max_query_response_timer_p0(request):
     result = iperfSendIGMPJoin(tgen, "i1", IGMP_JOIN, join_interval=1)
     assert result is True, "Testcase {}: Failed Error: {}".format(tc_name, result)
 
-    step("Configure IGMP query response time to 10 sec on FRR1")
+    step("Configure IGMP query response time to 10 deci-sec on FRR1")
     input_dict_1 = {
         "l1": {
             "igmp": {
index f30902c1b20a0823040ec92d5a430ef5a0e0dd1f..0b68942208995483180aa6442e3a188c4e0cb45b 100755 (executable)
@@ -65,7 +65,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import (
     start_topology,
@@ -225,6 +225,9 @@ def teardown_module():
 
     tgen = get_topogen()
 
+    # Kill any iperfs we left running.
+    kill_iperf(tgen)
+
     # Stop toplogy and Remove tmp files
     tgen.stop_topology()
 
@@ -330,16 +333,16 @@ def test_verify_mroute_and_traffic_when_pimd_restarted_p2(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure static RP for (226.1.1.1-5) in c1")
     step("Configure static RP for (232.1.1.1-5) in c2")
 
@@ -542,16 +545,16 @@ def test_verify_mroute_and_traffic_when_frr_restarted_p2(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure static RP for (226.1.1.1-5) in c1")
     step("Configure static RP for (232.1.1.1-5) in c2")
 
@@ -753,16 +756,16 @@ def test_verify_SPT_switchover_when_RPT_and_SPT_path_is_different_p0(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure static RP for (226.1.1.1-5) and " "(232.1.1.1-5) in c2")
 
     _GROUP_RANGE = GROUP_RANGE_2 + GROUP_RANGE_3
@@ -915,16 +918,16 @@ def test_verify_mroute_after_shut_noshut_of_upstream_interface_p1(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure static RP for (226.1.1.1-5) in c1")
     step("Configure static RP for (232.1.1.1-5) in c2")
 
@@ -1131,21 +1134,11 @@ def test_verify_mroute_after_shut_noshut_of_upstream_interface_p1(request):
     intf_l1_c1 = "l1-c1-eth0"
     shutdown_bringup_interface(tgen, dut, intf_l1_c1, False)
 
-    done_flag = False
-    for retry in range(1, 11):
-        result = verify_upstream_iif(
-            tgen, "l1", "Unknown", source, IGMP_JOIN_RANGE_2, expected=False
-        )
-        if result is not True:
-            done_flag = True
-        else:
-            continue
 
-        if done_flag:
-            logger.info("Expected Behavior: {}".format(result))
-            break
-
-    assert done_flag is True, (
+    result = verify_upstream_iif(
+        tgen, "l1", "Unknown", source, IGMP_JOIN_RANGE_2, expected=False
+    )
+    assert result is not True, (
         "Testcase {} : Failed Error: \n "
         "mroutes are still present, after waiting for 10 mins".format(tc_name)
     )
@@ -1198,16 +1191,16 @@ def test_verify_mroute_when_receiver_is_outside_frr_p0(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure static RP on c1 for group range " "(226.1.1.1-5) and (232.1.1.1-5)")
 
     _GROUP_RANGE = GROUP_RANGE_2 + GROUP_RANGE_3
@@ -1338,16 +1331,16 @@ def test_verify_mroute_when_FRR_is_FHR_and_LHR_p0(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure static RP for group range (226.1.1.1-5) and " "(232.1.1.1-5) on c1")
     _GROUP_RANGE = GROUP_RANGE_2 + GROUP_RANGE_3
     _IGMP_JOIN_RANGE = IGMP_JOIN_RANGE_2 + IGMP_JOIN_RANGE_3
@@ -1484,31 +1477,18 @@ def test_verify_mroute_when_FRR_is_FHR_and_LHR_p0(request):
         {"dut": "f1", "src_address": "*", "iif": "f1-c2-eth0", "oil": "f1-i8-eth2"},
         {"dut": "l1", "src_address": "*", "iif": "l1-c1-eth0", "oil": "l1-i1-eth1"},
     ]
-
-    done_flag = False
-    for retry in range(1, 11):
-        for data in input_dict:
-            result = verify_ip_mroutes(
-                tgen,
-                data["dut"],
-                data["src_address"],
-                _IGMP_JOIN_RANGE,
-                data["iif"],
-                data["oil"],
-            )
-
-            if result is True:
-                done_flag = True
-            else:
-                continue
-
-        if done_flag:
-            break
-
-    assert done_flag is True, (
-        "Testcase {} : Failed Error: \n "
-        "mroutes are still present, after waiting for 10 mins".format(tc_name)
-    )
+    for data in input_dict:
+        result = verify_ip_mroutes(
+            tgen,
+            data["dut"],
+            data["src_address"],
+            _IGMP_JOIN_RANGE,
+            data["iif"],
+            data["oil"],
+        )
+        assert result is True, (
+            "Testcase {} : Failed Error mroutes were flushed.".format(tc_name)
+        )
 
     step(
         "After traffic stopped , verify (S,G) entries are flushed out"
@@ -1520,31 +1500,19 @@ def test_verify_mroute_when_FRR_is_FHR_and_LHR_p0(request):
         {"dut": "f1", "src_address": source, "iif": "i2-f1-eth0", "oil": "f1-r2-eth3"},
     ]
 
-    done_flag = False
-    for retry in range(1, 11):
-        for data in input_dict:
-            result = verify_ip_mroutes(
-                tgen,
-                data["dut"],
-                data["src_address"],
-                _IGMP_JOIN_RANGE,
-                data["iif"],
-                data["oil"],
-                expected=False,
-            )
-            if result is not True:
-                done_flag = True
-            else:
-                continue
-
-        if done_flag:
-            logger.info("Expected Behavior: {}".format(result))
-            break
-
-    assert done_flag is True, (
-        "Testcase {} : Failed Error: \n "
-        "mroutes are still present, after waiting for 10 mins".format(tc_name)
-    )
+    for data in input_dict:
+        result = verify_ip_mroutes(
+            tgen,
+            data["dut"],
+            data["src_address"],
+            _IGMP_JOIN_RANGE,
+            data["iif"],
+            data["oil"],
+            expected=False,
+        )
+        assert result is not True, (
+            "Testcase {} : Failed Error: \nmroutes are still present".format(tc_name)
+        )
 
     write_test_footer(tc_name)
 
@@ -1559,16 +1527,16 @@ def test_verify_mroute_when_5_different_receiver_joining_same_sources_p0(request
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure static RP for (226.1.1.1-5) in c1")
     step("Configure static RP for (232.1.1.1-5) in c2")
 
@@ -1790,16 +1758,16 @@ def test_verify_oil_iif_for_mroute_after_shut_noshut_source_interface_p1(request
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure static RP for (226.1.1.1-5) in c1")
     step("Configure static RP for (232.1.1.1-5) in c2")
 
index 033c76081a0a10f6747ed540d7cf6a59a76eed6b..f3688e2f55706dde042c5b6d9f50ce739cd0fba7 100755 (executable)
@@ -68,7 +68,6 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
 
 from lib.common_config import (
     start_topology,
@@ -178,7 +177,6 @@ SAME_VLAN_IP_1 = {"ip": "10.1.1.1", "subnet": "255.255.255.0", "cidr": "24"}
 SAME_VLAN_IP_2 = {"ip": "10.1.1.2", "subnet": "255.255.255.0", "cidr": "24"}
 SAME_VLAN_IP_3 = {"ip": "10.1.1.3", "subnet": "255.255.255.0", "cidr": "24"}
 SAME_VLAN_IP_4 = {"ip": "10.1.1.4", "subnet": "255.255.255.0", "cidr": "24"}
-TCPDUMP_FILE = "{}/{}".format(LOGDIR, "v2query.txt")
 
 
 class CreateTopo(Topo):
@@ -242,6 +240,9 @@ def teardown_module():
 
     tgen = get_topogen()
 
+    # Kill any iperfs we left running.
+    kill_iperf(tgen)
+
     # Stop toplogy and Remove tmp files
     tgen.stop_topology()
 
@@ -351,31 +352,27 @@ def verify_state_incremented(state_before, state_after):
     * `state_after` : State dictionary for any particular instance
     """
 
-    for router, state_data in state_before.items():
-        for state, value in state_data.items():
-            if state_before[router][state] >= state_after[router][state]:
-                errormsg = (
-                    "[DUT: %s]: state %s value has not"
-                    " incremented, Initial value: %s, "
-                    "Current value: %s [FAILED!!]"
-                    % (
-                        router,
-                        state,
-                        state_before[router][state],
-                        state_after[router][state],
+    for ttype, v1 in state_before.items():
+        for intf, v2 in v1.items():
+            for state, value in v2.items():
+                if value >= state_after[ttype][intf][state]:
+                    errormsg = (
+                        "[DUT: %s]: state %s value has not incremented, Initial value: %s, Current value: %s [FAILED!!]" % (
+                            intf,
+                            state,
+                            value,
+                            state_after[ttype][intf][state],
+                        )
                     )
+                    return errormsg
+
+                logger.info(
+                    "[DUT: %s]: State %s value is incremented, Initial value: %s, Current value: %s [PASSED!!]",
+                    intf,
+                    state,
+                    value,
+                    state_after[ttype][intf][state],
                 )
-                return errormsg
-
-            logger.info(
-                "[DUT: %s]: State %s value is "
-                "incremented, Initial value: %s, Current value: %s"
-                " [PASSED!!]",
-                router,
-                state,
-                state_before[router][state],
-                state_after[router][state],
-            )
 
     return True
 
@@ -392,7 +389,7 @@ def find_v2_query_msg_in_tcpdump(tgen, router, message, count, cap_file):
 
     """
 
-    filepath = os.path.join(LOGDIR, tgen.modname, router, cap_file)
+    filepath = os.path.join(tgen.logdir, router, cap_file)
     with open(filepath) as f:
         if len(re.findall("{}".format(message), f.read())) < count:
             errormsg = "[DUT: %s]: Verify Message: %s in tcpdump" " [FAILED!!]" % (
@@ -422,7 +419,7 @@ def find_tos_in_tcpdump(tgen, router, message, cap_file):
 
     """
 
-    filepath = os.path.join(LOGDIR, tgen.modname, router, cap_file)
+    filepath = os.path.join(tgen.logdir, router, cap_file)
     with open(filepath) as f:
 
         if len(re.findall(message, f.read())) < 1:
@@ -449,6 +446,10 @@ def test_verify_oil_when_join_prune_sent_scenario_1_p1(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -456,10 +457,6 @@ def test_verify_oil_when_join_prune_sent_scenario_1_p1(request):
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Enable the PIM on all the interfaces of FRR1, FRR2, FRR3")
     step(
         "Enable IGMP of FRR1 interface and send IGMP joins "
@@ -824,6 +821,10 @@ def test_verify_oil_when_join_prune_sent_scenario_2_p1(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -831,10 +832,6 @@ def test_verify_oil_when_join_prune_sent_scenario_2_p1(request):
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Removing FRR3 to simulate topo " "FHR(FRR1)---LHR(FRR2)")
 
     intf_l1_c1 = topo["routers"]["l1"]["links"]["c1"]["interface"]
@@ -1066,6 +1063,10 @@ def test_shut_noshut_source_interface_when_upstream_cleared_from_LHR_p1(request)
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -1073,10 +1074,6 @@ def test_shut_noshut_source_interface_when_upstream_cleared_from_LHR_p1(request)
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Enable the PIM on all the interfaces of FRR1, R2 and FRR3" " routers")
     step("Enable IGMP on FRR1 interface and send IGMP join " "(225.1.1.1-225.1.1.10)")
 
@@ -1211,22 +1208,11 @@ def test_shut_noshut_source_interface_when_upstream_cleared_from_LHR_p1(request)
         " 'show ip pim upstream' 'show ip mroute' "
     )
 
-    done_flag = False
-    for retry in range(1, 11):
-        result = verify_upstream_iif(
-            tgen, "l1", "Unknown", source_i2, IGMP_JOIN_RANGE_1, expected=False
-        )
-        if result is not True:
-            done_flag = True
-        else:
-            continue
-        if done_flag:
-            logger.info("Expected Behavior: {}".format(result))
-            break
-
-    assert done_flag is True, (
-        "Testcase {} : Failed Error: \n "
-        "mroutes are still present, after waiting for 10 mins".format(tc_name)
+    result = verify_upstream_iif(
+        tgen, "l1", "Unknown", source_i2, IGMP_JOIN_RANGE_1, expected=False
+    )
+    assert result is not True, (
+        "Testcase {} : Failed Error: \n mroutes are still present".format(tc_name)
     )
 
     step("No shut the Source interface just after the upstream is expired" " from FRR1")
@@ -1294,6 +1280,10 @@ def test_shut_noshut_receiver_interface_when_upstream_cleared_from_LHR_p1(reques
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -1301,10 +1291,6 @@ def test_shut_noshut_receiver_interface_when_upstream_cleared_from_LHR_p1(reques
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Enable the PIM on all the interfaces of FRR1, R2 and FRR3" " routers")
     step("Enable IGMP on FRR1 interface and send IGMP join " "(225.1.1.1-225.1.1.10)")
 
@@ -1425,22 +1411,11 @@ def test_shut_noshut_receiver_interface_when_upstream_cleared_from_LHR_p1(reques
         " 'show ip pim upstream' 'show ip mroute' "
     )
 
-    done_flag = False
-    for retry in range(1, 11):
-        result = verify_upstream_iif(
-            tgen, "l1", "Unknown", source_i2, IGMP_JOIN_RANGE_1, expected=False
-        )
-        if result is not True:
-            done_flag = True
-        else:
-            continue
-        if done_flag:
-            logger.info("Expected Behavior: {}".format(result))
-            break
-
-    assert done_flag is True, (
-        "Testcase {} : Failed Error: \n "
-        "mroutes are still present, after waiting for 10 mins".format(tc_name)
+    result = verify_upstream_iif(
+        tgen, "l1", "Unknown", source_i2, IGMP_JOIN_RANGE_1, expected=False
+    )
+    assert result is not True, (
+        "Testcase {} : Failed Error: \nmroutes are still present".format(tc_name)
     )
 
     step("No shut the Source interface just after the upstream is expired" " from FRR1")
@@ -1507,6 +1482,10 @@ def test_verify_remove_add_igmp_config_to_receiver_interface_p0(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -1514,10 +1493,6 @@ def test_verify_remove_add_igmp_config_to_receiver_interface_p0(request):
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Enable PIM on all routers")
     step("Enable IGMP on FRR1 interface and send IGMP join " "(225.1.1.1-225.1.1.10)")
 
@@ -1883,6 +1858,10 @@ def test_verify_remove_add_igmp_commands_when_pim_configured_p0(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -1890,10 +1869,6 @@ def test_verify_remove_add_igmp_commands_when_pim_configured_p0(request):
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Enable PIM on all routers")
     step("Enable IGMP on FRR1 interface and send IGMP join " "(225.1.1.1-225.1.1.10)")
 
@@ -2182,6 +2157,10 @@ def test_verify_remove_add_pim_commands_when_igmp_configured_p1(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -2189,10 +2168,6 @@ def test_verify_remove_add_pim_commands_when_igmp_configured_p1(request):
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure 'ip pim' on receiver interface on FRR1")
     step("Enable PIM on all routers")
     step("Enable IGMP on FRR1 interface and send IGMP join " "(225.1.1.1-225.1.1.10)")
@@ -2377,6 +2352,10 @@ def test_pim_dr_priority_p0(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -2384,10 +2363,6 @@ def test_pim_dr_priority_p0(request):
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure 'ip pim' on receiver interface on FRR1")
     step("Enable PIM on all routers")
     step("Enable IGMP on FRR1 interface and send IGMP join " "(225.1.1.1-225.1.1.10)")
@@ -2660,6 +2635,10 @@ def test_pim_hello_timer_p1(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -2667,10 +2646,6 @@ def test_pim_hello_timer_p1(request):
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step("Configure 'ip pim' on receiver interface on FRR1")
     step("Enable PIM on all routers")
     step("Enable IGMP on FRR1 interface and send IGMP join " "(225.1.1.1-225.1.1.10)")
@@ -2780,6 +2755,10 @@ def test_mroute_after_removing_RP_sending_IGMP_prune_p2(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -2787,9 +2766,6 @@ def test_mroute_after_removing_RP_sending_IGMP_prune_p2(request):
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
     step(
         "Remove cisco connected link to simulate topo "
         "LHR(FRR1(f1))----RP(cisco(f1)---FHR(FRR3(l1))"
@@ -3097,6 +3073,10 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -3104,9 +3084,6 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request):
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
     step(
         "Remove cisco connected link to simulate topo "
         "LHR(FRR1(f1))----RP(cisco(f1)---FHR(FRR3(l1))"
@@ -3738,6 +3715,10 @@ def test_mroute_flags_p1(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -3745,9 +3726,6 @@ def test_mroute_flags_p1(request):
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
     step(
         "Remove cisco connected link to simulate topo "
         "LHR(FRR1(f1))----RP(cisco(f1)---FHR(FRR3(l1))"
@@ -3900,6 +3878,10 @@ def test_verify_multicast_traffic_when_LHR_connected_to_RP_p1(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -3907,10 +3889,6 @@ def test_verify_multicast_traffic_when_LHR_connected_to_RP_p1(request):
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step(
         "Remove FRR3 to cisco connected link to simulate topo "
         "FHR(FRR3(l1))---LHR(FRR1(r2)----RP(FRR2(f1))"
@@ -4362,6 +4340,10 @@ def test_verify_multicast_traffic_when_FHR_connected_to_RP_p1(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
@@ -4369,10 +4351,6 @@ def test_verify_multicast_traffic_when_FHR_connected_to_RP_p1(request):
     clear_ip_pim_interface_traffic(tgen, topo)
     check_router_status(tgen)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
-
     step(
         "Remove FRR3 to FRR2 connected link to simulate topo "
         "FHR(FRR3)---LHR(FRR1)----RP(FFR2)"
index 1081b764acdbc2cac6313ef4bf14a00a300f483a..0b9c216c66fdfdfc36440199ec52cdb578d4c016 100755 (executable)
@@ -61,7 +61,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.common_config import (
     start_topology,
@@ -210,6 +210,9 @@ def teardown_module():
 
     tgen = get_topogen()
 
+    # Kill any iperfs we left running.
+    kill_iperf(tgen)
+
     # Stop toplogy and Remove tmp files
     tgen.stop_topology()
 
@@ -323,15 +326,16 @@ def test_mroute_when_RP_reachable_default_route_p2(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
     step(
         "Remove c1-c2 connected link to simulate topo "
         "c1(FHR)---l1(RP)----r2---f1-----c2(LHR)"
@@ -621,15 +625,16 @@ def test_mroute_with_RP_default_route_all_nodes_p2(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
     step(
         "Remove c1-c2 connected link to simulate topo "
         "c1(LHR)---l1(RP)----r2---f1-----c2(FHR)"
@@ -908,15 +913,16 @@ def test_PIM_hello_tx_rx_p1(request):
     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)
+
     # Creating configuration from JSON
     kill_iperf(tgen)
     clear_ip_mroute(tgen)
     reset_config_on_routers(tgen)
     clear_ip_pim_interface_traffic(tgen, topo)
 
-    # Don"t run this test if we have any failure.
-    if tgen.routers_have_failure():
-        pytest.skip(tgen.errors)
     step(
         "Remove c1-c2 connected link to simulate topo "
         "c1(LHR)---l1(RP)----r2---f1-----c2(FHR)"
index 7c2d13f3953f8e2400fc3d646821f413788ee9c5..ba8ea0be63b94001fca40074311079b3f62e3127 100755 (executable)
@@ -114,7 +114,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 from lib.topogen import Topogen, get_topogen
 from lib.topolog import logger
@@ -268,6 +268,9 @@ def teardown_module():
 
     tgen = get_topogen()
 
+    # Kill any iperfs we left running.
+    kill_iperf(tgen)
+
     # Stop toplogy and Remove tmp files
     tgen.stop_topology()
 
index f59e3ae1b98e123103f9192e18987ee5f5276980..081c63a185594a199d66b3f65ac37a31c7bc583d 100644 (file)
@@ -43,7 +43,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.nhrpd]
 
index 8a6544734a5166daa48ebc1ed644c51b02666369..4a4ae3d5b97b7caaff39ac5c564b4e806a704f8f 100644 (file)
@@ -78,7 +78,7 @@ from time import sleep
 
 from functools import partial
 
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 # Save the Current Working Directory to find configuration files later.
 CWD = os.path.dirname(os.path.realpath(__file__))
index 61a80cc9ec416dfa1239385ed39ca0f5ac8345e9..fc1a472a17c240c179b5e0ca53967e8c4c474b79 100755 (executable)
@@ -80,7 +80,7 @@ from time import sleep
 
 from functools import partial
 
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 # Save the Current Working Directory to find configuration files later.
 CWD = os.path.dirname(os.path.realpath(__file__))
index 8c5f1e6f607615301745fb194994b674e0c50fc7..e64000b077a2016906054b8606b985b71c62d544 100644 (file)
@@ -42,7 +42,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.ospf6d]
 
@@ -346,7 +346,7 @@ def test_nssa_lsa_type7():
     def dont_expect_route(unexpected_route):
         "Specialized test function to expect route go missing"
         output = tgen.gears["r4"].vtysh_cmd("show ipv6 ospf6 route json", isjson=True)
-        if output["routes"].has_key(unexpected_route):
+        if unexpected_route in output["routes"]:
             return output["routes"][unexpected_route]
         return None
 
index a3f1bc76ffec17ad3591b60fc795d6a4a0250b64..392cca3a1bb91110f6646a6170c6e391bac7d0df 100644 (file)
@@ -35,7 +35,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 import ipaddress
 from time import sleep
index db177360b447a851f4efff42eb7ee8fbd4b84969..3bd4f8b5960fe82ecf2584569c8c717dbb6aab92 100644 (file)
@@ -35,7 +35,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 import ipaddress
 from time import sleep
index bdba8fd8e423f17a1568319467cad7973c6995be..6d1b8d9e9d1a10ce46daae4dfabd618f97fed5d9 100644 (file)
@@ -38,7 +38,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
index c117fc6a7212aa21d14297de2a8eacd64b642bf6..d946cca89210114bbcbade94d53d5fa2f2a29cf9 100644 (file)
@@ -36,7 +36,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
index 5c57f8be25583d9b3157572082ecadd941331dea..4c5510ca6c0349be7903b9332601c4cd7eaee4a2 100644 (file)
@@ -37,7 +37,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 from ipaddress import IPv4Address
 
index 96f781c150e8b6e374082d45c2fe8489c010fc32..eb1c3a914c1d11ceb2a4168d47faccb3f8bf654d 100644 (file)
@@ -35,7 +35,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
index c89a663380f9b9d4b5c67877c08777cc68194608..e7a002fb80f11dfaacd57715190503318fb6867f 100644 (file)
@@ -38,7 +38,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
index 0af83548b9d7e51b4e7fa933d3ab43567a31d0ac..5cb4bd33dd488a9a261305e2f5a0bacd42ceaa09 100644 (file)
@@ -49,7 +49,7 @@ from lib.common_config import (
 )
 from ipaddress import IPv4Address
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 import os
 import sys
 import time
index 0172f589c52ad7853668e7143d2ffb33883015eb..553313645793b49a3d15421f4d7298c1a95c789e 100644 (file)
@@ -37,7 +37,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 import ipaddress
 
@@ -57,6 +57,7 @@ from lib.common_config import (
 )
 from lib.topolog import logger
 from lib.topojson import build_topo_from_json, build_config_from_json
+from lib.topotest import frr_unicode
 
 from lib.ospf import (
     verify_ospf_neighbor,
index 066f53aa58ef42dcba5a314c68af6d85f0a0d8ac..34abd0dc483894d1926b0fb1be3e1190f18d03e3 100644 (file)
@@ -36,7 +36,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
index 0e2fef4a2251e2aabd31c2eab125b3fac27704e0..9f05f396ad018decc54414a7a5b251df43ee59eb 100644 (file)
@@ -36,7 +36,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
index 0d0668a931aecf3afdef58ff551647e67ccfb440..2773c01ff545f26c4337bdc7cc7a44141081eda0 100644 (file)
@@ -38,7 +38,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 import ipaddress
 
index b5f535cd0687155eefb2d07c4a2bb05e5c9b2057..f4d98fddb84cc22c4a24a908220b48451b3c049d 100644 (file)
@@ -10,7 +10,7 @@ CWD = os.path.dirname(os.path.realpath(__file__))
 sys.path.append(os.path.join(CWD, "../"))
 sys.path.append(os.path.join(CWD, "../lib/"))
 
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 from lib.common_config import (
index 0507c2d516a5589f70800f56f4367811b75f2c56..3520cdf2433bfdf330c57b31fa6c3563c67e5a8c 100755 (executable)
@@ -92,7 +92,7 @@ from lib.common_config import (
 )
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.ospfd]
 
index 6c1122ab7298cd3a376357cde044e1315d5d7d63..6146178d891cfa27c880d1a03603b3b4ac040d01 100755 (executable)
@@ -93,7 +93,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bgpd, pytest.mark.ospfd, pytest.mark.pathd]
 
index 8b7e3b778778a3b7d92e89d002b43b7a4fe8a608..3f448d4bf330c828a837fda029a8910cbc8be68d 100644 (file)
@@ -82,7 +82,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.ospfd]
 
index a22fbf458a85c23d9d14993a26acd607806c9296..2975e5864ed1b8772768652e16461c6c99b020aa 100644 (file)
@@ -48,7 +48,7 @@ from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.ospfd]
 
index 32f9b3453ebbc03d7f7709479cf70fed72f0e541..1678287bb72a618c681d6eadf074717d1a0c6e24 100644 (file)
@@ -67,7 +67,7 @@ sys.path.append(os.path.join(CWD, "../"))
 
 # pylint: disable=C0413
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 # Import topogen and topotest helpers
 from lib import topotest
@@ -83,7 +83,7 @@ pytestmark = [pytest.mark.ospfd]
 class OspfTeTopo(Topo):
     "Test topology builder"
 
-    def build(self):
+    def build(self, *args, **kwargs):
         "Build function"
         tgen = get_topogen(self)
 
index b3da6e2a1a580747e5dacba6aa9e0d789b330e02..956e2ab0a0c78b36b1200a172d508fcfb01bfd36 100644 (file)
@@ -69,7 +69,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.ospfd]
 
index 42634ce906d9a403332a141c72665e908915bd30..50992503ea85e78a5286d45dea0cabbc21667b52 100644 (file)
@@ -43,7 +43,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.ospfd]
 
index 713a65a812f2ab38337fc9bafb0bce58e3720b28..711f76c5c80676c35b7e0d6a1479fd8884db9cf5 100644 (file)
@@ -43,7 +43,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.ospfd]
 
@@ -99,20 +99,12 @@ def setup_module(mod):
 
     logger.info("Testing with VRF Namespace support")
 
-    cmds = [
-        "if [ -e /var/run/netns/{0}-ospf-cust1 ] ; then ip netns del {0}-ospf-cust1 ; fi",
-        "ip netns add {0}-ospf-cust1",
-        "ip link set dev {0}-eth0 netns {0}-ospf-cust1",
-        "ip netns exec {0}-ospf-cust1 ip link set {0}-eth0 up",
-        "ip link set dev {0}-eth1 netns {0}-ospf-cust1",
-        "ip netns exec {0}-ospf-cust1 ip link set {0}-eth1 up",
-    ]
-
     for rname, router in router_list.items():
-
-        # create VRF rx-ospf-cust1 and link rx-eth0 to rx-ospf-cust1
-        for cmd in cmds:
-            output = tgen.net[rname].cmd(cmd.format(rname))
+        # create VRF rx-ospf-cust1 and link rx-eth{0,1} to rx-ospf-cust1
+        ns = "{}-ospf-cust1".format(rname)
+        router.net.add_netns(ns)
+        router.net.set_intf_netns(rname + "-eth0", ns, up=True)
+        router.net.set_intf_netns(rname + "-eth1", ns, up=True)
 
         router.load_config(
             TopoRouter.RD_ZEBRA,
@@ -134,18 +126,12 @@ def teardown_module(mod):
     "Teardown the pytest environment"
     tgen = get_topogen()
 
-    # move back rx-eth0 to default VRF
-    # delete rx-vrf
-    cmds = [
-        "ip netns exec {0}-ospf-cust1 ip link set {0}-eth0 netns 1",
-        "ip netns exec {0}-ospf-cust1 ip link set {0}-eth1 netns 1",
-        "ip netns delete {0}-ospf-cust1",
-    ]
-
+    # Move interfaces out of vrf namespace and delete the namespace
     router_list = tgen.routers()
     for rname, router in router_list.items():
-        for cmd in cmds:
-            tgen.net[rname].cmd(cmd.format(rname))
+        tgen.net[rname].reset_intf_netns(rname + "-eth0")
+        tgen.net[rname].reset_intf_netns(rname + "-eth1")
+        tgen.net[rname].delete_netns(rname + "-ospf-cust1")
     tgen.stop_topology()
 
 
index 8b8d5d6e9f1654f482c46d4abc0573ff425f0c83..38d424c90669951582ce7a6f7c6438a62d0c1e27 100644 (file)
@@ -44,7 +44,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.ospfd]
 
@@ -95,10 +95,10 @@ def setup_module(mod):
         # the rp_filter.  Setting it to '0' allows the OS to pass
         # up the mcast packet not destined for the local routers
         # network.
-        topotest.set_sysctl(tgen.net["r1"], "net.ipv4.conf.r1-eth1.rp_filter", 0)
-        topotest.set_sysctl(tgen.net["r1"], "net.ipv4.conf.all.rp_filter", 0)
-        topotest.set_sysctl(tgen.net["r2"], "net.ipv4.conf.r2-eth1.rp_filter", 0)
-        topotest.set_sysctl(tgen.net["r2"], "net.ipv4.conf.all.rp_filter", 0)
+        topotest.sysctl_assure(tgen.net["r1"], "net.ipv4.conf.r1-eth1.rp_filter", 0)
+        topotest.sysctl_assure(tgen.net["r1"], "net.ipv4.conf.all.rp_filter", 0)
+        topotest.sysctl_assure(tgen.net["r2"], "net.ipv4.conf.r2-eth1.rp_filter", 0)
+        topotest.sysctl_assure(tgen.net["r2"], "net.ipv4.conf.all.rp_filter", 0)
 
     # Initialize all routers.
     tgen.start_router()
index 6a4b60fbed6cec7a87c379dc6b0554ddd66ce347..c76da39ca5c89ba4df8e3be54661b873a16c3b27 100644 (file)
@@ -38,7 +38,6 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
 from lib.topogen import Topogen, get_topogen
 import ipaddress
 from time import sleep
index 50c5144b3ff9876e03725cb6dea464c69b873c24..6bfe4f199e67a81a4b7e8853395852c14cc53deb 100644 (file)
@@ -38,7 +38,6 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
 from lib.topogen import Topogen, get_topogen
 import ipaddress
 
index d8cf3bd02dac78893cef4d6db7be94ae32356270..af1017c6bc24e98a3352d51934784f0a18167e89 100644 (file)
@@ -38,7 +38,6 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
 from lib.topogen import Topogen, get_topogen
 import ipaddress
 
index 860f17ba674e7f96f246d8245d41435f4a7dffe2..d16cbb76fb267c1b0aeb1aae8c76607fea96632f 100644 (file)
@@ -37,7 +37,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 import ipaddress
 from lib.bgp import verify_bgp_convergence, create_router_bgp
index 0c1c51c78a803747cb62330c86e257d88f572786..22593babaa51c4c8d3bbac71dea210962f4bda4f 100644 (file)
@@ -38,7 +38,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 import ipaddress
 
index 1a024063b8df7504aba5dc6651c94d1606ae47bf..494e27a2adfa80127a8a98d55900cc6a31de7a12 100644 (file)
@@ -47,7 +47,7 @@ from lib.topolog import logger
 from lib.common_config import shutdown_bringup_interface
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.pbrd]
 
index 77917a023952f04a2f18f36386a345910286ed4f..0f172d3d9d39826218a09c27eb9cc0a000180f1e 100755 (executable)
@@ -119,7 +119,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.pim import McastTesterHelper
 
 pytestmark = [pytest.mark.pimd, pytest.mark.ospfd]
 
index 4debbeb851768e04fe7ab8fa7a7287a4fdc19bfa..e921b37b69786a965d2bd2d80024e9d8a4192080 100644 (file)
@@ -41,7 +41,7 @@ from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.pimd]
 
@@ -208,22 +208,29 @@ def test_pim_igmp_report():
     r1 = tgen.gears["r1"]
 
     # Let's send a igmp report from r2->r1
-    CWD = os.path.dirname(os.path.realpath(__file__))
-    r2.run("{}/mcast-rx.py 229.1.1.2 r2-eth0 &".format(CWD))
-
-    out = r1.vtysh_cmd("show ip pim upstream json", isjson=True)
-    expected = {
-        "229.1.1.2": {
-            "*": {
-                "sourceIgmp": 1,
-                "joinState": "Joined",
-                "regState": "RegNoInfo",
-                "sptBit": 0,
+    cmd = [ os.path.join(CWD, "mcast-rx.py"), "229.1.1.2", "r2-eth0" ]
+    p = r2.popen(cmd)
+    try:
+        expected = {
+            "229.1.1.2": {
+                "*": {
+                    "sourceIgmp": 1,
+                    "joinState": "Joined",
+                    "regState": "RegNoInfo",
+                    "sptBit": 0,
+                }
             }
         }
-    }
-
-    assert topotest.json_cmp(out, expected) is None, "failed to converge pim"
+        test_func = partial(
+            topotest.router_json_cmp, r1, "show ip pim upstream json", expected
+        )
+        _, result = topotest.run_and_expect(test_func, None, count=5, wait=.5)
+        assertmsg = '"{}" JSON output mismatches'.format(r1.name)
+        assert result is None, assertmsg
+    finally:
+        if p:
+            p.terminate()
+            p.wait()
 
 
 def test_memory_leak():
index 883125cfc74f5171d53c34ead36a667e2f020fd3..2bed11c5460b9bbc50228c429f55b34b8fa86c78 100644 (file)
@@ -43,7 +43,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 
 # Required to instantiate the topology builder class.
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 
 pytestmark = [pytest.mark.bfdd, pytest.mark.pimd]
 
index 78672ac8713ba726b378f02129beea43960f8d42..91b4278cd31278a11facaa5093ee4c426c477851 100644 (file)
@@ -33,17 +33,13 @@ import sys
 import pytest
 from time import sleep
 
-from mininet.topo import Topo
-from mininet.net import Mininet
-from mininet.node import Node, OVSSwitch, Host
-from mininet.log import setLogLevel, info
-from mininet.cli import CLI
-from mininet.link import Intf
 
 from functools import partial
 
 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 from lib import topotest
+from lib.micronet_compat import Topo
+from lib.micronet_compat import Mininet
 
 fatal_error = ""
 
@@ -76,26 +72,26 @@ class NetworkTopo(Topo):
         #
         # On main router
         # First switch is for a dummy interface (for local network)
-        switch[1] = self.addSwitch("sw1", cls=topotest.LegacySwitch)
+        switch[1] = self.addSwitch("sw1")
         self.addLink(switch[1], router[1], intfName2="r1-eth0")
         #
         # Switches for RIP
         # switch 2 switch is for connection to RIP router
-        switch[2] = self.addSwitch("sw2", cls=topotest.LegacySwitch)
+        switch[2] = self.addSwitch("sw2")
         self.addLink(switch[2], router[1], intfName2="r1-eth1")
         self.addLink(switch[2], router[2], intfName2="r2-eth0")
         # switch 3 is between RIP routers
-        switch[3] = self.addSwitch("sw3", cls=topotest.LegacySwitch)
+        switch[3] = self.addSwitch("sw3")
         self.addLink(switch[3], router[2], intfName2="r2-eth1")
         self.addLink(switch[3], router[3], intfName2="r3-eth1")
         # switch 4 is stub on remote RIP router
-        switch[4] = self.addSwitch("sw4", cls=topotest.LegacySwitch)
+        switch[4] = self.addSwitch("sw4")
         self.addLink(switch[4], router[3], intfName2="r3-eth0")
 
-        switch[5] = self.addSwitch("sw5", cls=topotest.LegacySwitch)
+        switch[5] = self.addSwitch("sw5")
         self.addLink(switch[5], router[1], intfName2="r1-eth2")
 
-        switch[6] = self.addSwitch("sw6", cls=topotest.LegacySwitch)
+        switch[6] = self.addSwitch("sw6")
         self.addLink(switch[6], router[1], intfName2="r1-eth3")
 
 
@@ -397,7 +393,6 @@ def test_shutdown_check_stderr():
 
 if __name__ == "__main__":
 
-    setLogLevel("info")
     # To suppress tracebacks, either use the following pytest call or add "--tb=no" to cli
     # retval = pytest.main(["-s", "--tb=no"])
     retval = pytest.main(["-s"])
index 4a5a59cd75a233a28a7d7c7df62d4b285edb94d3..9b3f66111cf3b3c8612094071ec7d32414e6b970 100644 (file)
@@ -34,17 +34,12 @@ import pytest
 import unicodedata
 from time import sleep
 
-from mininet.topo import Topo
-from mininet.net import Mininet
-from mininet.node import Node, OVSSwitch, Host
-from mininet.log import setLogLevel, info
-from mininet.cli import CLI
-from mininet.link import Intf
-
 from functools import partial
 
 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 from lib import topotest
+from lib.micronet_compat import Topo
+from lib.micronet_compat import Mininet
 
 fatal_error = ""
 
@@ -77,25 +72,25 @@ class NetworkTopo(Topo):
         #
         # On main router
         # First switch is for a dummy interface (for local network)
-        switch[1] = self.addSwitch("sw1", cls=topotest.LegacySwitch)
+        switch[1] = self.addSwitch("sw1")
         self.addLink(switch[1], router[1], intfName2="r1-eth0")
         #
         # Switches for RIPng
         # switch 2 switch is for connection to RIP router
-        switch[2] = self.addSwitch("sw2", cls=topotest.LegacySwitch)
+        switch[2] = self.addSwitch("sw2")
         self.addLink(switch[2], router[1], intfName2="r1-eth1")
         self.addLink(switch[2], router[2], intfName2="r2-eth0")
         # switch 3 is between RIP routers
-        switch[3] = self.addSwitch("sw3", cls=topotest.LegacySwitch)
+        switch[3] = self.addSwitch("sw3")
         self.addLink(switch[3], router[2], intfName2="r2-eth1")
         self.addLink(switch[3], router[3], intfName2="r3-eth1")
         # switch 4 is stub on remote RIP router
-        switch[4] = self.addSwitch("sw4", cls=topotest.LegacySwitch)
+        switch[4] = self.addSwitch("sw4")
         self.addLink(switch[4], router[3], intfName2="r3-eth0")
 
-        switch[5] = self.addSwitch("sw5", cls=topotest.LegacySwitch)
+        switch[5] = self.addSwitch("sw5")
         self.addLink(switch[5], router[1], intfName2="r1-eth2")
-        switch[6] = self.addSwitch("sw6", cls=topotest.LegacySwitch)
+        switch[6] = self.addSwitch("sw6")
         self.addLink(switch[6], router[1], intfName2="r1-eth3")
 
 
@@ -443,7 +438,6 @@ def test_shutdown_check_memleak():
 
 if __name__ == "__main__":
 
-    setLogLevel("info")
     # To suppress tracebacks, either use the following pytest call or add "--tb=no" to cli
     # retval = pytest.main(["-s", "--tb=no"])
     retval = pytest.main(["-s"])
index 469ad42d640dd6cc6905231fb5e21227765bce9e..d489967209eaeae161a00793b7345fe2090476dc 100644 (file)
@@ -45,8 +45,6 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 from lib.common_config import shutdown_bringup_interface
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
 
 pytestmark = [pytest.mark.sharpd]
 
@@ -58,22 +56,17 @@ pytestmark = [pytest.mark.sharpd]
 #####################################################
 
 
-class NetworkTopo(Topo):
-    "Route Scale Topology"
+def build(tgen):
+    "Build function"
 
-    def build(self, **_opts):
-        "Build function"
+    # Populate routers
+    for routern in range(1, 2):
+        tgen.add_router("r{}".format(routern))
 
-        tgen = get_topogen(self)
-
-        # Populate routers
-        for routern in range(1, 2):
-            tgen.add_router("r{}".format(routern))
-
-        # Populate switches
-        for switchn in range(1, 33):
-            switch = tgen.add_switch("sw{}".format(switchn))
-            switch.add_link(tgen.gears["r1"])
+    # Populate switches
+    for switchn in range(1, 33):
+        switch = tgen.add_switch("sw{}".format(switchn))
+        switch.add_link(tgen.gears["r1"])
 
 
 #####################################################
@@ -85,7 +78,7 @@ class NetworkTopo(Topo):
 
 def setup_module(module):
     "Setup topology"
-    tgen = Topogen(NetworkTopo, module.__name__)
+    tgen = Topogen(build, module.__name__)
     tgen.start_topology()
 
     router_list = tgen.routers()
@@ -213,11 +206,11 @@ def test_route_install():
         scale_setups.append(d)
 
     # Avoid top ecmp case for runs with < 4G memory
-    p = os.popen("free")
-    l = p.readlines()[1].split()
-    mem = int(l[1])
-    if mem < 4000000:
-        logger.info("Limited memory available: {}, skipping x32 testcase".format(mem))
+    output = tgen.net.cmd_raises("free")
+    m = re.search("Mem:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)", output)
+    total_mem = int(m.group(2))
+    if total_mem < 4000000:
+        logger.info("Limited memory available: {}, skipping x32 testcase".format(total_mem))
         scale_setups = scale_setups[0:-1]
 
     # Run each step using the dicts we've built
index b37911da36717999455bddd343fc97f5917438c0..740574cb8e9af33f1dfd853e549b0bb3a5b79831 100644 (file)
@@ -13,3 +13,6 @@ iquerySecName frr
 rouser frr
 
 master agentx
+
+agentXSocket /etc/frr/agentx
+agentXPerms 777 755 root frr
index bdb44816b68cdff236efad3ce1c4efc158fd0d0f..c96bddf18df1bdfb4219f567799134ea413b75b7 100755 (executable)
@@ -43,39 +43,10 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 from lib.snmptest import SnmpTester
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
 
 pytestmark = [pytest.mark.bgpd, pytest.mark.isisd, pytest.mark.snmp]
 
 
-class TemplateTopo(Topo):
-    "Test topology builder"
-
-    def build(self, *_args, **_opts):
-        "Build function"
-        tgen = get_topogen(self)
-
-        # This function only purpose is to define allocation and relationship
-        # between routers, switches and hosts.
-        #
-        #
-        # Create routers
-        tgen.add_router("r1")
-
-        # r1-eth0
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["r1"])
-
-        # r1-eth1
-        switch = tgen.add_switch("s2")
-        switch.add_link(tgen.gears["r1"])
-
-        # r1-eth2
-        switch = tgen.add_switch("s3")
-        switch.add_link(tgen.gears["r1"])
-
-
 def setup_module(mod):
     "Sets up the pytest environment"
 
@@ -84,7 +55,12 @@ def setup_module(mod):
         error_msg = "SNMP not installed - skipping"
         pytest.skip(error_msg)
     # This function initiates the topology build with Topogen...
-    tgen = Topogen(TemplateTopo, mod.__name__)
+    topodef = {
+        "s1": "r1",
+        "s2": "r1",
+        "s3": "r1"
+    }
+    tgen = Topogen(topodef, mod.__name__)
     # ... and here it calls Mininet initialization functions.
     tgen.start_topology()
 
@@ -142,7 +118,7 @@ def test_r1_bgp_version():
         pytest.skip(tgen.errors)
 
     # tgen.mininet_cli()
-    r1 = tgen.net.get("r1")
+    r1 = tgen.gears["r1"]
     r1_snmp = SnmpTester(r1, "1.1.1.1", "public", "2c")
     assert r1_snmp.test_oid("bgpVersin", None)
     assert r1_snmp.test_oid("bgpVersion", "10")
index 04b0d8db97ac1c9bac66b326d7faae76d54b46e4..7b571a0a8605f7eaecfc4181421e6098b658aaa1 100755 (executable)
@@ -41,7 +41,6 @@ sys.path.append(os.path.join(CWD, '../'))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
 
 pytestmark = [pytest.mark.bgpd, pytest.mark.sharpd]
 
@@ -54,16 +53,11 @@ def open_json_file(filename):
         assert False, "Could not read file {}".format(filename)
 
 
-class TemplateTopo(Topo):
-    def build(self, *_args, **_opts):
-        tgen = get_topogen(self)
-        tgen.add_router('r1')
 
 
 def setup_module(mod):
-    tgen = Topogen(TemplateTopo, mod.__name__)
+    tgen = Topogen({None: "r1"}, mod.__name__)
     tgen.start_topology()
-    router_list = tgen.routers()
     for rname, router in tgen.routers().items():
         router.run("/bin/bash {}/{}/setup.sh".format(CWD, rname))
         router.load_config(TopoRouter.RD_ZEBRA, os.path.join(CWD, '{}/zebra.conf'.format(rname)))
index a16c4ae2975374dc0aec682577c4244c9162f7d8..7b9b61fd91867a86fbb0f18ece7e67f3250bd8d4 100644 (file)
@@ -44,7 +44,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
 from lib.topogen import Topogen, get_topogen
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topotest import version_cmp
 
 # Import topoJson from lib, to create topology and initial configuration
index 2c44ec2351063d15c55b6979e900e4dbb5ec84d1..c0edfef5d7cedf411974e15177b2af5e5875a99c 100644 (file)
@@ -52,7 +52,7 @@ sys.path.append(os.path.join(CWD, "../"))
 sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
index 8525e3655c930b1b7662cc17e19cadae5e18489b..f088fd618e99ea243856789fc7656dc31581a42c 100644 (file)
@@ -45,7 +45,7 @@ sys.path.append(os.path.join(CWD, "../"))
 sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 from lib.common_config import (
index 626de6b422f8a3b96b41f23f958fa9014c18f34c..217f8467dda9acec92a40bca17b96c1fee0d6b95 100644 (file)
@@ -44,7 +44,7 @@ sys.path.append(os.path.join(CWD, "../"))
 sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 from lib.topotest import version_cmp
 
index 4e23a72423bf3116f4dbf25ea0aafb3c2ec3259e..ea888c1376f80843fa4ec8281922aed7e6e257a2 100644 (file)
@@ -43,7 +43,7 @@ sys.path.append(os.path.join(CWD, "../"))
 sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 from lib.topotest import version_cmp
 
index 85b9e8b543032195a5e7ced67fc4bda3dce6f4ef..b58543cc918dfd11584e5293178eb40a9fc9fcc5 100644 (file)
@@ -52,7 +52,7 @@ sys.path.append(os.path.join(CWD, "../"))
 sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 # Import topoJson from lib, to create topology and initial configuration
index c84c88ac35214b7d59b104529255afa4b418396d..8e769ea66ff5ed23b091241489fade20cb24cdaf 100644 (file)
@@ -47,7 +47,7 @@ sys.path.append(os.path.join(CWD, "../"))
 sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 from lib.topotest import version_cmp
 
index a82ee64538b6aee722ce949d33ceaf1ca971a35f..eb828ea035f4ca7fca15219fecef90874e114733 100644 (file)
@@ -43,7 +43,7 @@ sys.path.append(os.path.join(CWD, "../"))
 sys.path.append(os.path.join(CWD, "../lib/"))
 # pylint: disable=C0413
 # Import topogen and topotest helpers
-from mininet.topo import Topo
+from lib.micronet_compat import Topo
 from lib.topogen import Topogen, get_topogen
 
 from lib.common_config import (
index cf08ee9639b55b268f1e283b8f880be297448a2e..8c258a9dae0e7ed9bc1f76934999df5b92b46164 100644 (file)
@@ -44,33 +44,10 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 from lib.common_config import shutdown_bringup_interface
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
 
 pytestmark = [pytest.mark.sharpd]
 
 
-#####################################################
-##
-##   Network Topology Definition
-##
-#####################################################
-
-
-class ZebraTopo(Topo):
-    "Test topology builder"
-
-    def build(self, *_args, **_opts):
-        "Build function"
-        tgen = get_topogen(self)
-
-        tgen.add_router("r1")
-
-        # Create a empty network for router 1
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["r1"])
-
-
 #####################################################
 ##
 ##   Tests starting
@@ -80,7 +57,9 @@ class ZebraTopo(Topo):
 
 def setup_module(mod):
     "Sets up the pytest environment"
-    tgen = Topogen(ZebraTopo, mod.__name__)
+
+    topodef = { "s1": ("r1") }
+    tgen = Topogen(topodef, mod.__name__)
     tgen.start_topology()
 
     router_list = tgen.routers()
index 2339b0f5b0bfaf65084f74e9401d7f40b2ce5a2e..05911a9de3d5c6ab9122946ca6a90e13e2b7ceb4 100644 (file)
@@ -36,25 +36,15 @@ sys.path.append(os.path.join(CWD, "../"))
 from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
-from mininet.topo import Topo
 
 pytestmark = [pytest.mark.bgpd]
 
 
-class TemplateTopo(Topo):
-    def build(self, *_args, **_opts):
-        tgen = get_topogen(self)
-
-        for routern in range(1, 3):
-            tgen.add_router("r{}".format(routern))
-
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r2"])
-
-
 def setup_module(mod):
-    tgen = Topogen(TemplateTopo, mod.__name__)
+    topodef = {
+        "s1": ("r1", "r2")
+    }
+    tgen = Topogen(topodef, mod.__name__)
     tgen.start_topology()
 
     router_list = tgen.routers()
index 778a710ee3f9ad741cdb16f5dfe8d4ad50003ac9..cc12189fd22933c6bc717823b19af4ede07371e9 100644 (file)
@@ -43,36 +43,17 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 from time import sleep
 
-# Required to instantiate the topology builder class.
-from mininet.topo import Topo
 
 pytestmark = [pytest.mark.sharpd]
 
 
-class ZebraTopo(Topo):
-    "Test topology builder"
-
-    def build(self, *_args, **_opts):
-        "Build function"
-        tgen = get_topogen(self)
-
-        tgen.add_router("r1")
-
-        # Create a empty network for router 1
-        switch = tgen.add_switch("s1")
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r1"])
-        switch.add_link(tgen.gears["r1"])
-
 
 def setup_module(mod):
     "Sets up the pytest environment"
-    tgen = Topogen(ZebraTopo, mod.__name__)
+    topodef = {
+        "s1": ("r1", "r1", "r1", "r1", "r1", "r1", "r1", "r1")
+    }
+    tgen = Topogen(topodef, mod.__name__)
     tgen.start_topology()
 
     router_list = tgen.routers()
index a83c6d6ec0ec760fb7e97ab3a23855b63e0a4a87..6ac6569fa1fc16b970bc5f58a02e5f4769a7eea0 100755 (executable)
@@ -41,7 +41,6 @@ from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 from lib.common_config import shutdown_bringup_interface
-from mininet.topo import Topo
 
 pytestmark = [pytest.mark.sharpd]
 
@@ -54,14 +53,8 @@ def open_json_file(filename):
         assert False, "Could not read file {}".format(filename)
 
 
-class TemplateTopo(Topo):
-    def build(self, **_opts):
-        tgen = get_topogen(self)
-        tgen.add_router("r1")
-
-
 def setup_module(mod):
-    tgen = Topogen(TemplateTopo, mod.__name__)
+    tgen = Topogen({None: "r1"}, mod.__name__)
     tgen.start_topology()
     router_list = tgen.routers()
     for rname, router in tgen.routers().items():
index 6cdb77b94b6fa8f6f56280d17493a0e0acda4c8e..3311fbe0b778b99483366ffda56021c37d6d9c3c 100755 (executable)
@@ -41,7 +41,6 @@ from lib import topotest
 from lib.topogen import Topogen, TopoRouter, get_topogen
 from lib.topolog import logger
 from lib.common_config import shutdown_bringup_interface
-from mininet.topo import Topo
 
 pytestmark = [pytest.mark.sharpd]
 
@@ -54,14 +53,8 @@ def open_json_file(filename):
         assert False, "Could not read file {}".format(filename)
 
 
-class TemplateTopo(Topo):
-    def build(self, **_opts):
-        tgen = get_topogen(self)
-        tgen.add_router("r1")
-
-
 def setup_module(mod):
-    tgen = Topogen(TemplateTopo, mod.__name__)
+    tgen = Topogen({None: "r1"}, mod.__name__)
     tgen.start_topology()
     router_list = tgen.routers()
     for rname, router in tgen.routers().items():