Ejemplo n.º 1
0
    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]))
Ejemplo n.º 2
0
    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])
Ejemplo n.º 3
0
    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',
                ]),
            })
Ejemplo n.º 4
0
    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 _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])
Ejemplo n.º 6
0
    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()
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
 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])
Ejemplo n.º 9
0
    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
Ejemplo n.º 10
0
    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'
            ]))
Ejemplo n.º 11
0
    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',
            ]))
Ejemplo n.º 12
0
    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
Ejemplo n.º 13
0
class test_te(unittest.TestCase):
    def setUp(self):
        self.tb = Genie.testbed = Testbed()
        self.dev1 = Device(testbed=self.tb, name='PE1', os='iosxe')
        self.dev2 = Device(testbed=self.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', testbed=self.tb)
        self.link.connect_interface(interface=self.i1)
        self.link.connect_interface(interface=self.i2)
        self.link2 = Link(name='1_2_2', testbed=self.tb)
        self.link2.connect_interface(interface=self.i3)
        self.link2.connect_interface(interface=self.i4)
        self.link3 = Link(name='1_2_3', testbed=self.tb)
        self.link3.connect_interface(interface=self.i5)
        self.link3.connect_interface(interface=self.i6)
        self.link4 = Link(name='1_2_4', testbed=self.tb)
        self.link4.connect_interface(interface=self.i7)
        self.link4.connect_interface(interface=self.i8)
        self.assertSetEqual(set(self.link.find_interfaces()),
                            set([self.i1, self.i2]))
        self.assertSetEqual(set(self.dev1.find_interfaces()),
                            set([self.i1, self.i3, self.i5, self.i7]))
        self.assertSetEqual(set(self.dev2.find_interfaces()),
                            set([self.i2, self.i4, self.i6, self.i8]))

    def test_MplsTe(self):

        te = Te()
        self.assertSetEqual(set(te.devices), set([]))
        self.assertSetEqual(set(te.links), set([]))

        self.link.add_feature(te)
        self.link2.add_feature(te)
        self.link3.add_feature(te)
        self.link4.add_feature(te)
        self.assertCountEqual(te.devices, [self.dev1, self.dev2])
        self.assertSetEqual(
            set(te.links), set([self.link, self.link2, self.link3,
                                self.link4]))
        self.assertSetEqual(
            set(te.interfaces),
            set([
                self.i1, self.i2, self.i3, self.i4, self.i5, self.i6, self.i7,
                self.i8
            ]))

        out = te.build_config(apply=False)

        self.assertMultiLineEqual(
            str(out['PE1']), '\n'.join([
                'mpls traffic-eng tunnels',
                'interface GigabitEthernet0/0/1',
                ' mpls traffic-eng tunnels',
                ' exit',
                'interface GigabitEthernet0/0/3',
                ' mpls traffic-eng tunnels',
                ' exit',
                'interface GigabitEthernet0/0/5',
                ' mpls traffic-eng tunnels',
                ' exit',
                'interface GigabitEthernet0/0/7',
                ' mpls traffic-eng tunnels',
                ' exit',
            ]))

        self.assertMultiLineEqual(
            str(out['PE2']), '\n'.join([
                'mpls traffic-eng tunnels',
                'interface GigabitEthernet0/0/2',
                ' mpls traffic-eng tunnels',
                ' exit',
                'interface GigabitEthernet0/0/4',
                ' mpls traffic-eng tunnels',
                ' exit',
                'interface GigabitEthernet0/0/6',
                ' mpls traffic-eng tunnels',
                ' exit',
                'interface GigabitEthernet0/0/8',
                ' mpls traffic-eng tunnels',
                ' exit',
            ]))

        out = te.build_unconfig(apply=False)

        self.assertMultiLineEqual(
            str(out['PE1']), '\n'.join([
                'default mpls traffic-eng tunnels',
                'interface GigabitEthernet0/0/1',
                ' default mpls traffic-eng tunnels',
                ' exit',
                'interface GigabitEthernet0/0/3',
                ' default mpls traffic-eng tunnels',
                ' exit',
                'interface GigabitEthernet0/0/5',
                ' default mpls traffic-eng tunnels',
                ' exit',
                'interface GigabitEthernet0/0/7',
                ' default mpls traffic-eng tunnels',
                ' exit',
            ]))

        self.assertMultiLineEqual(
            str(out['PE2']), '\n'.join([
                'default mpls traffic-eng tunnels',
                'interface GigabitEthernet0/0/2',
                ' default mpls traffic-eng tunnels',
                ' exit',
                'interface GigabitEthernet0/0/4',
                ' default mpls traffic-eng tunnels',
                ' exit',
                'interface GigabitEthernet0/0/6',
                ' default mpls traffic-eng tunnels',
                ' exit',
                'interface GigabitEthernet0/0/8',
                ' default mpls traffic-eng tunnels',
                ' exit',
            ]))
Ejemplo n.º 14
0
    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)
Ejemplo n.º 15
0
    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',
            ]))
Ejemplo n.º 16
0
class test_te(unittest.TestCase):
    def setUp(self):
        self.tb = Genie.testbed = Testbed()
        self.dev1 = Device(testbed=self.tb, name='PE1', os='iosxr')
        self.dev2 = Device(testbed=self.tb, name='PE2', os='iosxr')
        self.i1 = Interface(name='GigabitEthernet0/0/0/1', device=self.dev1)
        self.i2 = Interface(name='GigabitEthernet0/0/0/2', device=self.dev2)
        self.i3 = Interface(name='GigabitEthernet0/0/0/3', device=self.dev1)
        self.i4 = Interface(name='GigabitEthernet0/0/0/4', device=self.dev2)
        self.i5 = Interface(name='GigabitEthernet0/0/0/5', device=self.dev1)
        self.i6 = Interface(name='GigabitEthernet0/0/0/6', device=self.dev2)
        self.i7 = Interface(name='GigabitEthernet0/0/0/7', device=self.dev1)
        self.i8 = Interface(name='GigabitEthernet0/0/0/8', device=self.dev2)
        self.link = Link(name='1_2_1', testbed=self.tb)
        self.link.connect_interface(interface=self.i1)
        self.link.connect_interface(interface=self.i2)
        self.link2 = Link(name='1_2_2', testbed=self.tb)
        self.link2.connect_interface(interface=self.i3)
        self.link2.connect_interface(interface=self.i4)
        self.link3 = Link(name='1_2_3', testbed=self.tb)
        self.link3.connect_interface(interface=self.i5)
        self.link3.connect_interface(interface=self.i6)
        self.link4 = Link(name='1_2_4', testbed=self.tb)
        self.link4.connect_interface(interface=self.i7)
        self.link4.connect_interface(interface=self.i8)
        self.assertSetEqual(set(self.link.find_interfaces()),
                            set([self.i1, self.i2]))
        self.assertSetEqual(set(self.dev1.find_interfaces()),
                            set([self.i1, self.i3, self.i5, self.i7]))
        self.assertSetEqual(set(self.dev2.find_interfaces()),
                            set([self.i2, self.i4, self.i6, self.i8]))

    def test_MplsTe(self):

        te = Te()
        self.assertSetEqual(set(te.devices), set([]))
        self.assertSetEqual(set(te.links), set([]))

        if 0:
            print("before")
            print(te.devices)
            print(te.links)
            print(te.interfaces)

        self.link.add_feature(te)
        self.link2.add_feature(te)
        self.link3.add_feature(te)
        self.link4.add_feature(te)
        self.assertCountEqual(te.devices, [self.dev1, self.dev2])
        self.assertSetEqual(
            set(te.links), set([self.link, self.link2, self.link3,
                                self.link4]))
        self.assertSetEqual(
            set(te.interfaces),
            set([
                self.i1, self.i2, self.i3, self.i4, self.i5, self.i6, self.i7,
                self.i8
            ]))

        if 0:
            print("after")
            print(te.links)
            print(te.devices)
            print(te.interfaces)

        te.log_events_preemption = True
        te.log_events_frr_protection = True
        te.device_attr['PE1'].log_events_frr_protection_type = 'backup-tunnel'
        te.device_attr['PE2'].log_events_frr_protection_type = 'primary-lsp'
        te.device_attr[
            'PE2'].log_events_frr_protection_primary_lsp_type = 'active-state'
        te.srlg_admin_weight = 20000
        te.backup_auto_tun_tunid_min = 210
        te.backup_auto_tun_tunid_max = 600
        te.auto_tun_backup_affinity_ignore = True
        te.affinity_map_val_dict['RED'] = "0x1"
        te.soft_preempt_timeout = 5
        te.reoptimize_delay_cleanup = 10
        te.reoptimize_delay_install = 1
        te.flooding_threshold_up = 1
        te.flooding_threshold_down = 1

        te.p2mp_auto_tun_tunid_min = 100
        te.p2mp_auto_tun_tunid_max = 200
        te.device_attr['PE1'].p2mp_auto_tun_tunid_min = 200
        te.device_attr['PE1'].p2mp_auto_tun_tunid_max = 300
        te.auto_tun_backup_affinity_ignore = True
        te.auto_tun_backup_timers_rem_unused = 100
        te.auto_tun_backup_attr_set = "backup"

        te.device_attr['PE1'].interface_attr[
            self.i1].auto_tun_backup_exclude_srlg = True
        te.device_attr['PE1'].interface_attr[
            self.i3].auto_tun_backup_exclude_srlg = True
        te.device_attr['PE1'].interface_attr[
            self.i3].auto_tun_backup_exclude_srlg_type = 'preferred'
        te.device_attr['PE1'].interface_attr[
            self.i5].auto_tun_backup_exclude_srlg = True
        te.device_attr['PE1'].interface_attr[
            self.i5].auto_tun_backup_exclude_srlg_type = 'weighted'
        te.device_attr['PE1'].affinity_map_val_dict = {}
        te.device_attr['PE1'].affinity_map_val_dict['RED'] = "0x2"

        te.device_attr['PE2'].affinity_map_bitpos_dict = {}
        te.device_attr['PE2'].affinity_map_bitpos_dict['BLUE'] = 94
        te.device_attr['PE2'].affinity_map_bitpos_dict['EDGE'] = 27
        te.device_attr['PE2'].affinity_map_bitpos_dict['PINK'] = 95
        te.device_attr['PE2'].affinity_map_bitpos_dict['GREEN'] = 91
        te.device_attr['PE2'].affinity_map_bitpos_dict['METRO'] = 29

        out = te.build_config(apply=False)
        self.maxDiff = None
        self.assertCountEqual(out.keys(), ['PE1', 'PE2'])
        self.assertMultiLineEqual(
            str(out['PE1']), '\n'.join([
                'mpls traffic-eng',
                ' auto-tunnel backup affinity ignore',
                ' auto-tunnel backup timers removal unused 100',
                ' auto-tunnel backup tunnel-id min 210 max 600',
                ' auto-tunnel p2mp tunnel-id min 200 max 300',
                ' logging events preemption',
                ' logging events frr-protection backup-tunnel',
                ' reoptimize timers delay cleanup 10',
                ' reoptimize timers delay installation 1',
                ' flooding threshold up 1 down 1',
                ' affinity-map RED 0x2',
                ' srlg admin-weight 20000',
                ' soft-preemption timeout 5',
                ' interface GigabitEthernet0/0/0/1',
                '  auto-tunnel backup attribute-set backup',
                '  auto-tunnel backup exclude srlg',
                '  exit',
                ' interface GigabitEthernet0/0/0/3',
                '  auto-tunnel backup attribute-set backup',
                '  auto-tunnel backup exclude srlg preferred',
                '  exit',
                ' interface GigabitEthernet0/0/0/5',
                '  auto-tunnel backup attribute-set backup',
                '  auto-tunnel backup exclude srlg weighted',
                '  exit',
                ' interface GigabitEthernet0/0/0/7',
                '  auto-tunnel backup attribute-set backup',
                '  exit',
                ' exit',
            ]))

        if 1:
            self.assertMultiLineEqual(
                str(out['PE2']), '\n'.join([
                    'mpls traffic-eng',
                    ' auto-tunnel backup affinity ignore',
                    ' auto-tunnel backup timers removal unused 100',
                    ' auto-tunnel backup tunnel-id min 210 max 600',
                    ' auto-tunnel p2mp tunnel-id min 100 max 200',
                    ' logging events preemption',
                    ' logging events frr-protection primary-lsp active-state',
                    ' reoptimize timers delay cleanup 10',
                    ' reoptimize timers delay installation 1',
                    ' flooding threshold up 1 down 1',
                    ' affinity-map BLUE bit-position 94',
                    ' affinity-map EDGE bit-position 27',
                    ' affinity-map GREEN bit-position 91',
                    ' affinity-map METRO bit-position 29',
                    ' affinity-map PINK bit-position 95',
                    ' affinity-map RED 0x1',
                    ' srlg admin-weight 20000',
                    ' soft-preemption timeout 5',
                    ' interface GigabitEthernet0/0/0/2',
                    '  auto-tunnel backup attribute-set backup',
                    '  exit',
                    ' interface GigabitEthernet0/0/0/4',
                    '  auto-tunnel backup attribute-set backup',
                    '  exit',
                    ' interface GigabitEthernet0/0/0/6',
                    '  auto-tunnel backup attribute-set backup',
                    '  exit',
                    ' interface GigabitEthernet0/0/0/8',
                    '  auto-tunnel backup attribute-set backup',
                    '  exit',
                    ' exit',
                ]))

    def test_UnnumInterfaces(self):
        # Test unnum interface output
        te = Te()
        self.link.add_feature(te)

        te.ipv4_unnum_interfaces = {self.i1, self.i2, self.i3, self.i4}

        out = te.build_config(apply=False)
        self.assertRegex(
            str(out['PE1']),
            'ipv4 unnumbered mpls traffic-eng GigabitEthernet0/0/0/1')
        self.assertRegex(
            str(out['PE1']),
            'ipv4 unnumbered mpls traffic-eng GigabitEthernet0/0/0/3')

        self.assertRegex(
            str(out['PE2']),
            'ipv4 unnumbered mpls traffic-eng GigabitEthernet0/0/0/2')
        self.assertRegex(
            str(out['PE2']),
            'ipv4 unnumbered mpls traffic-eng GigabitEthernet0/0/0/4')

    def test_Srlg(self):
        srlg = Srlg()
        self.dev1.add_feature(srlg)
        self.dev2.add_feature(srlg)
        srlg.name_value_dict['R13'] = 10
        srlg.name_value_dict['R11'] = 20
        srlg.name_value_dict['R23'] = 30
        srlg.name_value_dict['R25'] = 40
        srlg.name_value_dict['R34'] = 50

        # if per-device dict is not initialized, base class dict will be over-written
        srlg.device_attr['PE1'].name_value_dict = {}
        srlg.device_attr['PE1'].name_value_dict['R13'] = 10
        srlg.device_attr['PE1'].name_value_dict['R11'] = 20
        srlg.device_attr['PE1'].name_value_dict['R23'] = 30
        srlg.device_attr['PE1'].name_value_dict['R25'] = 40
        srlg.device_attr['PE1'].name_value_dict['R34'] = 50
        srlg.device_attr['PE1'].name_value_dict['R35'] = 60
        srlg.device_attr['PE1'].name_value_dict['R45'] = 70

        srlg.device_attr['PE1'].interface_attr[self.i1].intf_name = 'R13'
        srlg.device_attr['PE1'].interface_attr[self.i3].intf_name = 'R11'
        srlg.device_attr['PE1'].interface_attr[self.i5].intf_name = 'R23'

        out = srlg.build_config(apply=False)
        self.assertCountEqual(out.keys(), ['PE1', 'PE2'])
        self.assertMultiLineEqual(
            str(out['PE1']), '\n'.join([
                'srlg',
                ' name R11 value 20',
                ' name R13 value 10',
                ' name R23 value 30',
                ' name R25 value 40',
                ' name R34 value 50',
                ' name R35 value 60',
                ' name R45 value 70',
                ' interface GigabitEthernet0/0/0/1',
                '  name R13',
                '  exit',
                ' interface GigabitEthernet0/0/0/3',
                '  name R11',
                '  exit',
                ' interface GigabitEthernet0/0/0/5',
                '  name R23',
                '  exit',
                ' exit',
            ]))
        self.assertMultiLineEqual(
            str(out['PE2']), '\n'.join([
                'srlg',
                ' name R11 value 20',
                ' name R13 value 10',
                ' name R23 value 30',
                ' name R25 value 40',
                ' name R34 value 50',
                ' exit',
            ]))
Ejemplo n.º 17
0
    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',
            ]))
Ejemplo n.º 18
0
    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',
            ]))
Ejemplo n.º 19
0
class test_ldp(unittest.TestCase):
    def setUp(self):
        self.maxDiff = None
        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.assertSetEqual(set(self.link.find_interfaces()),
                            set([self.i1, self.i2]))
        self.assertSetEqual(set(self.dev1.find_interfaces()),
                            set([self.i1, self.i3, self.i5, self.i7]))
        self.assertSetEqual(set(self.dev2.find_interfaces()),
                            set([self.i2, self.i4, self.i6, self.i8]))

    def test_01_interface_only(self):

        ldp = Ldp()
        self.assertSetEqual(set(ldp.devices), set([]))
        self.assertSetEqual(set(ldp.links), set([]))

        self.link.add_feature(ldp)
        self.link2.add_feature(ldp)
        self.link3.add_feature(ldp)
        self.link4.add_feature(ldp)
        self.assertCountEqual(ldp.devices, [self.dev1, self.dev2])
        self.assertSetEqual(
            set(ldp.links),
            set([self.link, self.link2, self.link3, self.link4]))
        self.assertSetEqual(
            set(ldp.interfaces),
            set([
                self.i1, self.i2, self.i3, self.i4, self.i5, self.i6, self.i7,
                self.i8
            ]))

        # ==Test interface-only config==
        out = ldp.build_config(apply=False)
        if 1:
            self.assertRegex(str(out['PE1']), 'interface GigabitEthernet0/0/1')
            self.assertRegex(str(out['PE1']), 'interface GigabitEthernet0/0/3')
            self.assertRegex(str(out['PE1']), 'interface GigabitEthernet0/0/5')
            self.assertRegex(str(out['PE1']), 'interface GigabitEthernet0/0/7')
            self.assertRegex(str(out['PE2']), 'interface GigabitEthernet0/0/2')
            self.assertRegex(str(out['PE2']), 'interface GigabitEthernet0/0/4')
            self.assertRegex(str(out['PE2']), 'interface GigabitEthernet0/0/6')
            self.assertRegex(str(out['PE2']), 'interface GigabitEthernet0/0/8')

    def test_1_top_level(self):

        acl1 = AccessList(name='1')
        acl2 = AccessList(name='2')
        acl3 = AccessList(name='3')
        acl4 = AccessList(name='4')
        acl5 = AccessList(name='5')
        acl6 = AccessList(name='6')
        acl7 = AccessList(name='7')
        acl8 = AccessList(name='8')
        acl9 = AccessList(name='9')
        acl11 = AccessList(name='11')
        acl22 = AccessList(name='22')
        acl33 = AccessList(name='33')
        acl44 = AccessList(name='44')

        ldp = Ldp()
        self.link.add_feature(ldp)

        # ==Test top-level config==
        ldp.hello_holdtime = 100
        ldp.hello_interval = 200
        ldp.targeted_hello_accept = True
        ldp.gr = True
        ldp.gr_fwdstate_holdtime = 60
        ldp.nsr = True
        ldp.device_attr['PE1'].session_holdtime = 444
        ldp.session_protection = True
        ldp.session_protection_dur = 222
        ldp.device_attr['PE2'].session_protection_dur = 333
        ldp.session_protection_for_acl = acl1

        out = ldp.build_config(apply=False)
        if 1:
            self.assertCountEqual(out.keys(), ['PE1', 'PE2'])
            self.assertMultiLineEqual(
                str(out['PE1']), '\n'.join([
                    'mpls label protocol ldp',
                    'mpls ip',
                    'mpls ldp nsr',
                    'mpls ldp graceful-restart',
                    'mpls ldp graceful-restart timers forwarding-holding 60',
                    'mpls ldp discovery hello interval 200',
                    'mpls ldp discovery hello holdtime 100',
                    'mpls ldp discovery targeted-hello accept',
                    'mpls ldp session protection for 1 222',
                    'interface GigabitEthernet0/0/1',
                    ' mpls ip',
                    ' exit',
                ]))

            self.assertMultiLineEqual(
                str(out['PE2']), '\n'.join([
                    'mpls label protocol ldp',
                    'mpls ip',
                    'mpls ldp nsr',
                    'mpls ldp graceful-restart',
                    'mpls ldp graceful-restart timers forwarding-holding 60',
                    'mpls ldp discovery hello interval 200',
                    'mpls ldp discovery hello holdtime 100',
                    'mpls ldp discovery targeted-hello accept',
                    'mpls ldp session protection for 1 333',
                    'interface GigabitEthernet0/0/2',
                    ' mpls ip',
                    ' exit',
                ]))

        if 1:
            # set the per-attr variables that are inherited by VRF
            ldp.device_attr['PE1'].vrf_attr['default'].router_id = self.i1
            ldp.device_attr['PE2'].vrf_attr['default'].router_id = self.i2

            out = ldp.build_config(apply=False)
            self.assertRegex(str(out['PE1']), 'router-id GigabitEthernet0/0/1')

            self.assertRegex(str(out['PE2']), 'router-id GigabitEthernet0/0/2')

        # Check unconfig - <nsr> config filter
        out = ldp.build_unconfig(apply=False, attributes='device_attr__*__nsr')
        if 1:
            self.assertRegex(str(out['PE1']), 'no mpls ldp nsr')
            self.assertRegex(str(out['PE2']), 'no mpls ldp nsr')

        # Check unconfig - <gr> config filter=
        out = ldp.build_unconfig(apply=False, attributes='device_attr__*__gr')
        if 1:
            self.assertRegex(str(out['PE1']), 'no mpls ldp graceful-restart')
            self.assertRegex(str(out['PE2']), 'no mpls ldp graceful-restart')

    def test_2_per_vrf(self):

        acl1 = AccessList(name='1')
        acl2 = AccessList(name='2')
        acl3 = AccessList(name='3')
        acl4 = AccessList(name='4')
        acl5 = AccessList(name='5')
        acl6 = AccessList(name='6')
        acl7 = AccessList(name='7')
        acl8 = AccessList(name='8')
        acl9 = AccessList(name='9')
        acl11 = AccessList(name='11')
        acl22 = AccessList(name='22')
        acl33 = AccessList(name='33')
        acl44 = AccessList(name='44')

        ldp = Ldp()
        self.link.add_feature(ldp)
        vrf = Vrf(name='vrf1')
        ldp.add_force_vrf(vrf)
        vrf2 = Vrf(name='vrf2')
        ldp.add_force_vrf(vrf2)
        ldp.device_attr['PE1'].router_id = self.i1
        ldp.device_attr['PE2'].router_id = self.i2
        ldp.device_attr['PE1'].vrf_attr['vrf1'].router_id = self.i3
        ldp.device_attr['PE2'].vrf_attr['vrf1'].router_id = self.i4

        # Test per vrf config

        # Check vrf config - full config
        out = ldp.build_config(apply=False)

        self.assertMultiLineEqual(
            str(out['PE1']), '\n'.join([
                'mpls label protocol ldp',
                'mpls ip',
                'mpls ldp router-id GigabitEthernet0/0/1',
                'mpls ldp router-id vrf vrf1 GigabitEthernet0/0/3',
                'interface GigabitEthernet0/0/1',
                ' mpls ip',
                ' exit',
            ]))

        self.assertMultiLineEqual(
            str(out['PE2']), '\n'.join([
                'mpls label protocol ldp',
                'mpls ip',
                'mpls ldp router-id GigabitEthernet0/0/2',
                'mpls ldp router-id vrf vrf1 GigabitEthernet0/0/4',
                'interface GigabitEthernet0/0/2',
                ' mpls ip',
                ' exit',
            ]))

        # Test VRF unconfig
        out = ldp.build_unconfig(apply=False,
                                 attributes='device_attr__*__vrf_attr')
        self.assertTrue(
            'no mpls ldp router-id GigabitEthernet0/0/1' in str(out['PE1']))
        self.assertTrue(
            'no mpls ldp router-id GigabitEthernet0/0/2' in str(out['PE2']))
        self.assertTrue('no mpls ldp router-id vrf vrf1 GigabitEthernet0/0/3'
                        in str(out['PE1']))
        self.assertTrue('no mpls ldp router-id vrf vrf1 GigabitEthernet0/0/4'
                        in str(out['PE2']))

        out2 = ldp.build_config(apply=False,
                                attributes='device_attr__*__vrf_attr')
        self.assertTrue(
            'mpls ldp router-id GigabitEthernet0/0/1' in str(out2['PE1']))
        self.assertTrue(
            'mpls ldp router-id GigabitEthernet0/0/2' in str(out2['PE2']))
        self.assertTrue('mpls ldp router-id vrf vrf1 GigabitEthernet0/0/3' in
                        str(out2['PE1']))
        self.assertTrue('mpls ldp router-id vrf vrf1 GigabitEthernet0/0/4' in
                        str(out2['PE2']))

        # Check vrf config - vrf <vrf1> config filter
        out3 = ldp.build_config(apply=False,
                                attributes='device_attr__*__vrf_attr__vrf1')
        self.assertTrue('mpls ldp router-id vrf vrf1 GigabitEthernet0/0/3' in
                        str(out3['PE1']))
        self.assertTrue('mpls ldp router-id vrf vrf1 GigabitEthernet0/0/4' in
                        str(out3['PE2']))
        # interface output from default vrf should not be built
        self.assertNotRegex(str(out['PE1']), '(?s)interface Gig')

        # Check vrf unconfig - vrf <vrf1> config filter
        out = ldp.build_unconfig(apply=False,
                                 attributes='device_attr__*__vrf_attr__vrf1')
        self.assertEqual(
            str(out['PE1']),
            'no mpls ldp router-id vrf vrf1 GigabitEthernet0/0/3')
        self.assertEqual(
            str(out['PE2']),
            'no mpls ldp router-id vrf vrf1 GigabitEthernet0/0/4')

        # Check vrf unconfig - vrf <vrf1> config filter
        out = ldp.build_unconfig(
            apply=False, attributes='device_attr__*__vrf_attr__*__router_id')
        self.assertTrue(
            'no mpls ldp router-id GigabitEthernet0/0/1' in str(out['PE1']))
        self.assertTrue(
            'no mpls ldp router-id GigabitEthernet0/0/2' in str(out['PE2']))
        self.assertTrue('no mpls ldp router-id vrf vrf1 GigabitEthernet0/0/3'
                        in str(out['PE1']))
        self.assertTrue('no mpls ldp router-id vrf vrf1 GigabitEthernet0/0/4'
                        in str(out['PE2']))

        # Check vrf unconfig - vrf <vrf1> config filter after adding router-id to vrf2
        ldp.device_attr['PE2'].vrf_attr['vrf2'].router_id = self.i6
        out = ldp.build_unconfig(
            apply=False, attributes='device_attr__*__vrf_attr__*__router_id')
        self.assertTrue(
            'mpls ldp router-id GigabitEthernet0/0/1' in str(out['PE1']))
        self.assertTrue(
            'mpls ldp router-id GigabitEthernet0/0/2' in str(out['PE2']))
        self.assertTrue('mpls ldp router-id vrf vrf1 GigabitEthernet0/0/3' in
                        str(out['PE1']))
        self.assertTrue('mpls ldp router-id vrf vrf1 GigabitEthernet0/0/4' in
                        str(out['PE2']))
        self.assertTrue('mpls ldp router-id vrf vrf2 GigabitEthernet0/0/6' in
                        str(out['PE2']))

        # Check vrf config - vrf <vrf2> config filter
        out3 = ldp.build_config(apply=False,
                                attributes='device_attr__*__vrf_attr__vrf2')
        self.assertEqual(str(out3['PE2']),
                         'mpls ldp router-id vrf vrf2 GigabitEthernet0/0/6')

    def test_3_per_intf(self):

        acl1 = AccessList(name='1')
        acl2 = AccessList(name='2')
        acl3 = AccessList(name='3')
        acl4 = AccessList(name='4')
        acl5 = AccessList(name='5')
        acl6 = AccessList(name='6')
        acl7 = AccessList(name='7')
        acl8 = AccessList(name='8')
        acl9 = AccessList(name='9')
        acl11 = AccessList(name='11')
        acl22 = AccessList(name='22')
        acl33 = AccessList(name='33')
        acl44 = AccessList(name='44')

        ldp = Ldp()
        self.link.add_feature(ldp)
        self.link4.add_feature(ldp)

        ldp.hello_interval = 88
        ldp.device_attr['PE2'].hello_holdtime = 99

        # ==Test per interface config===
        out = ldp.build_config(apply=False)
        if 1:

            self.assertMultiLineEqual(
                str(out['PE1']), '\n'.join([
                    'mpls label protocol ldp',
                    'mpls ip',
                    'mpls ldp discovery hello interval 88',
                    'interface GigabitEthernet0/0/1',
                    ' mpls ip',
                    ' exit',
                    'interface GigabitEthernet0/0/7',
                    ' mpls ip',
                    ' exit',
                ]))

            self.assertMultiLineEqual(
                str(out['PE2']), '\n'.join([
                    'mpls label protocol ldp',
                    'mpls ip',
                    'mpls ldp discovery hello interval 88',
                    'mpls ldp discovery hello holdtime 99',
                    'interface GigabitEthernet0/0/2',
                    ' mpls ip',
                    ' exit',
                    'interface GigabitEthernet0/0/8',
                    ' mpls ip',
                    ' exit',
                ]))

        # Check intf unconfig - intf <GigabitEthernet0/0/0/8> config filter
        out = ldp.build_unconfig(
            apply=False,
            attributes='device_attr__*__interface_attr__GigabitEthernet0/0/8')
        self.assertMultiLineEqual(
            str(out['PE2']), '\n'.join([
                'interface GigabitEthernet0/0/8',
                ' no mpls ip',
                ' exit',
            ]))

    def test_4_per_neighbor(self):

        ldp = Ldp()
        self.link.add_feature(ldp)
        nbr1 = IPv4LsrNeighbor('1.2.3.4:0')
        nbr2 = IPv4LsrNeighbor('1.2.3.5:0')
        nbr3 = IPv4LsrNeighbor('1.2.3.6:0')

        ldp.device_attr['PE1'].password = '******'
        ldp.device_attr['PE2'].password = '******'
        ldp.device_attr['PE1'].vrf_attr['default'].neighbors = [
            nbr1, nbr2, nbr3
        ]
        ldp.device_attr['PE1'].vrf_attr['default'].neighbor_attr[
            nbr2].password = '******'
        ldp.device_attr['PE1'].vrf_attr['default'].neighbor_attr[
            nbr3].password = '******'

        # ==Test per neighbor config==
        out = ldp.build_config(apply=False)

        self.assertMultiLineEqual(
            str(out['PE1']), '\n'.join([
                'mpls label protocol ldp',
                'mpls ip',
                'mpls ldp neighbor 1.2.3.4 password password1',
                'mpls ldp neighbor 1.2.3.5 password blah',
                'mpls ldp neighbor 1.2.3.6 password 060506324F41',
                'interface GigabitEthernet0/0/1',
                ' mpls ip',
                ' exit',
            ]))

        self.assertMultiLineEqual(
            str(out['PE2']), '\n'.join([
                'mpls label protocol ldp',
                'mpls ip',
                'interface GigabitEthernet0/0/2',
                ' mpls ip',
                ' exit',
            ]))

        # Check nbr config - nbr <1.2.3.5:0'> config filter
        out = ldp.build_config(
            apply=False,
            attributes='device_attr__*__vrf_attr__*__neighbor_attr__1.2.3.5:0')
        self.assertMultiLineEqual(
            str(out['PE1']), '\n'.join([
                'mpls ldp neighbor 1.2.3.5 password blah',
            ]))

        out = ldp.build_unconfig(
            apply=False,
            attributes=
            'device_attr__*__vrf_attr__*__neighbor_attr__1.2.3.5:0__password')
        self.assertMultiLineEqual(
            str(out['PE1']), '\n'.join([
                'no mpls ldp neighbor 1.2.3.5 password blah',
            ]))

        out = ldp.build_unconfig(
            apply=False,
            attributes=
            'device_attr__*__vrf_attr__*__neighbor_attr__1.2.3.6:0__password')
        self.assertMultiLineEqual(
            str(out['PE1']), '\n'.join([
                'no mpls ldp neighbor 1.2.3.6 password 060506324F41',
            ]))

    def test_8_per_vrf_per_neighbor(self):

        ldp = Ldp()
        self.link.add_feature(ldp)
        vrf = Vrf(name='vrf1')
        ldp.add_force_vrf(vrf)
        nbr1 = IPv4LsrNeighbor('1.2.3.4:0')
        nbr2 = IPv4LsrNeighbor('1.2.3.5:0')
        nbr3 = IPv4LsrNeighbor('1.2.3.6:0')

        ldp.device_attr['PE1'].vrf_attr['vrf1'].neighbors = [nbr1, nbr2, nbr3]
        ldp.device_attr['PE1'].vrf_attr['vrf1'].neighbor_attr[
            '1.2.3.5:0'].password = '******'
        ldp.device_attr['PE1'].vrf_attr['vrf1'].neighbor_attr[
            '1.2.3.6:0'].password = '******'

        # ==Test per vrf per neighbor config==
        out = ldp.build_config(apply=False)

        self.assertMultiLineEqual(
            str(out['PE1']), '\n'.join([
                'mpls label protocol ldp',
                'mpls ip',
                'mpls ldp neighbor vrf vrf1 1.2.3.5 password blah22',
                'mpls ldp neighbor vrf vrf1 1.2.3.6 password 060506324F41',
                'interface GigabitEthernet0/0/1',
                ' mpls ip',
                ' exit',
            ]))
Ejemplo n.º 20
0
    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',
            ]))
Ejemplo n.º 21
0
class test_rsvp(TestCase):
    def setUp(self):
        tb = Genie.testbed = Testbed()
        self.dev1 = Device(testbed=tb, name='PE1', os='iosxr')
        self.dev2 = Device(testbed=tb, name='PE2', os='iosxr')
        self.i1 = Interface(name='GigabitEthernet0/0/0/1', device=self.dev1)
        self.i2 = Interface(name='GigabitEthernet0/0/0/2', device=self.dev2)
        self.i3 = Interface(name='GigabitEthernet0/0/0/3', device=self.dev1)
        self.i4 = Interface(name='GigabitEthernet0/0/0/4', device=self.dev2)
        self.i5 = Interface(name='GigabitEthernet0/0/0/5', device=self.dev1)
        self.i6 = Interface(name='GigabitEthernet0/0/0/6', device=self.dev2)
        self.i7 = Interface(name='GigabitEthernet0/0/0/7', device=self.dev1)
        self.i8 = Interface(name='GigabitEthernet0/0/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_0_interface_only(self):

        rsvp = Rsvp()
        self.assertCountEqual(rsvp.devices, [])
        self.assertCountEqual(rsvp.links, [])
        self.assertCountEqual(rsvp.interfaces, [])

        self.link.add_feature(rsvp)
        self.link2.add_feature(rsvp)
        self.link3.add_feature(rsvp)
        self.link4.add_feature(rsvp)
        self.assertCountEqual(rsvp.devices, [self.dev1, self.dev2])
        self.assertCountEqual(rsvp.links,
                              [self.link, self.link2, self.link3, self.link4])
        self.assertCountEqual(rsvp.interfaces, [
            self.i1, self.i2, self.i3, self.i4, self.i5, self.i6, self.i7,
            self.i8
        ])

        rsvp.device_attr[self.i1.device].interface_attr[
            self.i1].rdm_bw_total = None
        rsvp.device_attr[self.i1.device].interface_attr[
            self.i3].rdm_bw_cli_rdm_kw = False
        rsvp.device_attr[self.i1.device].interface_attr[
            self.i5].rdm_bw_cli_style = Rsvp.RdmBwCliStyle.bc0_bc1
        rsvp.device_attr[self.i1.device].interface_attr[
            self.i7].rdm_bw_cli_style = Rsvp.RdmBwCliStyle.global_subpool
        cfgs = rsvp.build_config(apply=False)
        self.assertMultiLineDictEqual(
            cfgs, {
                self.dev1.name:
                '\n'.join([
                    'rsvp',
                    ' interface GigabitEthernet0/0/0/1',
                    '  exit',
                    ' interface GigabitEthernet0/0/0/3',
                    '  bandwidth 20000 20000',
                    '  exit',
                    ' interface GigabitEthernet0/0/0/5',
                    '  bandwidth rdm bc0 20000 20000',
                    '  exit',
                    ' interface GigabitEthernet0/0/0/7',
                    '  bandwidth rdm global-pool 20000 20000',
                    '  exit',
                    ' exit',
                ]),
                self.dev2.name:
                '\n'.join([
                    'rsvp',
                    ' interface GigabitEthernet0/0/0/2',
                    '  bandwidth rdm 20000 20000',
                    '  exit',
                    ' interface GigabitEthernet0/0/0/4',
                    '  bandwidth rdm 20000 20000',
                    '  exit',
                    ' interface GigabitEthernet0/0/0/6',
                    '  bandwidth rdm 20000 20000',
                    '  exit',
                    ' interface GigabitEthernet0/0/0/8',
                    '  bandwidth rdm 20000 20000',
                    '  exit',
                    ' exit',
                ]),
            })
Ejemplo n.º 22
0
    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, ()))
Ejemplo n.º 23
0
class test_isis(unittest.TestCase):
    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_IsisGlobal(self):
        isis = Isis("core")
        self.link.add_feature(isis)

        # Global ISIS config
        isis.nsr = True

        # override default for both devices
        isis.is_type = Isis.IsType.level_1
        isis.device_attr['PE1'].is_type = Isis.IsType.level_1_2
        isis.device_attr['PE2'].is_type = Isis.IsType.level_2

        # use no default
        isis.device_attr['PE1'].nsf = Isis.Nsf.ietf
        isis.device_attr['PE2'].nsf = Isis.Nsf.cisco

        # override default for one device
        val = 1
        isis.device_attr['PE1'].net_id = "00.0000.0000.000{}.00".format(val)
        val += 1
        isis.device_attr['PE2'].net_id = "00.0000.0000.000{}.00".format(val)

        cfg1 = isis.build_config(apply=False)

        self.assertCountEqual(cfg1.keys(), ['PE1', 'PE2'])
        self.assertMultiLineEqual(
            str(cfg1['PE1']), '\n'.join([
                'router isis core',
                ' is-type level-1-2',
                ' nsf ietf',
                ' nsr',
                ' net 00.0000.0000.0001.00',
                ' exit',
                'interface GigabitEthernet0/0/1',
                ' ip router isis core',
                ' exit',
            ]))
        self.assertMultiLineEqual(
            str(cfg1['PE2']), '\n'.join([
                'router isis core',
                ' is-type level-2-only',
                ' nsf cisco',
                ' nsr',
                ' net 00.0000.0000.0002.00',
                ' exit',
                'interface GigabitEthernet0/0/2',
                ' ip router isis core',
                ' exit',
            ]))

        uncfg1 = isis.build_unconfig(apply=False)

        self.assertCountEqual(uncfg1.keys(), ['PE1', 'PE2'])
        self.assertMultiLineEqual(
            str(uncfg1['PE1']), '\n'.join([
                'no router isis core',
                'interface GigabitEthernet0/0/1',
                ' no ip router isis core',
                ' exit',
            ]))
        self.assertMultiLineEqual(
            str(uncfg1['PE2']), '\n'.join([
                'no router isis core',
                'interface GigabitEthernet0/0/2',
                ' no ip router isis core',
                ' exit',
            ]))

        partial_cfg1 = isis.build_config(apply=False,
                                         attributes='device_attr__PE1__nsf')
        self.assertCountEqual(partial_cfg1.keys(), ['PE1'])
        self.assertMultiLineEqual(
            str(partial_cfg1['PE1']), '\n'.join([
                'router isis core',
                ' nsf ietf',
                ' exit',
            ]))

    def test_IsisPerAddrFamily(self):

        isis = Isis("core")
        self.link.add_feature(isis)

        val = 1
        isis.device_attr['PE1'].net_id = "00.0000.0000.000{}.00".format(val)
        val += 1
        isis.device_attr['PE2'].net_id = "00.0000.0000.000{}.00".format(val)

        # per address family ISIS
        isis.device_attr['PE1'].address_family_attr[
            'ipv4 unicast'].metric_style = "wide"
        isis.device_attr['PE1'].address_family_attr[
            'ipv4 unicast'].mpls_te_level = Isis.IsType.level_1
        isis.device_attr['PE1'].address_family_attr[
            'ipv4 unicast'].mpls_te_rtrid = self.intf1

        isis.device_attr['PE2'].address_family_attr[
            'ipv4 unicast'].metric_style = "narrow"
        isis.device_attr['PE2'].address_family_attr[
            'ipv4 unicast'].mpls_te_level = Isis.IsType.level_2
        isis.device_attr['PE2'].address_family_attr[
            'ipv4 unicast'].mpls_te_rtrid = self.intf2

        cfg1 = isis.build_config(apply=False)

        self.assertMultiLineEqual(
            str(cfg1['PE1']), '\n'.join([
                'router isis core',
                ' net 00.0000.0000.0001.00',
                ' metric-style wide',
                ' mpls traffic-eng level-1',
                ' mpls traffic-eng router-id GigabitEthernet0/0/1',
                ' exit',
                'interface GigabitEthernet0/0/1',
                ' ip router isis core',
                ' exit',
            ]))
        self.assertMultiLineEqual(
            str(cfg1['PE2']), '\n'.join([
                'router isis core',
                ' net 00.0000.0000.0002.00',
                ' metric-style narrow',
                ' mpls traffic-eng level-2',
                ' mpls traffic-eng router-id GigabitEthernet0/0/2',
                ' exit',
                'interface GigabitEthernet0/0/2',
                ' ip router isis core',
                ' exit',
            ]))

        isis.address_families = set(
            [AddressFamily.ipv4_unicast, AddressFamily.ipv6_unicast])
        isis.device_attr['PE1'].address_family_attr[
            'ipv6 unicast'].metric_style = "wide"
        isis.device_attr['PE2'].address_family_attr[
            'ipv6 unicast'].metric_style = "narrow"

        cfg2 = isis.build_config(apply=False)

        self.assertMultiLineEqual(
            str(cfg2['PE1']), '\n'.join([
                'router isis core',
                ' net 00.0000.0000.0001.00',
                ' metric-style wide',
                ' mpls traffic-eng level-1',
                ' mpls traffic-eng router-id GigabitEthernet0/0/1',
                ' address-family ipv6 unicast',
                '  metric-style wide',
                '  exit',
                ' exit',
                'interface GigabitEthernet0/0/1',
                ' ip router isis core',
                ' ipv6 router isis core',
                ' exit',
            ]))

        self.assertMultiLineEqual(
            str(cfg2['PE2']), '\n'.join([
                'router isis core',
                ' net 00.0000.0000.0002.00',
                ' metric-style narrow',
                ' mpls traffic-eng level-2',
                ' mpls traffic-eng router-id GigabitEthernet0/0/2',
                ' address-family ipv6 unicast',
                '  metric-style narrow',
                '  exit',
                ' exit',
                'interface GigabitEthernet0/0/2',
                ' ip router isis core',
                ' ipv6 router isis core',
                ' exit',
            ]))

        uncfg2 = isis.build_unconfig(apply=False)
        self.assertMultiLineEqual(
            str(uncfg2['PE1']), '\n'.join([
                'no router isis core',
                'interface GigabitEthernet0/0/1',
                ' no ip router isis core',
                ' no ipv6 router isis core',
                ' exit',
            ]))

        self.assertMultiLineEqual(
            str(uncfg2['PE2']), '\n'.join([
                'no router isis core',
                'interface GigabitEthernet0/0/2',
                ' no ip router isis core',
                ' no ipv6 router isis core',
                ' exit',
            ]))

        partial_uncfg2 = isis.build_unconfig(
            apply=False, attributes='device_attr__*__address_family_attr__*')

        self.assertMultiLineEqual(
            str(partial_uncfg2['PE1']), '\n'.join([
                'router isis core',
                ' no metric-style wide',
                ' no mpls traffic-eng level-1',
                ' no mpls traffic-eng router-id GigabitEthernet0/0/1',
                ' no address-family ipv4 unicast',
                ' no address-family ipv6 unicast',
                ' exit',
            ]))

        self.assertMultiLineEqual(
            str(partial_uncfg2['PE2']), '\n'.join([
                'router isis core',
                ' no metric-style narrow',
                ' no mpls traffic-eng level-2',
                ' no mpls traffic-eng router-id GigabitEthernet0/0/2',
                ' no address-family ipv4 unicast',
                ' no address-family ipv6 unicast',
                ' exit',
            ]))

        partial_cfg21 = isis.build_config(
            apply=False,
            attributes=
            'device_attr__PE1__address_family_attr__ipv4 unicast__metric_style'
        )
        self.assertMultiLineEqual(
            str(partial_cfg21['PE1']), '\n'.join([
                'router isis core',
                ' metric-style wide',
                ' exit',
            ]))

        partial_uncfg21 = isis.build_unconfig(
            apply=False,
            attributes=
            'device_attr__PE1__address_family_attr__ipv4 unicast__metric_style'
        )
        self.assertMultiLineEqual(
            str(partial_uncfg21['PE1']), '\n'.join([
                'router isis core',
                ' no metric-style wide',
                ' exit',
            ]))

        partial_cfg22 = isis.build_config(
            apply=False,
            attributes=
            'device_attr__PE1__address_family_attr__ipv6 unicast__metric_style'
        )
        self.assertMultiLineEqual(
            str(partial_cfg22['PE1']), '\n'.join([
                'router isis core',
                ' address-family ipv6 unicast',
                '  metric-style wide',
                '  exit',
                ' exit',
            ]))

        partial_uncfg22 = isis.build_unconfig(
            apply=False,
            attributes=
            'device_attr__PE1__address_family_attr__ipv6 unicast__metric_style'
        )
        self.assertMultiLineEqual(
            str(partial_uncfg22['PE1']), '\n'.join([
                'router isis core',
                ' address-family ipv6 unicast',
                '  no metric-style wide',
                '  exit',
                ' exit',
            ]))

    def test_IsisPerInterface(self):

        isis = Isis("core")
        self.link.add_feature(isis)
        for intf_iter in self.link.interfaces:
            intf_iter.add_feature(isis)

        val = 1
        isis.device_attr['PE1'].net_id = "00.0000.0000.000{}.00".format(val)
        val += 1
        isis.device_attr['PE2'].net_id = "00.0000.0000.000{}.00".format(val)

        # per interface ISIS
        isis.device_attr['PE1'].interface_attr[self.intf1].passive = True
        isis.device_attr['PE1'].interface_attr[self.intf1].metric = 20
        isis.device_attr['PE2'].interface_attr[
            self.intf2].point_to_point = True

        cfg1 = isis.build_config(apply=False)

        self.assertMultiLineEqual(
            str(cfg1['PE1']), '\n'.join([
                'router isis core',
                ' net 00.0000.0000.0001.00',
                ' passive-interface GigabitEthernet0/0/1',
                ' exit',
                'interface GigabitEthernet0/0/1',
                ' ip router isis core',
                ' isis metric 20',
                ' exit',
            ]))
        self.assertMultiLineEqual(
            str(cfg1['PE2']), '\n'.join([
                'router isis core',
                ' net 00.0000.0000.0002.00',
                ' exit',
                'interface GigabitEthernet0/0/2',
                ' ip router isis core',
                ' isis network point-to-point',
                ' exit',
            ]))

        isis.address_families = set(
            [AddressFamily.ipv4_unicast, AddressFamily.ipv6_unicast])

        cfg2 = isis.build_config(apply=False)

        self.assertMultiLineEqual(
            str(cfg2['PE1']), '\n'.join([
                'router isis core',
                ' net 00.0000.0000.0001.00',
                ' passive-interface GigabitEthernet0/0/1',
                ' exit',
                'interface GigabitEthernet0/0/1',
                ' ip router isis core',
                ' ipv6 router isis core',
                ' isis metric 20',
                ' exit',
            ]))
        self.assertMultiLineEqual(
            str(cfg2['PE2']), '\n'.join([
                'router isis core',
                ' net 00.0000.0000.0002.00',
                ' exit',
                'interface GigabitEthernet0/0/2',
                ' ip router isis core',
                ' ipv6 router isis core',
                ' isis network point-to-point',
                ' exit',
            ]))

        partial_cfg21 = isis.build_config(
            apply=False,
            attributes='device_attr__*__interface_attr__*__metric')
        self.assertMultiLineEqual(
            str(partial_cfg21['PE1']), '\n'.join([
                'interface GigabitEthernet0/0/1',
                ' isis metric 20',
                ' exit',
            ]))

        partial_cfg22 = isis.build_config(
            apply=False,
            attributes=
            'device_attr__*__interface_attr__*__address_family_attr__ipv6 unicast'
        )
        self.assertMultiLineEqual(
            str(partial_cfg22['PE1']), '\n'.join([
                'interface GigabitEthernet0/0/1',
                ' ipv6 router isis core',
                ' exit',
            ]))
Ejemplo n.º 24
0
class test_vrf(TestCase):
    def setUp(self):
        tb = Genie.testbed = Testbed()
        self.dev1 = Device(testbed=tb, name='PE1', os='iosxr')
        self.dev2 = Device(testbed=tb, name='PE2', os='iosxr')
        self.i1 = Interface(name='GigabitEthernet0/0/0/1', device=self.dev1)
        self.i2 = Interface(name='GigabitEthernet0/0/0/2', device=self.dev2)
        self.i3 = Interface(name='GigabitEthernet0/0/0/3', device=self.dev1)
        self.i4 = Interface(name='GigabitEthernet0/0/0/4', device=self.dev2)
        self.i5 = Interface(name='GigabitEthernet0/0/0/5', device=self.dev1)
        self.i6 = Interface(name='GigabitEthernet0/0/0/6', device=self.dev2)
        self.i7 = Interface(name='GigabitEthernet0/0/0/7', device=self.dev1)
        self.i8 = Interface(name='GigabitEthernet0/0/0/8', device=self.dev2)
        self.link = Link(name='1_2_1', testbed=tb)
        self.link.connect_interface(interface=self.i1)
        self.link.connect_interface(interface=self.i2)
        self.link2 = Link(name='1_2_2', testbed=tb)
        self.link2.connect_interface(interface=self.i3)
        self.link2.connect_interface(interface=self.i4)
        self.link3 = Link(name='1_2_3', testbed=tb)
        self.link3.connect_interface(interface=self.i5)
        self.link3.connect_interface(interface=self.i6)
        self.link4 = Link(name='1_2_4', testbed=tb)
        self.link4.connect_interface(interface=self.i7)
        self.link4.connect_interface(interface=self.i8)
        self.assertSetEqual(set(self.link.find_interfaces()),
                            set([self.i1, self.i2]))
        self.assertSetEqual(set(self.dev1.find_interfaces()),
                            set([self.i1, self.i3, self.i5, self.i7]))
        self.assertSetEqual(set(self.dev2.find_interfaces()),
                            set([self.i2, self.i4, self.i6, self.i8]))

    def test_init(self):

        with self.subTest('name'):
            with self.assertRaises(TypeError):
                vrf = Vrf()
            with self.assertRaises(AssertionError):
                vrf = Vrf(name=123)
            vrf = Vrf(name='red')
            vrf2 = Vrf(name='blue')

        with self.subTest('fallback_vrf'):
            # fallback_vrf's type is defined post Vrf class; Make sure it works.
            self.assertIs(vrf.fallback_vrf, None)
            with self.assertRaises(ValueError):
                vrf.fallback_vrf = 123
            self.assertIs(vrf.fallback_vrf, None)
            with self.assertRaises(ValueError):
                vrf.fallback_vrf = 'blue'
            self.assertIs(vrf.fallback_vrf, None)
            vrf.fallback_vrf = None
            self.assertIs(vrf.fallback_vrf, None)
            vrf.fallback_vrf = vrf2
            self.assertIs(vrf.fallback_vrf, vrf2)

    def test_1_top_level(self):

        vrf = Vrf(name='vrf1')
        self.dev1.add_feature(vrf)
        self.dev2.add_feature(vrf)

        vrf.device_attr['PE1'].scale_mode = 'big'
        vrf.description = 'my description'
        cfgs = vrf.build_config(apply=False)

        self.assertMultiLineDictEqual(
            cfgs, {
                self.dev1.name:
                '\n'.join([
                    'vrf vrf1',
                    ' description my description',
                    ' mode big',
                    ' exit',
                ]),
                self.dev2.name:
                '\n'.join([
                    'vrf vrf1',
                    ' description my description',
                    ' exit',
                ]),
            })

        cfgs = vrf.build_config(apply=False,
                                attributes='device_attr__*__description')

        self.assertMultiLineDictEqual(
            cfgs, {
                self.dev1.name:
                '\n'.join([
                    'vrf vrf1',
                    ' description my description',
                    ' exit',
                ]),
                self.dev2.name:
                '\n'.join([
                    'vrf vrf1',
                    ' description my description',
                    ' exit',
                ]),
            })

        cfgs = vrf.build_config(apply=False,
                                attributes={
                                    'device_attr': {
                                        '*': {
                                            'description': None,
                                        },
                                    },
                                })
        self.assertMultiLineDictEqual(
            cfgs, {
                self.dev1.name:
                '\n'.join([
                    'vrf vrf1',
                    ' description my description',
                    ' exit',
                ]),
                self.dev2.name:
                '\n'.join([
                    'vrf vrf1',
                    ' description my description',
                    ' exit',
                ]),
            })

        cfgs = vrf.build_config(apply=False,
                                devices=[self.dev2],
                                attributes={
                                    'device_attr': {
                                        '*': {
                                            'description': None,
                                        },
                                    },
                                })
        self.assertMultiLineDictEqual(
            cfgs, {
                self.dev2.name:
                '\n'.join([
                    'vrf vrf1',
                    ' description my description',
                    ' exit',
                ]),
            })

        cfgs = vrf.build_config(apply=False,
                                devices=[self.dev2],
                                attributes={
                                    'device_attr': {
                                        self.dev1: {
                                            'description': None,
                                        },
                                    },
                                })
        self.assertMultiLineDictEqual(cfgs, {})

        cfgs = vrf.build_config(apply=False,
                                devices=[self.dev2],
                                attributes={
                                    'device_attr': {
                                        self.dev2: {
                                            'description': None,
                                        },
                                    },
                                })
        self.assertMultiLineDictEqual(
            cfgs, {
                self.dev2.name:
                '\n'.join([
                    'vrf vrf1',
                    ' description my description',
                    ' exit',
                ]),
            })

        cfgs = vrf.build_config(apply=False,
                                devices=[self.dev2],
                                attributes={
                                    'device_attr': {
                                        self.dev2.name: {
                                            'description': None,
                                        },
                                    },
                                })
        self.assertMultiLineDictEqual(
            cfgs, {
                self.dev2.name:
                '\n'.join([
                    'vrf vrf1',
                    ' description my description',
                    ' exit',
                ]),
            })

    def test_4_per_af(self):

        vrf = Vrf(name='vrf1')
        self.dev1.add_feature(vrf)

        vrf.address_families |= {AddressFamily.ipv6_unicast}
        vrf.device_attr['PE1'].address_family_attr[
            'ipv4 unicast'].export_route_targets = [
                RouteTarget.ImportExport('100:200', stitching=True),
            ]

        cfgs = vrf.build_config(apply=False)

        self.assertMultiLineDictEqual(
            cfgs, {
                self.dev1.name:
                '\n'.join([
                    'vrf vrf1',
                    ' address-family ipv4 unicast',
                    '  export route-target 100:200 stitching',
                    '  exit',
                    ' exit',
                ]),
            })
Ejemplo n.º 25
0
    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',
            ]))
Ejemplo n.º 26
0
    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',
            ]))
Ejemplo n.º 27
0
class test_rsvp(TestCase):
    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_0_interface_only(self):

        rsvp = Rsvp()
        self.assertCountEqual(rsvp.devices, [])
        self.assertCountEqual(rsvp.links, [])
        self.assertCountEqual(rsvp.interfaces, [])

        self.link.add_feature(rsvp)
        self.link2.add_feature(rsvp)
        self.link3.add_feature(rsvp)
        self.link4.add_feature(rsvp)
        self.assertCountEqual(rsvp.devices, [self.dev1, self.dev2])
        self.assertCountEqual(rsvp.links,
                              [self.link, self.link2, self.link3, self.link4])
        self.assertCountEqual(rsvp.interfaces, [
            self.i1, self.i2, self.i3, self.i4, self.i5, self.i6, self.i7,
            self.i8
        ])

        rsvp.enable_default_bw = True

        cfgs = rsvp.build_config(apply=False)

        self.assertMultiLineEqual(
            str(cfgs['PE1']), '\n'.join([
                'interface GigabitEthernet0/0/1',
                ' ip rsvp bandwidth',
                ' exit',
                'interface GigabitEthernet0/0/3',
                ' ip rsvp bandwidth',
                ' exit',
                'interface GigabitEthernet0/0/5',
                ' ip rsvp bandwidth',
                ' exit',
                'interface GigabitEthernet0/0/7',
                ' ip rsvp bandwidth',
                ' exit',
            ]))

        self.assertMultiLineEqual(
            str(cfgs['PE2']), '\n'.join([
                'interface GigabitEthernet0/0/2',
                ' ip rsvp bandwidth',
                ' exit',
                'interface GigabitEthernet0/0/4',
                ' ip rsvp bandwidth',
                ' exit',
                'interface GigabitEthernet0/0/6',
                ' ip rsvp bandwidth',
                ' exit',
                'interface GigabitEthernet0/0/8',
                ' ip rsvp bandwidth',
                ' exit',
            ]))

        uncfgs = rsvp.build_unconfig(apply=False)

        self.assertMultiLineEqual(
            str(uncfgs['PE1']), '\n'.join([
                'interface GigabitEthernet0/0/1',
                ' no ip rsvp bandwidth',
                ' exit',
                'interface GigabitEthernet0/0/3',
                ' no ip rsvp bandwidth',
                ' exit',
                'interface GigabitEthernet0/0/5',
                ' no ip rsvp bandwidth',
                ' exit',
                'interface GigabitEthernet0/0/7',
                ' no ip rsvp bandwidth',
                ' exit',
            ]))

        self.assertMultiLineEqual(
            str(uncfgs['PE2']), '\n'.join([
                'interface GigabitEthernet0/0/2',
                ' no ip rsvp bandwidth',
                ' exit',
                'interface GigabitEthernet0/0/4',
                ' no ip rsvp bandwidth',
                ' exit',
                'interface GigabitEthernet0/0/6',
                ' no ip rsvp bandwidth',
                ' exit',
                'interface GigabitEthernet0/0/8',
                ' no ip rsvp bandwidth',
                ' exit',
            ]))
Ejemplo n.º 28
0
    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',
            ]))
Ejemplo n.º 29
0
    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',
            ]))
Ejemplo n.º 30
0
    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',
            ]))