def setUp(self): tb = Genie.testbed = Testbed() self.dev1 = Device(testbed=tb, name='PE1', os='iosxe') self.dev2 = Device(testbed=tb, name='PE2', os='iosxe') self.i1 = Interface(name='GigabitEthernet0/0/1', device=self.dev1) self.i2 = Interface(name='GigabitEthernet0/0/2', device=self.dev2) self.i3 = Interface(name='GigabitEthernet0/0/3', device=self.dev1) self.i4 = Interface(name='GigabitEthernet0/0/4', device=self.dev2) self.i5 = Interface(name='GigabitEthernet0/0/5', device=self.dev1) self.i6 = Interface(name='GigabitEthernet0/0/6', device=self.dev2) self.i7 = Interface(name='GigabitEthernet0/0/7', device=self.dev1) self.i8 = Interface(name='GigabitEthernet0/0/8', device=self.dev2) self.link = Link(name='1_2_1') self.link.connect_interface(interface=self.i1) self.link.connect_interface(interface=self.i2) self.link2 = Link(name='1_2_2') self.link2.connect_interface(interface=self.i3) self.link2.connect_interface(interface=self.i4) self.link3 = Link(name='1_2_3') self.link3.connect_interface(interface=self.i5) self.link3.connect_interface(interface=self.i6) self.link4 = Link(name='1_2_4') self.link4.connect_interface(interface=self.i7) self.link4.connect_interface(interface=self.i8) self.assertCountEqual(self.link.find_interfaces(), [self.i1, self.i2]) self.assertCountEqual(self.dev1.find_interfaces(), [self.i1, self.i3, self.i5, self.i7]) self.assertCountEqual(self.dev2.find_interfaces(), [self.i2, self.i4, self.i6, self.i8])
def test_init_vpls(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxe') lo1 = Interface(device=dev1, name='Loopback0', ipv4='101.0.0.1/32') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/1', ipv4='10.1.0.1/24') intf2 = Interface(device=dev1, name='GigabitEthernet0/0/2', ipv4='10.2.0.1/24') dev2 = Device(testbed=testbed, name='PE2', os='iosxe') lo2 = Interface(device=dev2, name='Loopback0', ipv4='102.0.0.1/32') intf3 = Interface(device=dev2, name='GigabitEthernet0/0/3', ipv4='10.1.0.2/24') intf4 = Interface(device=dev2, name='GigabitEthernet0/0/4', ipv4='10.2.0.2/24') link1 = Link(testbed=testbed, name='link1', interfaces=(intf1, intf3)) link2 = Link(testbed=testbed, name='link2', interfaces=(intf2, intf4)) dev3 = Device(testbed=testbed, name='PE3', os='iosxe') bd1 = BridgeDomain(name='200') dev1.add_feature(bd1) dev2.add_feature(bd1) self.assertCountEqual(bd1.pseudowires, []) nbr1 = bd1.create_pseudowire_neighbor(device=dev1, ip=lo2.ipv4.ip) nbr2 = bd1.device_attr[dev2].create_pseudowire_neighbor(ip=lo1.ipv4.ip) pw1 = Pseudowire(neighbors=(nbr1, nbr2), pw_id=1) self.assertCountEqual(bd1.pseudowires, [pw1]) self.assertCountEqual(bd1.pseudowire_neighbors, [nbr1, nbr2]) self.assertCountEqual(bd1.device_attr[dev1].pseudowires, [pw1]) self.assertCountEqual(bd1.device_attr[dev1].pseudowire_neighbors, [nbr1]) self.assertCountEqual(bd1.device_attr[dev2].pseudowires, [pw1]) self.assertCountEqual(bd1.device_attr[dev2].pseudowire_neighbors, [nbr2]) self.assertCountEqual(bd1.device_attr[dev3].pseudowires, []) self.assertCountEqual(bd1.device_attr[dev3].pseudowire_neighbors, []) self.assertCountEqual(bd1.segments, [pw1]) self.assertCountEqual(bd1.device_attr[dev1].segments, [pw1]) self.assertCountEqual(bd1.device_attr[dev2].segments, [pw1]) self.assertCountEqual(bd1.device_attr[dev3].segments, []) cfgs = bd1.build_config(apply=False) self.assertMultiLineDictEqual( cfgs, { dev1.name: '\n'.join([ 'bridge-domain 200', ' exit', ]), dev2.name: '\n'.join([ 'bridge-domain 200', ' exit', ]), })
def test_init_vpws(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxr') lo1 = Interface(device=dev1, name='Loopback0', ipv4='101.0.0.1/32') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/0/1', ipv4='10.1.0.1/24') intf2 = Interface(device=dev1, name='GigabitEthernet0/0/0/2', ipv4='10.2.0.1/24') dev2 = Device(testbed=testbed, name='PE2', os='iosxr') lo2 = Interface(device=dev2, name='Loopback0', ipv4='102.0.0.1/32') intf3 = Interface(device=dev2, name='GigabitEthernet0/0/0/3', ipv4='10.1.0.2/24') intf4 = Interface(device=dev2, name='GigabitEthernet0/0/0/4', ipv4='10.2.0.2/24') link1 = Link(testbed=testbed, name='link1', interfaces=(intf1, intf3)) link2 = Link(testbed=testbed, name='link2', interfaces=(intf2, intf4)) dev3 = Device(testbed=testbed, name='PE3', os='iosxr') xc1 = Xconnect(name='xc1') dev1.add_feature(xc1) dev2.add_feature(xc1) self.assertCountEqual(xc1.pseudowires, []) nbr1 = xc1.create_pseudowire_neighbor(device=dev1, ip=lo2.ipv4.ip) nbr2 = xc1.device_attr[dev2].create_pseudowire_neighbor(ip=lo1.ipv4.ip) pw1 = Pseudowire(neighbors=(nbr1, nbr2), pw_id=1) self.assertCountEqual(xc1.pseudowires, [pw1]) self.assertCountEqual(xc1.device_attr[dev1].pseudowires, [pw1]) self.assertCountEqual(xc1.device_attr[dev2].pseudowires, [pw1]) self.assertCountEqual(xc1.device_attr[dev3].pseudowires, []) self.assertCountEqual(xc1.segments, [pw1]) self.assertCountEqual(xc1.device_attr[dev1].segments, [pw1]) self.assertCountEqual(xc1.device_attr[dev2].segments, [pw1]) self.assertCountEqual(xc1.device_attr[dev3].segments, []) cfgs = xc1.build_config(apply=False) self.assertMultiLineDictEqual( cfgs, { dev1.name: '\n'.join([ 'l2vpn', ' xconnect group xc1g', ' p2p xc1', ' neighbor ipv4 102.0.0.1 pw-id 1', ' exit', ' exit', ' exit', ' exit', ]), dev2.name: '\n'.join([ 'l2vpn', ' xconnect group xc1g', ' p2p xc1', ' neighbor ipv4 101.0.0.1 pw-id 1', ' exit', ' exit', ' exit', ' exit', ]), })
def test_init(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxr') lo1 = Interface(device=dev1, name='Loopback0', ipv4='101.0.0.1/32') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/0/1', ipv4='10.1.0.1/24') intf2 = Interface(device=dev1, name='GigabitEthernet0/0/0/2', ipv4='10.2.0.1/24') dev2 = Device(testbed=testbed, name='PE2', os='iosxr') lo2 = Interface(device=dev2, name='Loopback0', ipv4='102.0.0.1/32') intf3 = Interface(device=dev2, name='GigabitEthernet0/0/0/3', ipv4='10.1.0.2/24') intf4 = Interface(device=dev2, name='GigabitEthernet0/0/0/4', ipv4='10.2.0.2/24') link1 = Link(testbed=testbed, name='link1', interfaces=(intf1, intf3)) link2 = Link(testbed=testbed, name='link2', interfaces=(intf2, intf4)) dev3 = Device(testbed=testbed, name='PE3', os='iosxr') container = Mock() container.add_pseudowire = MagicMock() nbr1 = PseudowireNeighbor(container=container, device=dev1, ip='1.2.3.4') nbr2 = PseudowireNeighbor(container=container, device=dev2, ip='1.2.3.4') nbr3 = PseudowireNeighbor(container=container, device=dev3, ip='1.2.3.4') with self.assertRaises(TypeError): pw1 = Pseudowire() with self.assertRaises(TypeError): pw1 = Pseudowire(pw_id=1) with self.assertRaises(ValueError): pw1 = Pseudowire(neighbors=()) with self.assertRaises(ValueError): pw1 = Pseudowire(neighbors=(nbr1,)) with self.assertRaises(ValueError): pw1 = Pseudowire(neighbors=(nbr1, nbr1)) with self.assertRaises(ValueError): pw1 = Pseudowire(neighbors=(nbr1, nbr2, nbr3)) with self.assertRaises(ValueError): pw1 = Pseudowire(neighbors=(nbr1, intf2)) pw1 = Pseudowire(neighbors=(nbr1, nbr2)) self.assertCountEqual(pw1.neighbors, [nbr1, nbr2]) self.assertEqual(nbr1.pw_id, None) self.assertEqual(nbr2.pw_id, None) container.add_pseudowire.assert_has_calls([ unittest.mock.call(pw1), unittest.mock.call(pw1), ]) container.add_pseudowire.reset_mock() pw1 = Pseudowire(neighbors=(nbr1, nbr2), pw_id=1) self.assertCountEqual(pw1.neighbors, [nbr1, nbr2]) self.assertEqual(nbr1.pw_id, 1) self.assertEqual(nbr2.pw_id, 1) container.add_pseudowire.assert_has_calls([ unittest.mock.call(pw1), unittest.mock.call(pw1), ]) container.add_pseudowire.reset_mock()
def test_vlan_interface_configuration(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxr') dev2 = Device(testbed=testbed, name='PE2', os='iosxr') intf1 = Interface(name='GigabitEthernet0/0/1', device=dev1) intf2 = Interface(name='GigabitEthernet0/0/2', device=dev2) intf3 = Interface(name='GigabitEthernet0/0/3', device=dev1) link = Link(name='1_2_1', testbed=testbed) link.connect_interface(interface=intf1) link.connect_interface(interface=intf2) vlan = Vlan() link.add_feature(vlan) vlan.device_attr[dev1] vlan.device_attr[dev2] vlan.device_attr[dev1].interface_attr[intf1] vlan.device_attr[dev1].interface_attr[intf1].eth_encap_type1 = 'dot1q' vlan.device_attr[dev1].interface_attr[intf1].eth_encap_val1 = 2 vlan.device_attr[dev1].interface_attr[ intf1].eth_encap_type2 = 'second-dot1q' vlan.device_attr[dev1].interface_attr[intf1].eth_encap_val2 = 5 cfg1 = vlan.build_config(apply=False) self.assertCountEqual(cfg1.keys(), ['PE1', 'PE2']) self.assertMultiLineEqual( str(cfg1['PE1']), '\n'.join([ 'interface GigabitEthernet0/0/1', ' encapsulation dot1q 2 second-dot1q 5', ' exit', ]))
def setUp(self): pass testbed = Genie.testbed = Testbed() self.dev1 = Device(testbed=testbed, name='PE1', os='iosxe') self.dev2 = Device(testbed=testbed, name='PE2', os='iosxe') self.intf1 = Interface(name='GigabitEthernet0/0/1', device=self.dev1) self.intf2 = Interface(name='GigabitEthernet0/0/2', device=self.dev2) self.link = Link(name='1_2_1', testbed=testbed) self.link.connect_interface(interface=self.intf1) self.link.connect_interface(interface=self.intf2) self.assertSetEqual(set(self.link.find_interfaces()), set([self.intf1, self.intf2])) self.assertSetEqual(set(self.dev1.find_interfaces()), set([self.intf1])) self.assertSetEqual(set(self.dev2.find_interfaces()), set([self.intf2])) isis = Isis("core") self.assertSetEqual(set(isis.devices), set([])) self.assertSetEqual(set(isis.links), set([])) self.link.add_feature(isis) for intf_iter in self.link.interfaces: intf_iter.add_feature(isis) self.assertCountEqual(isis.devices, [self.dev1, self.dev2]) self.assertSetEqual(set(isis.links), set([self.link])) self.assertSetEqual(set(isis.interfaces), set([self.intf1, self.intf2]))
def test_basic_cfg(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxe', context='yang') dev2 = Device(testbed=testbed, name='PE2', os='iosxe', context='yang') intf1 = Interface(name='GigabitEthernet0/0/1', device=dev1) intf2 = Interface(name='GigabitEthernet0/0/2', device=dev2) intf3 = Interface(name='Vlan100', device=dev1) link = Link(name='1_2_1', testbed=testbed) link.connect_interface(interface=intf1) link.connect_interface(interface=intf2) vlan = Vlan() for dev in testbed.devices: dev.connections = Mock() dev.connections = {'netconf': NetconfConnectionInfo()} link.add_feature(vlan) vlan.vlan_id = 100 cfg1 = vlan.build_config(apply=False) self.assertCountEqual(cfg1.keys(), ['PE1', 'PE2']) compare = "" for i in cfg1['PE1']: compare += str(i) self.assertMultiLineEqual( compare, '\n'.join([ '<edit-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">\n' ' <target>\n' ' <running></running>\n' ' </target>\n' ' <config>\n' ' <vlan xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">\n' ' <vlan-list xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-vlan">\n' ' <id>100</id>\n' ' </vlan-list>\n' ' </vlan>\n' ' </config>\n' '</edit-config>\n' ])) compare = "" for i in cfg1['PE2']: compare += str(i) self.assertMultiLineEqual( compare, '\n'.join([ '<edit-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">\n' ' <target>\n' ' <running></running>\n' ' </target>\n' ' <config>\n' ' <vlan xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">\n' ' <vlan-list xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-vlan">\n' ' <id>100</id>\n' ' </vlan-list>\n' ' </vlan>\n' ' </config>\n' '</edit-config>\n' ]))
def test_vlan_interface_configuration(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxr', context='yang') dev2 = Device(testbed=testbed, name='PE2', os='iosxr', context='yang') intf1 = Interface(name='GigabitEthernet0/0/1', device=dev1, context='yang') intf2 = Interface(name='GigabitEthernet0/0/2', device=dev2, context='yang') intf3 = Interface(name='GigabitEthernet0/0/3', device=dev1, context='yang') link = Link(name='1_2_1', testbed=testbed) link.connect_interface(interface=intf1) link.connect_interface(interface=intf2) vlan = Vlan() for dev in testbed.devices: dev.connections = Mock() dev.connections = {'netconf': NetconfConnectionInfo()} link.add_feature(vlan) vlan.device_attr[dev1] vlan.device_attr[dev2] vlan.device_attr[dev1].interface_attr[intf1] vlan.device_attr[dev1].interface_attr[intf1].eth_encap_type1 = 'dot1q' vlan.device_attr[dev1].interface_attr[intf1].eth_encap_val1 = 2 vlan.device_attr[dev1].interface_attr[ intf1].eth_encap_type2 = 'second-dot1q' vlan.device_attr[dev1].interface_attr[intf1].eth_encap_val2 = 5
def test_init(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxe') dev2 = Device(testbed=testbed, name='PE2', os='iosxe') intf1 = Interface(name='GigabitEthernet0/0/1',device=dev1) intf2 = Interface(name='GigabitEthernet0/0/2',device=dev2) intf3 = Interface(name='Vlan100',device=dev1) link = Link(name='1_2_1',testbed=testbed) link.connect_interface(interface=intf1) link.connect_interface(interface=intf2) self.assertSetEqual( set(link.find_interfaces()), set([intf1, intf2])) self.assertSetEqual( set(dev1.find_interfaces()), set([intf1, intf3])) self.assertSetEqual( set(dev2.find_interfaces()), set([intf2])) vlan = Vlan() self.assertSetEqual(set(vlan.devices), set([])) self.assertSetEqual(set(vlan.links), set([])) link.add_feature(vlan) self.assertCountEqual(vlan.devices, [dev1, dev2]) self.assertSetEqual(set(vlan.links), set([link])) self.assertSetEqual(set(vlan.interfaces), set([intf1, intf2])) with self.assertRaises(AttributeError): vlan.access_map_id with self.assertRaises(AttributeError): vlan.vlan_configuration_id
def test_init(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxe', context='yang') dev2 = Device(testbed=testbed, name='PE2', os='iosxe', context='yang') intf1 = Interface(name='GigabitEthernet0/0/1', device=dev1) intf2 = Interface(name='GigabitEthernet0/0/2', device=dev2) link = Link(name='1_2_1', testbed=testbed) link.connect_interface(interface=intf1) link.connect_interface(interface=intf2) self.assertSetEqual(set(link.find_interfaces()), set([intf1, intf2])) self.assertSetEqual(set(dev1.find_interfaces()), set([intf1])) self.assertSetEqual(set(dev2.find_interfaces()), set([intf2])) vrf = Vrf(name='test') self.assertSetEqual(set(vrf.devices), set([])) self.assertSetEqual(set(vrf.interfaces), set([])) intf1.vrf = vrf intf2.vrf = vrf dev1.add_feature(vrf) dev2.add_feature(vrf) self.assertCountEqual(vrf.devices, [dev1, dev2]) self.assertSetEqual(set(vrf.interfaces), set([intf1, intf2])) with self.assertRaises(AttributeError): vrf.address_families = set([AddressFamily.ipv8_unicast])
def _write_connections_to_testbed(self, connection_dict, testbed): '''Writes the connections found in the connection_dict into the testbed Args: connection_dict ('dict'): Dictionary with connections found earlier testbed ('testbed'): testbed to write connections into ''' # filter to strip out the numbers from an interface to create a type name # example: ethernet0/3 becomes ethernet interface_filter = re.compile(r'[a-zA-Z]+') log.debug('Adding connections to testbed') for device in connection_dict: log.debug(' Writing connections found in {}'.format(device)) for interface_name in connection_dict[device]: #if connecting interface is not in the testbed, create the interface if interface_name not in testbed.devices[device].interfaces: type_name = interface_filter.match(interface_name) interface = Interface(interface_name, type=type_name[0].lower()) interface.device = testbed.devices[device] else: # get the interface found in the connection on the device searched interface = testbed.devices[device].interfaces[ interface_name] # if the interface is not already part of a link get a list of # all interfaces involved in the link and create a new link # object with the associated interfaces if interface.link is None: int_list = [interface] for entry in connection_dict[device][interface_name]: dev = entry['dest_host'] dest_int = entry['dest_port'] if testbed.devices[dev].interfaces[ dest_int] not in int_list: int_list.append( testbed.devices[dev].interfaces[dest_int]) if len(int_list) > 1: link = Link( 'Link_{num}'.format(num=len(testbed.links)), interfaces=int_list) # if the interface is already part of the link go over the # other interfaces found in the connection_dict and add them to the link # if they are not already there else: link = interface.link for entry in connection_dict[device][interface_name]: dev = entry['dest_host'] dest_int = entry['dest_port'] if testbed.devices[dev].interfaces[ dest_int] not in link.interfaces: link.connect_interface( testbed.devices[dev].interfaces[dest_int])
def setUp(self): testbed = Genie.testbed = Testbed() self.dev1 = Device(testbed=testbed, name='PE1', os='iosxr') self.dev2 = Device(testbed=testbed, name='PE2', os='iosxr') self.intf1 = Interface(name='GigabitEthernet0/0/0/1', device=self.dev1) self.intf2 = Interface(name='GigabitEthernet0/0/0/2', device=self.dev2) self.link = Link(name='1_2_1', testbed=testbed) self.link.connect_interface(interface=self.intf1) self.link.connect_interface(interface=self.intf2)
def test_basic_cfg(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxe') dev2 = Device(testbed=testbed, name='PE2', os='iosxe') intf1 = Interface(name='GigabitEthernet0/0/1',device=dev1) intf2 = Interface(name='GigabitEthernet0/0/2',device=dev2) intf3 = Interface(name='Vlan100',device=dev1) link = Link(name='1_2_1',testbed=testbed) link.connect_interface(interface=intf1) link.connect_interface(interface=intf2) vlan = Vlan() link.add_feature(vlan) vlan.vlan_id = 100 access_map_id = 'ed' vlan_configuration_id = '3' vlan.device_attr[dev1] vlan.device_attr[dev2] vlan.device_attr[dev1].interface_attr[intf1].switchport_mode = \ 'trunk' vlan.device_attr[dev1].interface_attr[intf1].sw_trunk_allowed_vlan = \ '200-201' vlan.device_attr[dev1].access_map_attr[access_map_id] vlan.device_attr[dev2].access_map_attr[access_map_id] vlan.device_attr[dev1].vlan_configuration_attr[vlan_configuration_id] vlan.device_attr[dev2].vlan_configuration_attr[vlan_configuration_id] # Defining attributes section vlan.shutdown = False with self.assertRaises(ValueError): vlan.media = 'invalid' vlan.media = 'enet' self.assertIs(type(vlan.media), Vlan.Media) vlan.accounting_type = 'input' vlan.device_attr[dev1].access_map_action = 'drop' vlan.datalink_flow_monitor = True vlan.private_vlan_type = 'association' vlan.private_vlan_association_action = 'add' vlan.private_vlan_association_ids = '201,205' cfg1 = vlan.build_config(apply=False) self.assertCountEqual(cfg1.keys(), ['PE1', 'PE2']) self.assertMultiLineEqual( str(cfg1['PE1']), '\n'.join([ 'vlan 100', ' media enet', ' no shutdown', ' private-vlan association add 201,205', ' exit', 'vlan accounting input', 'vlan access-map ed', ' action drop', ' exit', 'vlan configuration 3', ' datalink flow monitor', ' exit', 'interface GigabitEthernet0/0/1', ' switchport mode trunk', ' switchport trunk allowed vlan 200-201', ' exit', ])) self.assertMultiLineEqual( str(cfg1['PE2']), '\n'.join([ 'vlan 100', ' media enet', ' no shutdown', ' private-vlan association add 201,205', ' exit', 'vlan accounting input', 'vlan access-map ed', ' exit', 'vlan configuration 3', ' datalink flow monitor', ' exit', ]))
def test_basic_uncfg(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='nxos') dev2 = Device(testbed=testbed, name='PE2', os='nxos') intf1 = Interface(name='Ethernet0/0/1', device=dev1, layer=Layer.L3) intf2 = Interface(name='Ethernet0/0/2', device=dev2, layer=Layer.L2) link = Link(name='1_2_1', testbed=testbed) link.connect_interface(interface=intf1) link.connect_interface(interface=intf2) vlan = Vlan() link.add_feature(vlan) vlan.vlan_id = 100 access_map_id = 'ed' vlan_configuration_id = '3' vlan.device_attr[dev1] vlan.device_attr[dev2] vlan.device_attr[dev1].access_map_attr[access_map_id] vlan.device_attr[dev2].access_map_attr[access_map_id] vlan.device_attr[dev1].interface_attr[intf1] vlan.device_attr[dev2].interface_attr[intf2] vlan.device_attr[dev2].interface_attr[intf2].switchport_mode = \ L2_type.TRUNK vlan.device_attr[dev2].interface_attr[intf2].sw_trunk_allowed_vlan = \ '200-201' vlan.device_attr[dev1].vlan_configuration_attr[vlan_configuration_id] vlan.device_attr[dev2].vlan_configuration_attr[vlan_configuration_id] # Defining attributes section vlan.shutdown = False with self.assertRaises(ValueError): vlan.media = 'invalid' vlan.media = 'enet' self.assertIs(type(vlan.media), Vlan.Media) vlan.egress_port_channel_load_balance_random = True vlan.device_attr[dev1].access_map_action = 'drop' vlan.datalink_flow_monitor = True # Unconfig testing # Set a mock dev1.cli = Mock() dev1.configure = Mock() dev2.cli = Mock() dev2.configure = Mock() dev1.add_feature(vlan) dev2.add_feature(vlan) # Mock config output = vlan.build_config(apply=True) uncfg1 = vlan.build_unconfig(apply=False) self.assertCountEqual(uncfg1.keys(), ['PE1', 'PE2']) self.assertMultiLineEqual( str(uncfg1['PE1']), '\n'.join([ 'no vlan 100', 'no vlan access-map ed', 'no vlan configuration 3', ])) self.assertMultiLineEqual( str(uncfg1['PE2']), '\n'.join([ 'no vlan 100', 'no vlan access-map ed', 'no vlan configuration 3', 'interface Ethernet0/0/2', ' no switchport mode trunk', ' no switchport trunk allowed vlan 200-201', ' exit', ])) partial_uncfg1 = vlan.build_unconfig(apply=False, attributes={'device_attr': \ {'*': "media"}}) self.assertCountEqual(partial_uncfg1.keys(), ['PE1', 'PE2']) self.assertMultiLineEqual( str(partial_uncfg1['PE1']), '\n'.join([ 'vlan 100', ' no media enet', ' exit', ])) partial_unconfigure = vlan.build_unconfig(apply=False, attributes={'device_attr': \ {'*': {'access_map_attr': \ {'*': "access_map_action"}}}}) self.assertCountEqual(partial_unconfigure.keys(), ['PE1', 'PE2']) self.assertMultiLineEqual( str(partial_unconfigure['PE1']), '\n'.join([ 'vlan access-map ed', ' no action drop', ' exit', ])) all_vlan_interface_uncfg = vlan.build_unconfig(apply=False, attributes={ \ 'device_attr': {'*': { \ 'interface_attr': '*'}}}) self.assertCountEqual(all_vlan_interface_uncfg.keys(), ['PE1', 'PE2']) self.assertMultiLineEqual( str(all_vlan_interface_uncfg['PE2']), '\n'.join([ 'interface Ethernet0/0/2', ' no switchport mode trunk', ' no switchport trunk allowed vlan 200-201', ' exit', ])) partial_vlan_interface_uncfg = vlan.build_unconfig(apply=False, attributes={ \ 'device_attr': {'*': \ {'interface_attr': \ { '*': "sw_trunk_allowed_vlan"}}}}) self.assertCountEqual(partial_vlan_interface_uncfg.keys(), ['PE1', 'PE2']) self.assertMultiLineEqual( str(partial_vlan_interface_uncfg['PE2']), '\n'.join([ 'interface Ethernet0/0/2', ' no switchport trunk allowed vlan 200-201', ' exit', ]))
def test_init(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxe') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/1') intf2 = Interface(device=dev1, name='GigabitEthernet0/0/2') dev2 = Device(testbed=testbed, name='PE2', os='iosxe') intf3 = Interface(device=dev2, name='GigabitEthernet0/0/3') intf4 = Interface(device=dev2, name='GigabitEthernet0/0/4') link1 = Link(testbed=testbed, name='link1', interfaces=(intf1, intf3)) link2 = Link(testbed=testbed, name='link2', interfaces=(intf2, intf4)) bd1 = BridgeDomain(name='200') self.assertEqual(bd1.name, '200') self.assertCountEqual(bd1.devices, []) self.assertCountEqual(bd1.interfaces, []) self.assertCountEqual(bd1.vnis, []) self.assertCountEqual(bd1.vfis, []) self.assertCountEqual(bd1.evis, []) self.assertCountEqual(bd1.segments, []) self.assertCountEqual(bd1.link.interfaces, []) dev1.add_feature(bd1) self.assertCountEqual(bd1.devices, [dev1]) self.assertCountEqual(bd1.interfaces, []) self.assertCountEqual(bd1.vnis, []) self.assertCountEqual(bd1.vfis, []) self.assertCountEqual(bd1.evis, []) self.assertCountEqual(bd1.segments, []) self.assertCountEqual(bd1.link.interfaces, []) cfgs = bd1.build_config(apply=False) self.assertCountEqual(cfgs.keys(), [dev1.name]) self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.join([ 'bridge-domain 200', ' exit', ])) efp = Interface(device=dev1, name='GigabitEthernet0/0/1.20', service_instance=20) efp.encapsulation = 'dot1q' efp.rewrite_ingress = 'pop 1 symmetric' bd1.add_segment(efp) self.assertCountEqual(bd1.interfaces, [efp]) self.assertCountEqual(bd1.devices, [dev1]) self.assertCountEqual(bd1.vnis, []) self.assertCountEqual(bd1.vfis, []) self.assertCountEqual(bd1.evis, []) self.assertCountEqual(bd1.segments, [efp]) self.assertCountEqual(bd1.device_attr[dev1].interfaces, [efp]) self.assertCountEqual(bd1.device_attr[dev2].interfaces, []) self.assertCountEqual(bd1.device_attr[dev1].segments, [efp]) self.assertCountEqual(bd1.device_attr[dev2].segments, []) cfgs = bd1.build_config(apply=False) self.assertCountEqual(cfgs.keys(), [dev1.name]) self.assertMultiLineEqual( str(cfgs[dev1.name]), '\n'.join([ 'bridge-domain 200', ' member GigabitEthernet0/0/1 service-instance 20', ' exit', ]))
def test_init(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxr') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/0/1') intf2 = Interface(device=dev1, name='GigabitEthernet0/0/0/2') dev2 = Device(testbed=testbed, name='PE2', os='iosxr') intf3 = Interface(device=dev2, name='GigabitEthernet0/0/0/3') intf4 = Interface(device=dev2, name='GigabitEthernet0/0/0/4') link1 = Link(testbed=testbed, name='link1', interfaces=(intf1, intf3)) link2 = Link(testbed=testbed, name='link2', interfaces=(intf2, intf4)) with self.assertRaises(TypeError): xc1 = Xconnect() with self.assertRaises(TypeError): xc1 = Xconnect(group_name='bg1') xc1 = Xconnect(name='xc1', group_name='bg1') self.assertIs(xc1.xconnect_type, Xconnect.Type.p2p) self.assertEqual(xc1.name, 'xc1') self.assertEqual(xc1.group_name, 'bg1') xc1 = Xconnect(name='xc1') self.assertEqual(xc1.name, 'xc1') self.assertEqual(xc1.group_name, 'xc1g') self.assertCountEqual(xc1.devices, []) self.assertCountEqual(xc1.interfaces, []) self.assertCountEqual(xc1.segments, []) self.assertCountEqual(xc1.link.interfaces, []) dev1.add_feature(xc1) self.assertCountEqual(xc1.devices, [dev1]) self.assertCountEqual(xc1.interfaces, []) self.assertCountEqual(xc1.segments, []) self.assertCountEqual(xc1.link.interfaces, []) cfgs = xc1.build_config(apply=False) self.assertCountEqual(cfgs.keys(), [dev1.name]) self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.join([ 'l2vpn', ' xconnect group xc1g', ' p2p xc1', ' exit', ' exit', ' exit', ])) #xc1.add_interface(intf1) intf1.l2transport.enabled = True #self.assertCountEqual(xc1.interfaces, [intf1]) #self.assertCountEqual(xc1.devices, [dev1]) #self.assertCountEqual(xc1.segments, [intf1]) #self.assertCountEqual(xc1.link.interfaces, [intf3]) #self.assertCountEqual(xc1.device_attr[dev1].interfaces, [intf1]) #self.assertCountEqual(xc1.device_attr[dev2].interfaces, []) #self.assertCountEqual(xc1.device_attr[dev1].segments, [intf1]) self.assertCountEqual(xc1.device_attr[dev2].segments, []) cfgs = xc1.build_config(apply=False) self.assertCountEqual(cfgs.keys(), [dev1.name]) if False: self.assertMultiLineEqual(str(cfgs[dev1.name]), '\n'.join([ 'l2vpn', ' xconnect group xc1g', ' p2p xc1', ' interface GigabitEthernet0/0/0/1', ' exit', ' exit', ' exit', ])) dev2.add_feature(xc1) xc1.xconnect_type = Xconnect.Type.mp2mp xc1.autodiscovery_bgp.enabled = True xc1.autodiscovery_bgp.signaling_protocol_bgp.enabled = True xc1.autodiscovery_bgp.export_route_targets = [RouteTarget.ImportExport('1.1.1.1:1')] xc1.autodiscovery_bgp.import_route_targets = [RouteTarget.ImportExport('1.1.1.1:1')] xc1.autodiscovery_bgp.rd = '1000:1' xc1.device_attr[dev1].vpn_id = 100 xc1.device_attr[dev2].vpn_id = 101 ce_id1 = 1001 xc1.device_attr[dev1].autodiscovery_bgp.signaling_protocol_bgp.add_ce_id(ce_id1) xc1.device_attr[dev1].autodiscovery_bgp.signaling_protocol_bgp.ce_attr[ce_id1].add_interface(intf1) ce_id2 = 1000 xc1.device_attr[dev2].autodiscovery_bgp.signaling_protocol_bgp.add_ce_id(ce_id1) xc1.device_attr[dev2].autodiscovery_bgp.signaling_protocol_bgp.ce_attr[ce_id2].add_interface(intf2) xc1.device_attr[dev1].autodiscovery_bgp.signaling_protocol_bgp.ce_attr[ce_id1].interface_attr[intf1].remote_ce_id = ce_id2 xc1.device_attr[dev2].autodiscovery_bgp.signaling_protocol_bgp.ce_attr[ce_id2].interface_attr[intf2].remote_ce_id = ce_id1 cfgs = xc1.build_config(apply=False)
def test_vlan_interface_confoguration(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxr') dev2 = Device(testbed=testbed, name='PE2', os='iosxr') intf1 = Interface(name='GigabitEthernet0/0/1', device=dev1) intf2 = Interface(name='GigabitEthernet0/0/2', device=dev2) intf3 = Interface(name='GigabitEthernet0/0/3', device=dev1) link = Link(name='1_2_1', testbed=testbed) link.connect_interface(interface=intf1) link.connect_interface(interface=intf2) vlan = Vlan() link.add_feature(vlan) vlan.device_attr[dev1] vlan.device_attr[dev2] # Defining attributes section intf1.transceiver_permit_pid_all = True intf1.duplex = 'full' intf1.mac_address = 'aaaa.bbbb.cccc' intf1.eth_encap_type1 = 'dot1q' intf1.eth_encap_val1 = 2 intf1.eth_encap_val2 = 5 intf1.eth_dot1q_type = 'tunneling ethertype' intf1.eth_dot1q_value = '0x9100' intf1.ipv4 = '201.0.12.1' intf2.eth_dot1q_type = 'native vlan' intf2.eth_dot1q_value = '15' cfg1 = intf1.build_config(apply=False) self.assertMultiLineEqual( str(cfg1), '\n'.join([ 'interface GigabitEthernet0/0/1', ' dot1q tunneling ethertype 0x9100', ' encapsulation dot1q 2 second-dot1q 5', ' ipv4 address 201.0.12.1/32', ' transceiver permit pid all', ' duplex full', ' mac-address aaaa.bbbb.cccc', ' exit', ])) cfg2 = intf2.build_config(apply=False) self.assertMultiLineEqual( str(cfg2), '\n'.join([ 'interface GigabitEthernet0/0/2', ' dot1q native vlan 15', ' exit', ])) uncfg = intf1.build_unconfig(apply=False, attributes={ 'mac_address': True, 'duplex': True, 'ipv4': True, 'eth_dot1q_value': True, 'eth_encap_type1': True, }) self.assertMultiLineEqual( str(uncfg), '\n'.join([ 'interface GigabitEthernet0/0/1', ' no encapsulation dot1q 2 second-dot1q 5', ' no ipv4 address 201.0.12.1/32', ' no duplex full', ' no mac-address', ' exit', ]))
def test_init(self): Genie.testbed = Testbed() dev1 = Device(name='PE1', os='iosxr') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/0/1') intf2 = Interface(device=dev1, name='GigabitEthernet0/0/0/2') dev2 = Device(name='PE2', os='iosxr') intf3 = Interface(device=dev2, name='GigabitEthernet0/0/0/3') intf4 = Interface(device=dev2, name='GigabitEthernet0/0/0/4') tgen = Device(testbed=Genie.testbed, name='TGEN', os='spirent') intf5 = Interface(device=tgen, name='1/1', intf_mode='ethernet') intf6 = Interface(device=tgen, name='1/2', intf_mode='ethernet') Link(name='PE1-TGEN-1', interfaces=(intf1, intf5)) Link(name='PE1-PE2-1', interfaces=(intf2, intf3)) Link(name='PE2-TGEN-1', interfaces=(intf4, intf6)) with self.assertRaises(AttributeError): stream1 = Stream() stream1 = Stream(source=intf5, destination=intf6) self.assertIs(stream1.source_tgen_interface, intf5) self.assertIs(stream1.device, tgen) self.assertIs(stream1.testbed, Genie.testbed) self.assertTypedEqual(stream1.tgen_handle, None) self.assertTypedEqual(stream1.source, intf5) self.assertTypedEqual(stream1.source_instance, None) self.assertTypedEqual(stream1.source_count, 1) self.assertTypedEqual(stream1.destination, intf6) self.assertTypedEqual(stream1.destination_instance, None) self.assertTypedEqual(stream1.destination_count, 1) self.assertTypedEqual(stream1.destination_tgen_interfaces, frozenset([stream1.destination])) self.assertTypedEqual(stream1.layer2_protocol, Stream.Layer2Protocol.ethernet_ii) self.assertTypedEqual(stream1.source_mac_address, None) self.assertTypedEqual(stream1.source_mac_address_count, 0) self.assertTypedEqual(stream1.source_mac_address_step, None) self.assertTypedEqual(stream1.destination_mac_address, MAC('ffff.ffff.ffff')) self.assertTypedEqual(stream1.destination_mac_address_count, 1) self.assertTypedEqual(stream1.destination_mac_address_step, 1) self.assertTypedEqual(stream1.eth_encap_val1, None) self.assertTypedEqual(stream1.eth_encap_count1, 0) self.assertTypedEqual(stream1.eth_encap_step1, None) self.assertTypedEqual(stream1.eth_encap_range1, range(0)) self.assertTypedEqual(stream1.eth_encap_val2, None) self.assertTypedEqual(stream1.eth_encap_count2, 0) self.assertTypedEqual(stream1.eth_encap_step2, None) self.assertTypedEqual(stream1.eth_encap_range2, range(0)) self.assertTypedEqual(stream1.mpls_labels, ()) self.assertTypedEqual(stream1.ip_version, None) self.assertIs(stream1.layer3_protocol, None) self.assertTypedEqual(stream1.source_ip, None) self.assertTypedEqual(stream1.source_ip_count, 0) self.assertTypedEqual(stream1.source_ip_step, None) self.assertTypedEqual(stream1.destination_ip, None) self.assertTypedEqual(stream1.destination_ip_count, 0) self.assertTypedEqual(stream1.destination_ip_step, None) self.assertIs(stream1.layer4_protocol, None) self.assertTypedEqual(stream1.bandwidth, 10) self.assertIs(stream1.bandwidth_units, Stream.BandwidthUnits.kbps) self.assertTypedEqual(stream1.frame_length, 512) self.assertTypedEqual(stream1.frame_length_mode, Stream.FrameLengthMode.l2) self.assertTypedEqual(stream1.name, None) self.assertTypedEqual(stream1.obj_state, 'active') self.assertTypedEqual(stream1.sub_stream_increments, typedset(Stream.SubStreamIncrement, ())) intf1.mac_address = 'baad.baad.beef' intf5.mac_address = 'aaaa.bbbb.cccc' intf5.eth_encap_val1 = 1001 stream1.eth_encap_range2 = range(2000, 3000, 2) intf5.ipv4 = '1.2.3.1/24' intf6.ipv4 = '1.2.3.2/24' self.assertIs(stream1.source_tgen_interface, intf5) self.assertIs(stream1.device, tgen) self.assertIs(stream1.testbed, Genie.testbed) self.assertTypedEqual(stream1.tgen_handle, None) self.assertTypedEqual(stream1.source, intf5) self.assertTypedEqual(stream1.source_instance, None) self.assertTypedEqual(stream1.source_count, 1) self.assertTypedEqual(stream1.destination, intf6) self.assertTypedEqual(stream1.destination_instance, None) self.assertTypedEqual(stream1.destination_count, 1) self.assertTypedEqual(stream1.destination_tgen_interfaces, frozenset([stream1.destination])) self.assertTypedEqual(stream1.layer2_protocol, Stream.Layer2Protocol.ethernet_ii) self.assertTypedEqual(stream1.source_mac_address, MAC('aaaa.bbbb.cccc')) self.assertTypedEqual(stream1.source_mac_address_count, 1) self.assertTypedEqual(stream1.source_mac_address_step, 1) self.assertTypedEqual(stream1.destination_mac_address, MAC('ffff.ffff.ffff')) self.assertTypedEqual(stream1.destination_mac_address_count, 1) self.assertTypedEqual(stream1.destination_mac_address_step, 1) self.assertTypedEqual(stream1.eth_encap_val1, 1001) self.assertTypedEqual(stream1.eth_encap_count1, 1) self.assertTypedEqual(stream1.eth_encap_step1, 1) self.assertTypedEqual(stream1.eth_encap_range1, range(1001, 1002)) self.assertTypedEqual(stream1.eth_encap_val2, 2000) self.assertTypedEqual(stream1.eth_encap_count2, 500) self.assertTypedEqual(stream1.eth_encap_step2, 2) self.assertTypedEqual(stream1.eth_encap_range2, range(2000, 3000, 2)) self.assertTypedEqual(stream1.mpls_labels, ()) self.assertTypedEqual(stream1.ip_version, 4) self.assertIs(stream1.layer3_protocol, Stream.Layer3Protocol.ipv4) self.assertTypedEqual(stream1.source_ip, IPv4Address('1.2.3.1')) self.assertTypedEqual(stream1.source_ip_count, 1) self.assertTypedEqual(stream1.source_ip_step, 1) self.assertTypedEqual(stream1.destination_ip, IPv4Address('1.2.3.2')) self.assertTypedEqual(stream1.destination_ip_count, 1) self.assertTypedEqual(stream1.destination_ip_step, 1) self.assertIs(stream1.layer4_protocol, None) self.assertTypedEqual(stream1.bandwidth, 10) self.assertIs(stream1.bandwidth_units, Stream.BandwidthUnits.kbps) self.assertTypedEqual(stream1.frame_length, 512) self.assertTypedEqual(stream1.frame_length_mode, Stream.FrameLengthMode.l2) self.assertTypedEqual(stream1.name, None) self.assertTypedEqual(stream1.obj_state, 'active') self.assertTypedEqual(stream1.sub_stream_increments, typedset(Stream.SubStreamIncrement, ()))
def test_init(self): # import pdb; pdb.set_trace() testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxr') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/0/1') intf2 = Interface(device=dev1, name='GigabitEthernet0/0/0/2') dev2 = Device(testbed=testbed, name='PE2', os='iosxr') intf3 = Interface(device=dev2, name='GigabitEthernet0/0/0/3') intf4 = Interface(device=dev2, name='GigabitEthernet0/0/0/4') link1 = Link(testbed=testbed, name='link1', interfaces=(intf1, intf3)) link2 = Link(testbed=testbed, name='link2', interfaces=(intf2, intf4)) with self.assertRaises(TypeError): bd1 = BridgeDomain() with self.assertRaises(TypeError): bd1 = BridgeDomain(group_name='bg1') bd1 = BridgeDomain(name='bd1', group_name='mybg1') self.assertEqual(bd1.name, 'bd1') self.assertEqual(bd1.group_name, 'mybg1') bd1 = BridgeDomain(name='bd1') self.assertEqual(bd1.name, 'bd1') self.assertEqual(bd1.group_name, 'bd1g') self.assertCountEqual(bd1.devices, []) self.assertCountEqual(bd1.interfaces, []) self.assertCountEqual(bd1.vnis, []) self.assertCountEqual(bd1.vfis, []) self.assertCountEqual(bd1.evis, []) self.assertCountEqual(bd1.segments, []) self.assertCountEqual(bd1.link.interfaces, []) dev1.add_feature(bd1) self.assertCountEqual(bd1.devices, [dev1]) self.assertCountEqual(bd1.interfaces, []) self.assertCountEqual(bd1.vnis, []) self.assertCountEqual(bd1.vfis, []) self.assertCountEqual(bd1.evis, []) self.assertCountEqual(bd1.segments, []) self.assertCountEqual(bd1.link.interfaces, []) cfgs = bd1.build_config(apply=False) self.assertCountEqual(cfgs.keys(), [dev1.name]) self.assertMultiLineEqual( str(cfgs[dev1.name]), '\n'.join([ 'l2vpn', ' bridge group bd1g', ' bridge-domain bd1', ' exit', ' exit', ' exit', ])) bd1.add_interface(intf1) intf1.l2transport.enabled = True self.assertCountEqual(bd1.interfaces, [intf1]) self.assertCountEqual(bd1.devices, [dev1]) self.assertCountEqual(bd1.vnis, []) self.assertCountEqual(bd1.vfis, []) self.assertCountEqual(bd1.evis, []) self.assertCountEqual(bd1.segments, [intf1]) # Links under Genie Interface object is deprecated # Placed the below workaround to bypass the Unittest (commented out) # self.assertCountEqual(bd1.link.interfaces, [intf3]) self.assertCountEqual(bd1.device_attr[dev1].interfaces, [intf1]) self.assertCountEqual(bd1.device_attr[dev2].interfaces, []) self.assertCountEqual(bd1.device_attr[dev1].segments, [intf1]) self.assertCountEqual(bd1.device_attr[dev2].segments, []) cfgs = bd1.build_config(apply=False) self.assertCountEqual(cfgs.keys(), [dev1.name]) self.assertMultiLineEqual( str(cfgs[dev1.name]), '\n'.join([ 'l2vpn', ' bridge group bd1g', ' bridge-domain bd1', ' interface GigabitEthernet0/0/0/1', ' exit', ' exit', ' exit', ' exit', ]))
def test_basic_uncfg(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxr') dev2 = Device(testbed=testbed, name='PE2', os='iosxr') intf1 = Interface(name='GigabitEthernet0/0/1', device=dev1) intf2 = Interface(name='GigabitEthernet0/0/2', device=dev2) intf3 = Interface(name='GigabitEthernet0/0/3', device=dev1) link = Link(name='1_2_1', testbed=testbed) link.connect_interface(interface=intf1) link.connect_interface(interface=intf2) vlan = Vlan() link.add_feature(vlan) # Defining attributes section vlan.device_attr[dev1] vlan.device_attr[dev2] vlan.device_attr[dev1].interface_attr[intf1] vlan.device_attr[dev1].interface_attr[intf1].eth_encap_type1 = 'dot1q' vlan.device_attr[dev1].interface_attr[intf1].eth_encap_val1 = 2 vlan.device_attr[dev1].interface_attr[ intf1].eth_encap_type2 = 'second-dot1q' vlan.device_attr[dev1].interface_attr[intf1].eth_encap_val2 = 5 # Unconfig testing # Set a mock dev1.cli = Mock() dev1.configure = Mock() dev2.cli = Mock() dev2.configure = Mock() dev1.add_feature(vlan) dev2.add_feature(vlan) # Mock config output = vlan.build_config(apply=True) uncfg = vlan.build_unconfig(apply=False) self.assertMultiLineEqual( str(uncfg['PE1']), '\n'.join([ 'interface GigabitEthernet0/0/1', ' no encapsulation dot1q 2 second-dot1q 5', ' exit', ])) all_vlan_interface_uncfg = vlan.build_unconfig(apply=False, attributes={'device_attr':\ {'*':{'interface_attr':'*'}}}) self.assertCountEqual(all_vlan_interface_uncfg.keys(), ['PE1', 'PE2']) self.assertMultiLineEqual( str(all_vlan_interface_uncfg['PE1']), '\n'.join([ 'interface GigabitEthernet0/0/1', ' no encapsulation dot1q 2 second-dot1q 5', ' exit', ])) partial_vlan_interface_uncfg = vlan.build_unconfig(apply=False, attributes={'device_attr':\ {'*':{'interface_attr':\ {'*':"eth_encap_type1"}}}}) self.assertCountEqual(partial_vlan_interface_uncfg.keys(), ['PE1', 'PE2']) self.assertMultiLineEqual( str(partial_vlan_interface_uncfg['PE1']), '\n'.join([ 'interface GigabitEthernet0/0/1', ' no encapsulation dot1q 2 second-dot1q 5', ' exit', ]))
def test_init(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxr') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/0/1') intf2 = Interface(device=dev1, name='GigabitEthernet0/0/0/2') dev2 = Device(testbed=testbed, name='PE2', os='iosxr') intf3 = Interface(device=dev2, name='GigabitEthernet0/0/0/3') intf4 = Interface(device=dev2, name='GigabitEthernet0/0/0/4') link1 = Link(testbed=testbed, name='link1', interfaces=(intf1, intf3)) link2 = Link(testbed=testbed, name='link2', interfaces=(intf2, intf4)) with self.assertRaises(TypeError): grp1 = IccpGroup() grp1 = IccpGroup(group_id=1) self.assertEqual(grp1.group_id, 1) self.assertCountEqual(grp1.devices, []) self.assertCountEqual(grp1.interfaces, []) dev1.add_feature(grp1) self.assertCountEqual(grp1.devices, [dev1]) self.assertCountEqual(grp1.interfaces, []) cfgs = grp1.build_config(apply=False) self.assertCountEqual(cfgs.keys(), [dev1.name]) self.assertMultiLineEqual( str(cfgs[dev1.name]), '\n'.join([ 'redundancy', ' iccp group 1', ' exit', ' exit', ])) grp1.add_interface(intf1) self.assertCountEqual(grp1.interfaces, [intf1]) self.assertCountEqual(grp1.devices, [dev1]) self.assertCountEqual(grp1.device_attr[dev1].interfaces, [intf1]) self.assertCountEqual(grp1.device_attr[dev2].interfaces, []) cfgs = grp1.build_config(apply=False) self.assertCountEqual(cfgs.keys(), [dev1.name]) self.assertMultiLineEqual( str(cfgs[dev1.name]), '\n'.join([ 'redundancy', ' iccp group 1', ' interface GigabitEthernet0/0/0/1', ' exit', ' exit', ' exit', ])) dev2.add_feature(grp1) grp1.add_interface(intf2) grp1.add_interface(intf3) grp1.mac_flush = 'stp-tcn' grp1.device_attr[dev1].recovery_delay = 100 grp1.device_attr[intf1.device].interface_attr[intf1].primary_vlan = 1 grp1.device_attr[intf1.device].interface_attr[intf1].mac_flush = None self.assertCountEqual(grp1.interfaces, [intf1, intf2, intf3]) self.assertCountEqual(grp1.devices, [dev1, dev2]) self.assertCountEqual(grp1.device_attr[dev1].interfaces, [intf1, intf2]) self.assertCountEqual(grp1.device_attr[dev2].interfaces, [intf3]) cfgs = grp1.build_config(apply=False) self.assertCountEqual(cfgs.keys(), [dev1.name, dev2.name]) self.assertMultiLineEqual( str(cfgs[dev1.name]), '\n'.join([ 'redundancy', ' iccp group 1', ' interface GigabitEthernet0/0/0/1', ' primary vlan 1', ' recovery delay 100', ' exit', ' interface GigabitEthernet0/0/0/2', ' mac-flush stp-tcn', ' recovery delay 100', ' exit', ' exit', ' exit', ])) self.assertMultiLineEqual( str(cfgs[dev2.name]), '\n'.join([ 'redundancy', ' iccp group 1', ' interface GigabitEthernet0/0/0/3', ' mac-flush stp-tcn', ' exit', ' exit', ' exit', ]))
def test_init(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxe') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/1') intf2 = Interface(device=dev1, name='GigabitEthernet0/0/2') dev2 = Device(testbed=testbed, name='PE2', os='iosxe') intf3 = Interface(device=dev2, name='GigabitEthernet0/0/3') intf4 = Interface(device=dev2, name='GigabitEthernet0/0/4') link1 = Link(testbed=testbed, name='link1', interfaces=(intf1, intf3)) link2 = Link(testbed=testbed, name='link2', interfaces=(intf2, intf4)) with self.assertRaises(TypeError): xc1 = Xconnect() xc1 = Xconnect(name='xc1') self.assertIs(xc1.xconnect_type, Xconnect.Type.p2p) self.assertEqual(xc1.name, 'xc1') self.assertCountEqual(xc1.devices, []) self.assertCountEqual(xc1.interfaces, []) self.assertCountEqual(xc1.segments, []) self.assertCountEqual(xc1.link.interfaces, []) dev1.add_feature(xc1) self.assertCountEqual(xc1.devices, [dev1]) self.assertCountEqual(xc1.interfaces, []) self.assertCountEqual(xc1.segments, []) self.assertCountEqual(xc1.link.interfaces, []) cfgs = xc1.build_config(apply=False) self.assertCountEqual(cfgs.keys(), [dev1.name]) self.assertMultiLineEqual( str(cfgs[dev1.name]), '\n'.join([ 'l2vpn xconnect context xc1', ' exit', ])) efp = Interface(device=dev1, name='GigabitEthernet0/0/1.20', service_instance=20) efp.encapsulation = 'dot1q' efp.rewrite_ingress = 'pop 1 symmetric' xc1.add_segment(efp) self.assertCountEqual(xc1.interfaces, [efp]) self.assertCountEqual(xc1.devices, [dev1]) self.assertCountEqual(xc1.segments, [efp]) self.assertCountEqual(xc1.device_attr[dev1].interfaces, [efp]) self.assertCountEqual(xc1.device_attr[dev2].interfaces, []) self.assertCountEqual(xc1.device_attr[dev1].segments, [efp]) self.assertCountEqual(xc1.device_attr[dev2].segments, []) cfgs = xc1.build_config(apply=False) self.assertCountEqual(cfgs.keys(), [dev1.name]) self.assertMultiLineEqual( str(cfgs[dev1.name]), '\n'.join([ 'l2vpn xconnect context xc1', ' member GigabitEthernet0/0/1 service-instance 20', ' exit', ]))
def test_basic_cfg(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='nxos') dev2 = Device(testbed=testbed, name='PE2', os='nxos') intf1 = Interface(name='Ethernet0/0/1', device=dev1, layer=Layer.L3) intf2 = Interface(name='Ethernet0/0/2', device=dev2, layer=Layer.L2) link = Link(name='1_2_1', testbed=testbed) link.connect_interface(interface=intf1) link.connect_interface(interface=intf2) vlan = Vlan() link.add_feature(vlan) vlan.vlan_id = 100 access_map_id = 'ed' vlan_configuration_id = '3' vlan.device_attr[dev1] vlan.device_attr[dev2] vlan.device_attr[dev1].interface_attr[intf1] vlan.device_attr[dev2].interface_attr[intf2] vlan.device_attr[dev2].interface_attr[intf2].switchport_mode = \ L2_type.TRUNK vlan.device_attr[dev2].interface_attr[intf2].sw_trunk_allowed_vlan = \ '200-201' vlan.device_attr[dev1].access_map_attr[access_map_id] vlan.device_attr[dev2].access_map_attr[access_map_id] vlan.device_attr[dev1].vlan_configuration_attr[vlan_configuration_id] vlan.device_attr[dev2].vlan_configuration_attr[vlan_configuration_id] # Defining attributes section vlan.shutdown = False with self.assertRaises(ValueError): vlan.media = 'invalid' vlan.media = 'enet' self.assertIs(type(vlan.media), Vlan.Media) vlan.egress_load_balance = True vlan.device_attr[dev1].access_map_action = 'drop' vlan.datalink_flow_monitor = True intf1.ipv4 = '201.0.12.1' intf1.ipv4.netmask = '255.255.255.0' intf1.speed = 1000 intf1.mtu = 500 intf1.ipv6 = '2001::12:1' cfg1 = vlan.build_config(apply=False) cfg2 = intf1.build_config(apply=False) self.assertCountEqual(cfg1.keys(), ['PE1', 'PE2']) self.assertMultiLineEqual( str(cfg1['PE1']), '\n'.join([ 'vlan 100', ' media enet', ' no shutdown', ' exit', 'vlan access-map ed', ' action drop', ' exit', 'vlan configuration 3', ' egress port-channel load-balance random', ' exit', 'interface Ethernet0/0/1', ' mtu 500', ' ip address 201.0.12.1 255.255.255.0', ' ipv6 address 2001::12:1/128', ' speed 1000', ' exit', ])) self.assertMultiLineEqual( str(cfg1['PE2']), '\n'.join([ 'vlan 100', ' media enet', ' no shutdown', ' exit', 'vlan access-map ed', ' exit', 'vlan configuration 3', ' egress port-channel load-balance random', ' exit', 'interface Ethernet0/0/2', ' switchport mode trunk', ' switchport trunk allowed vlan 200-201', ' exit', ])) self.assertMultiLineEqual( str(cfg2), '\n'.join([ 'interface Ethernet0/0/1', ' mtu 500', ' ip address 201.0.12.1 255.255.255.0', ' ipv6 address 2001::12:1/128', ' speed 1000', ' exit', ]))