예제 #1
0
 def setUp(self):
     self.__conf = {
         'deviceFamily': {
             "qfx5100-48s-6q": {
                 "uplinkPorts": 'et-0/0/[48-53]',
                 "downlinkPorts": 'xe-0/0/[0-47]'
             },
             "ex4300-24p": {
                 "uplinkPorts": 'et-0/1/[0-3]',
                 "downlinkPorts": 'ge-0/0/[0-23]'
             }
         }
     }
     self._dao = InMemoryDao.getInstance()
     self.configurator = TwoStageConfigurator('192.168.48.219', self.__conf,
                                              InMemoryDao)
     self.configurator.manualInit()
예제 #2
0
 def setUp(self):
     self.__conf = {
         "deviceFamily": {
             "qfx5100-48s-6q": {"uplinkPorts": "et-0/0/[48-53]", "downlinkPorts": "xe-0/0/[0-47]"},
             "ex4300-24p": {"uplinkPorts": "et-0/1/[0-3]", "downlinkPorts": "ge-0/0/[0-23]"},
         }
     }
     self._dao = InMemoryDao.getInstance()
     self.configurator = TwoStageConfigurator("192.168.48.219", self.__conf, InMemoryDao)
     self.configurator.manualInit()
예제 #3
0
 def setUp(self):
     self.__conf = {'deviceFamily': {"qfx5100-48s-6q": {"uplinkPorts": 'et-0/0/[48-53]', "downlinkPorts": 'xe-0/0/[0-47]'},
                                  "ex4300-24p": {"uplinkPorts": 'et-0/1/[0-3]', "downlinkPorts": 'ge-0/0/[0-23]'}}}
     self._dao = InMemoryDao.getInstance()
     self.configurator = TwoStageConfigurator('192.168.48.219', self.__conf, InMemoryDao)
     self.configurator.manualInit()
예제 #4
0
class TestTwoStageConfigurator(TestL2DataCollector):

    def setUp(self):
        self.__conf = {'deviceFamily': {"qfx5100-48s-6q": {"uplinkPorts": 'et-0/0/[48-53]', "downlinkPorts": 'xe-0/0/[0-47]'},
                                     "ex4300-24p": {"uplinkPorts": 'et-0/1/[0-3]', "downlinkPorts": 'ge-0/0/[0-23]'}}}
        self._dao = InMemoryDao.getInstance()
        self.configurator = TwoStageConfigurator('192.168.48.219', self.__conf, InMemoryDao)
        self.configurator.manualInit()

    def tearDown(self):
        self._dao = None
        self.configurator = None
        InMemoryDao._destroy()

    @unittest.skip("need physical device to test")
    def testCollectLldpAndMatchDevice(self):
        self.configurator.collectLldpAndMatchDevice()

    def testFilterUplinkAppendRemotePortIfd(self):
        with self._dao.getReadSession() as session:
            IFDs = self.createTwoSpineTwoLeaf(session)
            self.configurator._session = session

            lldpDataFromLeaf1 = {
               'et-0/0/48': {'device1': None, 'port1': 'et-0/0/48', 'device2': 'spine1', 'port2': 'et-0/0/0'},
               'et-0/0/49': {'device1': None, 'port1': 'et-0/0/49', 'device2': 'spine2', 'port2': 'et-0/0/0'},
               'xe-0/0/0': {'device1': None, 'port1': 'xe-0/0/0', 'device2': 'server1', 'port2': 'eth0'},
               'xe-0/0/1': {'device1': None, 'port1': 'xe-0/0/1', 'device2': 'server2', 'port2': 'eth1'}
            }
    
            uplinksWithIfd = self.configurator.filterUplinkAppendRemotePortIfd(lldpDataFromLeaf1, 'qfx5100-48s-6q')
            
            self.assertEqual(2, len(uplinksWithIfd))
            self.assertIsNotNone(uplinksWithIfd[0]['ifd2'])
            self.assertIsNotNone(uplinksWithIfd[1]['ifd2'])

    def createIfls(self, session, ifds):
        IFLs = []
        for ifd in ifds:
            ifl = InterfaceLogical(ifd.name + '.0', ifd.device)
            ifd.layerAboves.append(ifl) 
            IFLs.append(ifl)
        session.add_all(IFLs)
        return IFLs
    
    def createSixSpineOneLeafUnknownPlugNPlay(self, session):
        from test_model import createPod
        pod = createPod('pod1', session)
        from test_model import createPodDevice
        spine1 = createPodDevice(session, 'spine1', pod)
        spine2 = createPodDevice(session, 'spine2', pod)
        spine3 = createPodDevice(session, 'spine3', pod)
        spine4 = createPodDevice(session, 'spine4', pod)
        spine5 = createPodDevice(session, 'spine5', pod)
        spine6 = createPodDevice(session, 'spine6', pod)
        leaf1 = createPodDevice(session, 'leaf1', pod)
        leaf1.role = 'leaf'
        leaf1.family = 'unknown'

        IFDs = [InterfaceDefinition('et-0/0/0', spine1, 'downlink'), InterfaceDefinition('et-0/0/0', spine2, 'downlink'), 
                InterfaceDefinition('et-0/0/0', spine3, 'downlink'), InterfaceDefinition('et-0/0/0', spine4, 'downlink'), 
                InterfaceDefinition('et-0/0/0', spine5, 'downlink'), InterfaceDefinition('et-0/0/0', spine6, 'downlink'), 
                InterfaceDefinition('uplink-0', leaf1, 'uplink'), InterfaceDefinition('uplink-1', leaf1, 'uplink'),
                InterfaceDefinition('uplink-2', leaf1, 'uplink'), InterfaceDefinition('uplink-3', leaf1, 'uplink'),
                InterfaceDefinition('uplink-4', leaf1, 'uplink'), InterfaceDefinition('uplink-5', leaf1, 'uplink')]
        session.add_all(IFDs)

        IFLs = self.createIfls(session, IFDs)
        
        IFDs[6].peer = IFDs[0]
        IFDs[0].peer = IFDs[6]
        IFDs[7].peer = IFDs[1]
        IFDs[1].peer = IFDs[7]
        IFDs[8].peer = IFDs[2]
        IFDs[2].peer = IFDs[8]
        IFDs[9].peer = IFDs[3]
        IFDs[3].peer = IFDs[9]
        IFDs[10].peer = IFDs[4]
        IFDs[4].peer = IFDs[10]
        IFDs[11].peer = IFDs[5]
        IFDs[5].peer = IFDs[11]
        
        return {'ifds': IFDs, 'ifls': IFLs}

    def testFixUplinkPortsUnknownToEx4300SpineCount2(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafUnknownPlugNPlay(session)
            IFDs = ifdIfl['ifds']
            IFLs = ifdIfl['ifls']
            self.configurator._session = session
            lldpUplinksWithIfdFromLeaf2 = [
               {'device1': None, 'port1': 'et-0/1/0', 'device2': 'spine1', 'port2': 'et-0/0/0', 'ifd2':IFDs[0]},
               {'device1': None, 'port1': 'et-0/1/1', 'device2': 'spine2', 'port2': 'et-0/0/0', 'ifd2':IFDs[1]}
            ]
            self.assertEqual('uplink-0', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[6].id).one().name)
            self.assertEqual('uplink-1', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[7].id).one().name)
            self.assertEqual('uplink-0.0', session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[6].id).one().name)
            self.assertEqual('uplink-1.0', session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[7].id).one().name)
    
            IFDs[6].device.family = 'ex4300-24p'
            self.configurator.fixUplinkPorts(IFDs[6].device, lldpUplinksWithIfdFromLeaf2)
    
            IFDs = session.query(InterfaceDefinition).filter(InterfaceDefinition.device_id == IFDs[6].device.id).filter(InterfaceDefinition.role == 'uplink').all()
            self.assertEqual('et-0/1/0', IFDs[0].name)
            self.assertEqual('et-0/1/1', IFDs[1].name)
            self.assertEqual('et-0/1/0.0', IFDs[0].layerAboves[0].name)
            self.assertEqual('et-0/1/1.0', IFDs[1].layerAboves[0].name)
    
            self.assertEqual('et-0/1/2', IFDs[2].name)
            self.assertEqual('et-0/1/3', IFDs[3].name)
            self.assertEqual('uplink-4', IFDs[4].name)
            self.assertEqual('uplink-5', IFDs[5].name)

    def testFixUplinkPortsUnknownToEx4300SpineCount2RandomPorts(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafUnknownPlugNPlay(session)
            IFDs = ifdIfl['ifds']
            IFLs = ifdIfl['ifls']
            self.configurator._session = session
            lldpUplinksWithIfdFromLeaf2 = [
               {'device1': None, 'port1': 'et-0/1/1', 'device2': 'spine1', 'port2': 'et-0/0/0', 'ifd2':IFDs[0]},
               {'device1': None, 'port1': 'et-0/1/3', 'device2': 'spine2', 'port2': 'et-0/0/0', 'ifd2':IFDs[1]}
            ]
            self.assertEqual('uplink-1', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[7].id).one().name)
            self.assertEqual('uplink-3', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[9].id).one().name)
            self.assertEqual('uplink-1.0', session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[7].id).one().name)
            self.assertEqual('uplink-3.0', session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[9].id).one().name)
    
            IFDs[6].device.family = 'ex4300-24p'
            self.configurator.fixUplinkPorts(IFDs[6].device, lldpUplinksWithIfdFromLeaf2)
    
            IFDs = session.query(InterfaceDefinition).filter(InterfaceDefinition.device_id == IFDs[6].device.id).filter(InterfaceDefinition.role == 'uplink').all()
            self.assertEqual('et-0/1/1', IFDs[1].name)
            self.assertEqual('et-0/1/3', IFDs[3].name)
            self.assertEqual('et-0/1/1.0', IFDs[1].layerAboves[0].name)
            self.assertEqual('et-0/1/3.0', IFDs[3].layerAboves[0].name)
    
            self.assertEqual('et-0/1/0', IFDs[0].name)
            self.assertEqual('et-0/1/2', IFDs[2].name)
            self.assertEqual('uplink-4', IFDs[4].name)
            self.assertEqual('uplink-5', IFDs[5].name)

    def testFixUplinkPortsUnknownToEx4300SpineCount4RandomPorts(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafUnknownPlugNPlay(session)
            IFDs = ifdIfl['ifds']
            self.configurator._session = session

            lldpUplinksWithIfdFromLeaf2 = [
               {'device1': None, 'port1': 'et-0/1/0', 'device2': 'spine1', 'port2': 'et-0/0/3', 'ifd2':IFDs[3]},
               {'device1': None, 'port1': 'et-0/1/1', 'device2': 'spine2', 'port2': 'et-0/0/2', 'ifd2':IFDs[2]},
               {'device1': None, 'port1': 'et-0/1/2', 'device2': 'spine1', 'port2': 'et-0/0/1', 'ifd2':IFDs[1]},
               {'device1': None, 'port1': 'et-0/1/3', 'device2': 'spine2', 'port2': 'et-0/0/0', 'ifd2':IFDs[0]}
            ]
            self.assertEqual('uplink-1', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[7].id).one().name)
            self.assertEqual('uplink-2', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[8].id).one().name)
            self.assertEqual('uplink-3', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[9].id).one().name)
            self.assertEqual('uplink-4', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[10].id).one().name)
    
            IFDs[6].device.family = 'ex4300-24p'
            self.configurator.fixUplinkPorts(IFDs[6].device, lldpUplinksWithIfdFromLeaf2)
    
            IFDs = session.query(InterfaceDefinition).filter(InterfaceDefinition.device_id == IFDs[6].device.id).filter(InterfaceDefinition.role == 'uplink').all()
            self.assertEqual('et-0/1/0', IFDs[0].name)
            self.assertEqual('et-0/1/1', IFDs[1].name)
            self.assertEqual('et-0/1/2', IFDs[2].name)
            self.assertEqual('et-0/1/3', IFDs[3].name)
            self.assertEqual('uplink-4', IFDs[4].name)
            self.assertEqual('uplink-5', IFDs[5].name)
        
    def createSixSpineOneLeafEx4300_24pPlugNPlay(self, session):
        from test_model import createPod
        pod = createPod('pod1', session)
        from test_model import createPodDevice
        spine1 = createPodDevice(session, 'spine1', pod)
        spine2 = createPodDevice(session, 'spine2', pod)
        spine3 = createPodDevice(session, 'spine3', pod)
        spine4 = createPodDevice(session, 'spine4', pod)
        spine5 = createPodDevice(session, 'spine5', pod)
        spine6 = createPodDevice(session, 'spine6', pod)
        leaf1 = createPodDevice(session, 'leaf1', pod)
        leaf1.role = 'leaf'
        leaf1.family = 'ex4300-24p'

        IFDs = [InterfaceDefinition('et-0/0/0', spine1, 'downlink'), InterfaceDefinition('et-0/0/0', spine2, 'downlink'), 
                InterfaceDefinition('et-0/0/0', spine3, 'downlink'), InterfaceDefinition('et-0/0/0', spine4, 'downlink'), 
                InterfaceDefinition('et-0/0/0', spine5, 'downlink'), InterfaceDefinition('et-0/0/0', spine6, 'downlink'), 
                InterfaceDefinition('et-0/1/0', leaf1, 'uplink'), InterfaceDefinition('et-0/1/1', leaf1, 'uplink'),
                InterfaceDefinition('et-0/1/2', leaf1, 'uplink'), InterfaceDefinition('et-0/1/3', leaf1, 'uplink'),
                InterfaceDefinition('uplink-4', leaf1, 'uplink'), InterfaceDefinition('uplink-5', leaf1, 'uplink')]
        session.add_all(IFDs)

        IFLs = self.createIfls(session, IFDs)
        
        IFDs[6].peer = IFDs[0]
        IFDs[0].peer = IFDs[6]
        IFDs[7].peer = IFDs[1]
        IFDs[1].peer = IFDs[7]
        IFDs[8].peer = IFDs[2]
        IFDs[2].peer = IFDs[8]
        IFDs[9].peer = IFDs[3]
        IFDs[3].peer = IFDs[9]
        IFDs[10].peer = IFDs[4]
        IFDs[4].peer = IFDs[10]
        IFDs[11].peer = IFDs[5]
        IFDs[5].peer = IFDs[11]
        
        return {'ifds': IFDs, 'ifls': IFLs}

    def testFixUplinkPortsEx4300ToQfx5100_48sSpineCount2RandomPorts(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafEx4300_24pPlugNPlay(session)
            IFDs = ifdIfl['ifds']
            IFLs = ifdIfl['ifls']
            self.configurator._session = session

            lldpUplinksWithIfdFromLeaf2 = [
               {'device1': None, 'port1': 'et-0/0/49', 'device2': 'spine1', 'port2': 'et-0/0/0', 'ifd2':IFDs[0]},
               {'device1': None, 'port1': 'et-0/0/52', 'device2': 'spine2', 'port2': 'et-0/0/0', 'ifd2':IFDs[1]}
            ]
            self.assertEqual('et-0/1/1', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[7].id).one().name)
            self.assertEqual('uplink-4', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[10].id).one().name)
            self.assertEqual('et-0/1/1.0', session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[7].id).one().name)
            self.assertEqual('uplink-4.0', session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[10].id).one().name)
    
            IFDs[6].device.family = 'qfx5100-48s-6q'
            self.configurator.fixUplinkPorts(IFDs[6].device, lldpUplinksWithIfdFromLeaf2)
    
            IFDs = session.query(InterfaceDefinition).filter(InterfaceDefinition.device_id == IFDs[6].device.id).filter(InterfaceDefinition.role == 'uplink').all()
            self.assertEqual('et-0/0/49', IFDs[1].name)
            self.assertEqual('et-0/0/52', IFDs[4].name)
            self.assertEqual('et-0/0/49.0', IFDs[1].layerAboves[0].name)
            self.assertEqual('et-0/0/52.0', IFDs[4].layerAboves[0].name)
    
            self.assertEqual('et-0/0/48', IFDs[0].name)
            self.assertEqual('et-0/0/50', IFDs[2].name)
            self.assertEqual('et-0/0/51', IFDs[3].name)
            self.assertEqual('et-0/0/53', IFDs[5].name)

    def createSixSpineOneLeafqfx5100_48sPlugNPlay(self, session):
        from test_model import createPod
        pod = createPod('pod1', session)
        from test_model import createPodDevice
        spine1 = createPodDevice(session, 'spine1', pod)
        spine2 = createPodDevice(session, 'spine2', pod)
        spine3 = createPodDevice(session, 'spine3', pod)
        spine4 = createPodDevice(session, 'spine4', pod)
        spine5 = createPodDevice(session, 'spine5', pod)
        spine6 = createPodDevice(session, 'spine6', pod)
        leaf1 = createPodDevice(session, 'leaf1', pod)
        leaf1.role = 'leaf'
        leaf1.family = 'qfx5100-48s-6q'

        IFDs = [InterfaceDefinition('et-0/0/0', spine1, 'downlink'), InterfaceDefinition('et-0/0/0', spine2, 'downlink'), 
                InterfaceDefinition('et-0/0/0', spine3, 'downlink'), InterfaceDefinition('et-0/0/0', spine4, 'downlink'), 
                InterfaceDefinition('et-0/0/0', spine5, 'downlink'), InterfaceDefinition('et-0/0/0', spine6, 'downlink'), 
                InterfaceDefinition('et-0/0/48', leaf1, 'uplink'), InterfaceDefinition('et-0/0/49', leaf1, 'uplink'),
                InterfaceDefinition('et-0/0/50', leaf1, 'uplink'), InterfaceDefinition('et-0/0/51', leaf1, 'uplink'),
                InterfaceDefinition('et-0/0/52', leaf1, 'uplink'), InterfaceDefinition('et-0/0/53', leaf1, 'uplink')]
        session.add_all(IFDs)

        IFLs = self.createIfls(session, IFDs)
        
        IFDs[6].peer = IFDs[0]
        IFDs[0].peer = IFDs[6]
        IFDs[7].peer = IFDs[1]
        IFDs[1].peer = IFDs[7]
        IFDs[8].peer = IFDs[2]
        IFDs[2].peer = IFDs[8]
        IFDs[9].peer = IFDs[3]
        IFDs[3].peer = IFDs[9]
        IFDs[10].peer = IFDs[4]
        IFDs[4].peer = IFDs[10]
        IFDs[11].peer = IFDs[5]
        IFDs[5].peer = IFDs[11]
        
        return {'ifds': IFDs, 'ifls': IFLs}

    def testFixUplinkPortsQfx5100_48sToEx4300SpineCount2RandomPorts(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafqfx5100_48sPlugNPlay(session)
            IFDs = ifdIfl['ifds']
            IFLs = ifdIfl['ifls']
            self.configurator._session = session

            lldpUplinksWithIfdFromLeaf2 = [
               {'device1': None, 'port1': 'et-0/1/3', 'device2': 'spine1', 'port2': 'et-0/0/0', 'ifd2':IFDs[0]},
               {'device1': None, 'port1': 'et-0/1/2', 'device2': 'spine2', 'port2': 'et-0/0/0', 'ifd2':IFDs[1]}
            ]
            self.assertEqual('et-0/0/51', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[9].id).one().name)
            self.assertEqual('et-0/0/50', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[8].id).one().name)
            self.assertEqual('et-0/0/51.0', session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[9].id).one().name)
            self.assertEqual('et-0/0/50.0', session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[8].id).one().name)
    
            IFDs[6].device.family = 'ex4300-24p'
            self.configurator.fixUplinkPorts(IFDs[6].device, lldpUplinksWithIfdFromLeaf2)
    
            IFDs = session.query(InterfaceDefinition).filter(InterfaceDefinition.device_id == IFDs[6].device.id).filter(InterfaceDefinition.role == 'uplink').all()
            self.assertEqual('et-0/1/3', IFDs[3].name)
            self.assertEqual('et-0/1/2', IFDs[2].name)
            self.assertEqual('et-0/1/3.0', IFDs[3].layerAboves[0].name)
            self.assertEqual('et-0/1/2.0', IFDs[2].layerAboves[0].name)
    
            self.assertEqual('et-0/1/0', IFDs[0].name)
            self.assertEqual('et-0/1/1', IFDs[1].name)
            self.assertEqual('uplink-4', IFDs[4].name)
            self.assertEqual('uplink-5', IFDs[5].name)

    def createTwoSpineTwoLeafPlugNPlay(self, session):
        from test_model import createPod
        pod = createPod('pod1', session)
        from test_model import createPodDevice
        spine1 = createPodDevice(session, 'spine1', pod)
        spine2 = createPodDevice(session, 'spine2', pod)
        leaf1 = createPodDevice(session, 'leaf1', pod)
        leaf1.role = 'leaf'
        leaf1.family = 'qfx5100-48s-6q'
        leaf2 = createPodDevice(session, 'leaf2', pod)
        leaf2.role = 'leaf'
        leaf2.family = 'unknown'

        IFDs = [InterfaceDefinition('et-0/0/0', spine1, 'downlink'), InterfaceDefinition('et-0/0/1', spine1, 'downlink'), 
                InterfaceDefinition('et-0/0/0', spine2, 'downlink'), InterfaceDefinition('et-0/0/1', spine2, 'downlink'), 
                InterfaceDefinition('et-0/0/48', leaf1, 'uplink'), InterfaceDefinition('et-0/0/49', leaf1, 'uplink'),
                InterfaceDefinition('uplink-1', leaf2, 'uplink'), InterfaceDefinition('uplink-2', leaf2, 'uplink')]
        session.add_all(IFDs)

        IFLs = self.createIfls(session, IFDs)
        
        IFDs[4].peer = IFDs[0]
        IFDs[0].peer = IFDs[4]
        IFDs[5].peer = IFDs[2]
        IFDs[2].peer = IFDs[5]
        
        IFDs[6].peer = IFDs[1]
        IFDs[1].peer = IFDs[6]
        IFDs[7].peer = IFDs[3]
        IFDs[3].peer = IFDs[7]
        
        return {'ifds': IFDs, 'ifls': IFLs}
        
    def testFixUplinkPortsUnknownToQfx5100_48s(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createTwoSpineTwoLeafPlugNPlay(session)
            IFDs = ifdIfl['ifds']
            IFLs = ifdIfl['ifls']
            self.configurator._session = session

            lldpUplinksWithIfdFromLeaf2 = [
               {'device1': None, 'port1': 'et-0/0/48', 'device2': 'spine1', 'port2': 'et-0/0/1', 'ifd2':IFDs[1]},
               {'device1': None, 'port1': 'et-0/0/49', 'device2': 'spine2', 'port2': 'et-0/0/1', 'ifd2':IFDs[3]}
            ]
            self.assertEqual('uplink-1', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[6].id).one().name)
            self.assertEqual('uplink-2', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[7].id).one().name)
            self.assertEqual('uplink-1.0', session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[6].id).one().name)
            self.assertEqual('uplink-2.0', session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[7].id).one().name)
    
            IFDs[6].device.family = 'qfx5100-48s-6q'
            self.configurator.fixUplinkPorts(IFDs[6].device, lldpUplinksWithIfdFromLeaf2)
    
            self.assertEqual('et-0/0/48', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[6].id).one().name)
            self.assertEqual('et-0/0/49', session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[7].id).one().name)
            self.assertEqual('et-0/0/48.0', session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[6].id).one().name)
            self.assertEqual('et-0/0/49.0', session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[7].id).one().name)

    @unittest.skip("")
    def testMatchDevice(self):
        self.configurator.findMatchedDevice(self.getLldpData(), 'qfx5100-96s-8q')
예제 #5
0
class TestTwoStageConfigurator(TestL2DataCollector):
    def setUp(self):
        self.__conf = {
            "deviceFamily": {
                "qfx5100-48s-6q": {"uplinkPorts": "et-0/0/[48-53]", "downlinkPorts": "xe-0/0/[0-47]"},
                "ex4300-24p": {"uplinkPorts": "et-0/1/[0-3]", "downlinkPorts": "ge-0/0/[0-23]"},
            }
        }
        self._dao = InMemoryDao.getInstance()
        self.configurator = TwoStageConfigurator("192.168.48.219", self.__conf, InMemoryDao)
        self.configurator.manualInit()

    def tearDown(self):
        self._dao = None
        self.configurator = None
        InMemoryDao._destroy()

    @unittest.skip("need physical device to test")
    def testCollectLldpAndMatchDevice(self):
        self.configurator.collectLldpAndMatchDevice()

    def testFilterUplinkAppendRemotePortIfd(self):
        with self._dao.getReadSession() as session:
            IFDs = self.createTwoSpineTwoLeaf(session)
            self.configurator._session = session

            lldpDataFromLeaf1 = {
                "et-0/0/48": {"device1": None, "port1": "et-0/0/48", "device2": "spine1", "port2": "et-0/0/0"},
                "et-0/0/49": {"device1": None, "port1": "et-0/0/49", "device2": "spine2", "port2": "et-0/0/0"},
                "xe-0/0/0": {"device1": None, "port1": "xe-0/0/0", "device2": "server1", "port2": "eth0"},
                "xe-0/0/1": {"device1": None, "port1": "xe-0/0/1", "device2": "server2", "port2": "eth1"},
            }

            uplinksWithIfd = self.configurator.filterUplinkAppendRemotePortIfd(lldpDataFromLeaf1, "qfx5100-48s-6q")

            self.assertEqual(2, len(uplinksWithIfd))
            self.assertIsNotNone(uplinksWithIfd[0]["ifd2"])
            self.assertIsNotNone(uplinksWithIfd[1]["ifd2"])

    def createIfls(self, session, ifds):
        IFLs = []
        for ifd in ifds:
            ifl = InterfaceLogical(ifd.name + ".0", ifd.device)
            ifd.layerAboves.append(ifl)
            IFLs.append(ifl)
        session.add_all(IFLs)
        return IFLs

    def createSixSpineOneLeafUnknownPlugNPlay(self, session):
        from test_model import createPod

        pod = createPod("pod1", session)
        from test_model import createPodDevice

        spine1 = createPodDevice(session, "spine1", pod)
        spine2 = createPodDevice(session, "spine2", pod)
        spine3 = createPodDevice(session, "spine3", pod)
        spine4 = createPodDevice(session, "spine4", pod)
        spine5 = createPodDevice(session, "spine5", pod)
        spine6 = createPodDevice(session, "spine6", pod)
        leaf1 = createPodDevice(session, "leaf1", pod)
        leaf1.role = "leaf"
        leaf1.family = "unknown"

        IFDs = [
            InterfaceDefinition("et-0/0/0", spine1, "downlink"),
            InterfaceDefinition("et-0/0/0", spine2, "downlink"),
            InterfaceDefinition("et-0/0/0", spine3, "downlink"),
            InterfaceDefinition("et-0/0/0", spine4, "downlink"),
            InterfaceDefinition("et-0/0/0", spine5, "downlink"),
            InterfaceDefinition("et-0/0/0", spine6, "downlink"),
            InterfaceDefinition("uplink-0", leaf1, "uplink"),
            InterfaceDefinition("uplink-1", leaf1, "uplink"),
            InterfaceDefinition("uplink-2", leaf1, "uplink"),
            InterfaceDefinition("uplink-3", leaf1, "uplink"),
            InterfaceDefinition("uplink-4", leaf1, "uplink"),
            InterfaceDefinition("uplink-5", leaf1, "uplink"),
        ]
        session.add_all(IFDs)

        IFLs = self.createIfls(session, IFDs)

        IFDs[6].peer = IFDs[0]
        IFDs[0].peer = IFDs[6]
        IFDs[7].peer = IFDs[1]
        IFDs[1].peer = IFDs[7]
        IFDs[8].peer = IFDs[2]
        IFDs[2].peer = IFDs[8]
        IFDs[9].peer = IFDs[3]
        IFDs[3].peer = IFDs[9]
        IFDs[10].peer = IFDs[4]
        IFDs[4].peer = IFDs[10]
        IFDs[11].peer = IFDs[5]
        IFDs[5].peer = IFDs[11]

        return {"ifds": IFDs, "ifls": IFLs}

    def testFixUplinkPortsUnknownToEx4300SpineCount2(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafUnknownPlugNPlay(session)
            IFDs = ifdIfl["ifds"]
            IFLs = ifdIfl["ifls"]
            self.configurator._session = session
            lldpUplinksWithIfdFromLeaf2 = [
                {"device1": None, "port1": "et-0/1/0", "device2": "spine1", "port2": "et-0/0/0", "ifd2": IFDs[0]},
                {"device1": None, "port1": "et-0/1/1", "device2": "spine2", "port2": "et-0/0/0", "ifd2": IFDs[1]},
            ]
            self.assertEqual(
                "uplink-0", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[6].id).one().name
            )
            self.assertEqual(
                "uplink-1", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[7].id).one().name
            )
            self.assertEqual(
                "uplink-0.0", session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[6].id).one().name
            )
            self.assertEqual(
                "uplink-1.0", session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[7].id).one().name
            )

            IFDs[6].device.family = "ex4300-24p"
            self.configurator.fixUplinkPorts(IFDs[6].device, lldpUplinksWithIfdFromLeaf2)

            IFDs = (
                session.query(InterfaceDefinition)
                .filter(InterfaceDefinition.device_id == IFDs[6].device.id)
                .filter(InterfaceDefinition.role == "uplink")
                .all()
            )
            self.assertEqual("et-0/1/0", IFDs[0].name)
            self.assertEqual("et-0/1/1", IFDs[1].name)
            self.assertEqual("et-0/1/0.0", IFDs[0].layerAboves[0].name)
            self.assertEqual("et-0/1/1.0", IFDs[1].layerAboves[0].name)

            self.assertEqual("et-0/1/2", IFDs[2].name)
            self.assertEqual("et-0/1/3", IFDs[3].name)
            self.assertEqual("uplink-4", IFDs[4].name)
            self.assertEqual("uplink-5", IFDs[5].name)

    def testFixUplinkPortsUnknownToEx4300SpineCount2RandomPorts(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafUnknownPlugNPlay(session)
            IFDs = ifdIfl["ifds"]
            IFLs = ifdIfl["ifls"]
            self.configurator._session = session
            lldpUplinksWithIfdFromLeaf2 = [
                {"device1": None, "port1": "et-0/1/1", "device2": "spine1", "port2": "et-0/0/0", "ifd2": IFDs[0]},
                {"device1": None, "port1": "et-0/1/3", "device2": "spine2", "port2": "et-0/0/0", "ifd2": IFDs[1]},
            ]
            self.assertEqual(
                "uplink-1", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[7].id).one().name
            )
            self.assertEqual(
                "uplink-3", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[9].id).one().name
            )
            self.assertEqual(
                "uplink-1.0", session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[7].id).one().name
            )
            self.assertEqual(
                "uplink-3.0", session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[9].id).one().name
            )

            IFDs[6].device.family = "ex4300-24p"
            self.configurator.fixUplinkPorts(IFDs[6].device, lldpUplinksWithIfdFromLeaf2)

            IFDs = (
                session.query(InterfaceDefinition)
                .filter(InterfaceDefinition.device_id == IFDs[6].device.id)
                .filter(InterfaceDefinition.role == "uplink")
                .all()
            )
            self.assertEqual("et-0/1/1", IFDs[1].name)
            self.assertEqual("et-0/1/3", IFDs[3].name)
            self.assertEqual("et-0/1/1.0", IFDs[1].layerAboves[0].name)
            self.assertEqual("et-0/1/3.0", IFDs[3].layerAboves[0].name)

            self.assertEqual("et-0/1/0", IFDs[0].name)
            self.assertEqual("et-0/1/2", IFDs[2].name)
            self.assertEqual("uplink-4", IFDs[4].name)
            self.assertEqual("uplink-5", IFDs[5].name)

    def testFixUplinkPortsUnknownToEx4300SpineCount4RandomPorts(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafUnknownPlugNPlay(session)
            IFDs = ifdIfl["ifds"]
            self.configurator._session = session

            lldpUplinksWithIfdFromLeaf2 = [
                {"device1": None, "port1": "et-0/1/0", "device2": "spine1", "port2": "et-0/0/3", "ifd2": IFDs[3]},
                {"device1": None, "port1": "et-0/1/1", "device2": "spine2", "port2": "et-0/0/2", "ifd2": IFDs[2]},
                {"device1": None, "port1": "et-0/1/2", "device2": "spine1", "port2": "et-0/0/1", "ifd2": IFDs[1]},
                {"device1": None, "port1": "et-0/1/3", "device2": "spine2", "port2": "et-0/0/0", "ifd2": IFDs[0]},
            ]
            self.assertEqual(
                "uplink-1", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[7].id).one().name
            )
            self.assertEqual(
                "uplink-2", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[8].id).one().name
            )
            self.assertEqual(
                "uplink-3", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[9].id).one().name
            )
            self.assertEqual(
                "uplink-4", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[10].id).one().name
            )

            IFDs[6].device.family = "ex4300-24p"
            self.configurator.fixUplinkPorts(IFDs[6].device, lldpUplinksWithIfdFromLeaf2)

            IFDs = (
                session.query(InterfaceDefinition)
                .filter(InterfaceDefinition.device_id == IFDs[6].device.id)
                .filter(InterfaceDefinition.role == "uplink")
                .all()
            )
            self.assertEqual("et-0/1/0", IFDs[0].name)
            self.assertEqual("et-0/1/1", IFDs[1].name)
            self.assertEqual("et-0/1/2", IFDs[2].name)
            self.assertEqual("et-0/1/3", IFDs[3].name)
            self.assertEqual("uplink-4", IFDs[4].name)
            self.assertEqual("uplink-5", IFDs[5].name)

    def createSixSpineOneLeafEx4300_24pPlugNPlay(self, session):
        from test_model import createPod

        pod = createPod("pod1", session)
        from test_model import createPodDevice

        spine1 = createPodDevice(session, "spine1", pod)
        spine2 = createPodDevice(session, "spine2", pod)
        spine3 = createPodDevice(session, "spine3", pod)
        spine4 = createPodDevice(session, "spine4", pod)
        spine5 = createPodDevice(session, "spine5", pod)
        spine6 = createPodDevice(session, "spine6", pod)
        leaf1 = createPodDevice(session, "leaf1", pod)
        leaf1.role = "leaf"
        leaf1.family = "ex4300-24p"

        IFDs = [
            InterfaceDefinition("et-0/0/0", spine1, "downlink"),
            InterfaceDefinition("et-0/0/0", spine2, "downlink"),
            InterfaceDefinition("et-0/0/0", spine3, "downlink"),
            InterfaceDefinition("et-0/0/0", spine4, "downlink"),
            InterfaceDefinition("et-0/0/0", spine5, "downlink"),
            InterfaceDefinition("et-0/0/0", spine6, "downlink"),
            InterfaceDefinition("et-0/1/0", leaf1, "uplink"),
            InterfaceDefinition("et-0/1/1", leaf1, "uplink"),
            InterfaceDefinition("et-0/1/2", leaf1, "uplink"),
            InterfaceDefinition("et-0/1/3", leaf1, "uplink"),
            InterfaceDefinition("uplink-4", leaf1, "uplink"),
            InterfaceDefinition("uplink-5", leaf1, "uplink"),
        ]
        session.add_all(IFDs)

        IFLs = self.createIfls(session, IFDs)

        IFDs[6].peer = IFDs[0]
        IFDs[0].peer = IFDs[6]
        IFDs[7].peer = IFDs[1]
        IFDs[1].peer = IFDs[7]
        IFDs[8].peer = IFDs[2]
        IFDs[2].peer = IFDs[8]
        IFDs[9].peer = IFDs[3]
        IFDs[3].peer = IFDs[9]
        IFDs[10].peer = IFDs[4]
        IFDs[4].peer = IFDs[10]
        IFDs[11].peer = IFDs[5]
        IFDs[5].peer = IFDs[11]

        return {"ifds": IFDs, "ifls": IFLs}

    def testFixUplinkPortsEx4300ToQfx5100_48sSpineCount2RandomPorts(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafEx4300_24pPlugNPlay(session)
            IFDs = ifdIfl["ifds"]
            IFLs = ifdIfl["ifls"]
            self.configurator._session = session

            lldpUplinksWithIfdFromLeaf2 = [
                {"device1": None, "port1": "et-0/0/49", "device2": "spine1", "port2": "et-0/0/0", "ifd2": IFDs[0]},
                {"device1": None, "port1": "et-0/0/52", "device2": "spine2", "port2": "et-0/0/0", "ifd2": IFDs[1]},
            ]
            self.assertEqual(
                "et-0/1/1", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[7].id).one().name
            )
            self.assertEqual(
                "uplink-4", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[10].id).one().name
            )
            self.assertEqual(
                "et-0/1/1.0", session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[7].id).one().name
            )
            self.assertEqual(
                "uplink-4.0", session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[10].id).one().name
            )

            IFDs[6].device.family = "qfx5100-48s-6q"
            self.configurator.fixUplinkPorts(IFDs[6].device, lldpUplinksWithIfdFromLeaf2)

            IFDs = (
                session.query(InterfaceDefinition)
                .filter(InterfaceDefinition.device_id == IFDs[6].device.id)
                .filter(InterfaceDefinition.role == "uplink")
                .all()
            )
            self.assertEqual("et-0/0/49", IFDs[1].name)
            self.assertEqual("et-0/0/52", IFDs[4].name)
            self.assertEqual("et-0/0/49.0", IFDs[1].layerAboves[0].name)
            self.assertEqual("et-0/0/52.0", IFDs[4].layerAboves[0].name)

            self.assertEqual("et-0/0/48", IFDs[0].name)
            self.assertEqual("et-0/0/50", IFDs[2].name)
            self.assertEqual("et-0/0/51", IFDs[3].name)
            self.assertEqual("et-0/0/53", IFDs[5].name)

    def createSixSpineOneLeafqfx5100_48sPlugNPlay(self, session):
        from test_model import createPod

        pod = createPod("pod1", session)
        from test_model import createPodDevice

        spine1 = createPodDevice(session, "spine1", pod)
        spine2 = createPodDevice(session, "spine2", pod)
        spine3 = createPodDevice(session, "spine3", pod)
        spine4 = createPodDevice(session, "spine4", pod)
        spine5 = createPodDevice(session, "spine5", pod)
        spine6 = createPodDevice(session, "spine6", pod)
        leaf1 = createPodDevice(session, "leaf1", pod)
        leaf1.role = "leaf"
        leaf1.family = "qfx5100-48s-6q"

        IFDs = [
            InterfaceDefinition("et-0/0/0", spine1, "downlink"),
            InterfaceDefinition("et-0/0/0", spine2, "downlink"),
            InterfaceDefinition("et-0/0/0", spine3, "downlink"),
            InterfaceDefinition("et-0/0/0", spine4, "downlink"),
            InterfaceDefinition("et-0/0/0", spine5, "downlink"),
            InterfaceDefinition("et-0/0/0", spine6, "downlink"),
            InterfaceDefinition("et-0/0/48", leaf1, "uplink"),
            InterfaceDefinition("et-0/0/49", leaf1, "uplink"),
            InterfaceDefinition("et-0/0/50", leaf1, "uplink"),
            InterfaceDefinition("et-0/0/51", leaf1, "uplink"),
            InterfaceDefinition("et-0/0/52", leaf1, "uplink"),
            InterfaceDefinition("et-0/0/53", leaf1, "uplink"),
        ]
        session.add_all(IFDs)

        IFLs = self.createIfls(session, IFDs)

        IFDs[6].peer = IFDs[0]
        IFDs[0].peer = IFDs[6]
        IFDs[7].peer = IFDs[1]
        IFDs[1].peer = IFDs[7]
        IFDs[8].peer = IFDs[2]
        IFDs[2].peer = IFDs[8]
        IFDs[9].peer = IFDs[3]
        IFDs[3].peer = IFDs[9]
        IFDs[10].peer = IFDs[4]
        IFDs[4].peer = IFDs[10]
        IFDs[11].peer = IFDs[5]
        IFDs[5].peer = IFDs[11]

        return {"ifds": IFDs, "ifls": IFLs}

    def testFixUplinkPortsQfx5100_48sToEx4300SpineCount2RandomPorts(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafqfx5100_48sPlugNPlay(session)
            IFDs = ifdIfl["ifds"]
            IFLs = ifdIfl["ifls"]
            self.configurator._session = session

            lldpUplinksWithIfdFromLeaf2 = [
                {"device1": None, "port1": "et-0/1/3", "device2": "spine1", "port2": "et-0/0/0", "ifd2": IFDs[0]},
                {"device1": None, "port1": "et-0/1/2", "device2": "spine2", "port2": "et-0/0/0", "ifd2": IFDs[1]},
            ]
            self.assertEqual(
                "et-0/0/51", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[9].id).one().name
            )
            self.assertEqual(
                "et-0/0/50", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[8].id).one().name
            )
            self.assertEqual(
                "et-0/0/51.0", session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[9].id).one().name
            )
            self.assertEqual(
                "et-0/0/50.0", session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[8].id).one().name
            )

            IFDs[6].device.family = "ex4300-24p"
            self.configurator.fixUplinkPorts(IFDs[6].device, lldpUplinksWithIfdFromLeaf2)

            IFDs = (
                session.query(InterfaceDefinition)
                .filter(InterfaceDefinition.device_id == IFDs[6].device.id)
                .filter(InterfaceDefinition.role == "uplink")
                .all()
            )
            self.assertEqual("et-0/1/3", IFDs[3].name)
            self.assertEqual("et-0/1/2", IFDs[2].name)
            self.assertEqual("et-0/1/3.0", IFDs[3].layerAboves[0].name)
            self.assertEqual("et-0/1/2.0", IFDs[2].layerAboves[0].name)

            self.assertEqual("et-0/1/0", IFDs[0].name)
            self.assertEqual("et-0/1/1", IFDs[1].name)
            self.assertEqual("uplink-4", IFDs[4].name)
            self.assertEqual("uplink-5", IFDs[5].name)

    def createTwoSpineTwoLeafPlugNPlay(self, session):
        from test_model import createPod

        pod = createPod("pod1", session)
        from test_model import createPodDevice

        spine1 = createPodDevice(session, "spine1", pod)
        spine2 = createPodDevice(session, "spine2", pod)
        leaf1 = createPodDevice(session, "leaf1", pod)
        leaf1.role = "leaf"
        leaf1.family = "qfx5100-48s-6q"
        leaf2 = createPodDevice(session, "leaf2", pod)
        leaf2.role = "leaf"
        leaf2.family = "unknown"

        IFDs = [
            InterfaceDefinition("et-0/0/0", spine1, "downlink"),
            InterfaceDefinition("et-0/0/1", spine1, "downlink"),
            InterfaceDefinition("et-0/0/0", spine2, "downlink"),
            InterfaceDefinition("et-0/0/1", spine2, "downlink"),
            InterfaceDefinition("et-0/0/48", leaf1, "uplink"),
            InterfaceDefinition("et-0/0/49", leaf1, "uplink"),
            InterfaceDefinition("uplink-1", leaf2, "uplink"),
            InterfaceDefinition("uplink-2", leaf2, "uplink"),
        ]
        session.add_all(IFDs)

        IFLs = self.createIfls(session, IFDs)

        IFDs[4].peer = IFDs[0]
        IFDs[0].peer = IFDs[4]
        IFDs[5].peer = IFDs[2]
        IFDs[2].peer = IFDs[5]

        IFDs[6].peer = IFDs[1]
        IFDs[1].peer = IFDs[6]
        IFDs[7].peer = IFDs[3]
        IFDs[3].peer = IFDs[7]

        return {"ifds": IFDs, "ifls": IFLs}

    def testFixUplinkPortsUnknownToQfx5100_48s(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createTwoSpineTwoLeafPlugNPlay(session)
            IFDs = ifdIfl["ifds"]
            IFLs = ifdIfl["ifls"]
            self.configurator._session = session

            lldpUplinksWithIfdFromLeaf2 = [
                {"device1": None, "port1": "et-0/0/48", "device2": "spine1", "port2": "et-0/0/1", "ifd2": IFDs[1]},
                {"device1": None, "port1": "et-0/0/49", "device2": "spine2", "port2": "et-0/0/1", "ifd2": IFDs[3]},
            ]
            self.assertEqual(
                "uplink-1", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[6].id).one().name
            )
            self.assertEqual(
                "uplink-2", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[7].id).one().name
            )
            self.assertEqual(
                "uplink-1.0", session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[6].id).one().name
            )
            self.assertEqual(
                "uplink-2.0", session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[7].id).one().name
            )

            IFDs[6].device.family = "qfx5100-48s-6q"
            self.configurator.fixUplinkPorts(IFDs[6].device, lldpUplinksWithIfdFromLeaf2)

            self.assertEqual(
                "et-0/0/48", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[6].id).one().name
            )
            self.assertEqual(
                "et-0/0/49", session.query(InterfaceDefinition).filter(InterfaceDefinition.id == IFDs[7].id).one().name
            )
            self.assertEqual(
                "et-0/0/48.0", session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[6].id).one().name
            )
            self.assertEqual(
                "et-0/0/49.0", session.query(InterfaceLogical).filter(InterfaceLogical.id == IFLs[7].id).one().name
            )

    @unittest.skip("")
    def testMatchDevice(self):
        self.configurator.findMatchedDevice(self.getLldpData(), "qfx5100-96s-8q")
예제 #6
0
class TestTwoStageConfigurator(TestL2DataCollector):
    def setUp(self):
        self.__conf = {
            'deviceFamily': {
                "qfx5100-48s-6q": {
                    "uplinkPorts": 'et-0/0/[48-53]',
                    "downlinkPorts": 'xe-0/0/[0-47]'
                },
                "ex4300-24p": {
                    "uplinkPorts": 'et-0/1/[0-3]',
                    "downlinkPorts": 'ge-0/0/[0-23]'
                }
            }
        }
        self._dao = InMemoryDao.getInstance()
        self.configurator = TwoStageConfigurator('192.168.48.219', self.__conf,
                                                 InMemoryDao)
        self.configurator.manualInit()

    def tearDown(self):
        self._dao = None
        self.configurator = None
        InMemoryDao._destroy()

    @unittest.skip("need physical device to test")
    def testCollectLldpAndMatchDevice(self):
        self.configurator.collectLldpAndMatchDevice()

    def testFilterUplinkAppendRemotePortIfd(self):
        with self._dao.getReadSession() as session:
            IFDs = self.createTwoSpineTwoLeaf(session)
            self.configurator._session = session

            lldpDataFromLeaf1 = {
                'et-0/0/48': {
                    'device1': None,
                    'port1': 'et-0/0/48',
                    'device2': 'spine1',
                    'port2': 'et-0/0/0'
                },
                'et-0/0/49': {
                    'device1': None,
                    'port1': 'et-0/0/49',
                    'device2': 'spine2',
                    'port2': 'et-0/0/0'
                },
                'xe-0/0/0': {
                    'device1': None,
                    'port1': 'xe-0/0/0',
                    'device2': 'server1',
                    'port2': 'eth0'
                },
                'xe-0/0/1': {
                    'device1': None,
                    'port1': 'xe-0/0/1',
                    'device2': 'server2',
                    'port2': 'eth1'
                }
            }

            uplinksWithIfd = self.configurator.filterUplinkAppendRemotePortIfd(
                lldpDataFromLeaf1, 'qfx5100-48s-6q')

            self.assertEqual(2, len(uplinksWithIfd))
            self.assertIsNotNone(uplinksWithIfd[0]['ifd2'])
            self.assertIsNotNone(uplinksWithIfd[1]['ifd2'])

    def createIfls(self, session, ifds):
        IFLs = []
        for ifd in ifds:
            ifl = InterfaceLogical(ifd.name + '.0', ifd.device)
            ifd.layerAboves.append(ifl)
            IFLs.append(ifl)
        session.add_all(IFLs)
        return IFLs

    def createSixSpineOneLeafUnknownPlugNPlay(self, session):
        from test_model import createPod
        pod = createPod('pod1', session)
        from test_model import createPodDevice
        spine1 = createPodDevice(session, 'spine1', pod)
        spine2 = createPodDevice(session, 'spine2', pod)
        spine3 = createPodDevice(session, 'spine3', pod)
        spine4 = createPodDevice(session, 'spine4', pod)
        spine5 = createPodDevice(session, 'spine5', pod)
        spine6 = createPodDevice(session, 'spine6', pod)
        leaf1 = createPodDevice(session, 'leaf1', pod)
        leaf1.role = 'leaf'
        leaf1.family = 'unknown'

        IFDs = [
            InterfaceDefinition('et-0/0/0', spine1, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine2, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine3, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine4, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine5, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine6, 'downlink'),
            InterfaceDefinition('uplink-0', leaf1, 'uplink'),
            InterfaceDefinition('uplink-1', leaf1, 'uplink'),
            InterfaceDefinition('uplink-2', leaf1, 'uplink'),
            InterfaceDefinition('uplink-3', leaf1, 'uplink'),
            InterfaceDefinition('uplink-4', leaf1, 'uplink'),
            InterfaceDefinition('uplink-5', leaf1, 'uplink')
        ]
        session.add_all(IFDs)

        IFLs = self.createIfls(session, IFDs)

        IFDs[6].peer = IFDs[0]
        IFDs[0].peer = IFDs[6]
        IFDs[7].peer = IFDs[1]
        IFDs[1].peer = IFDs[7]
        IFDs[8].peer = IFDs[2]
        IFDs[2].peer = IFDs[8]
        IFDs[9].peer = IFDs[3]
        IFDs[3].peer = IFDs[9]
        IFDs[10].peer = IFDs[4]
        IFDs[4].peer = IFDs[10]
        IFDs[11].peer = IFDs[5]
        IFDs[5].peer = IFDs[11]

        return {'ifds': IFDs, 'ifls': IFLs}

    def testFixUplinkPortsUnknownToEx4300SpineCount2(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafUnknownPlugNPlay(session)
            IFDs = ifdIfl['ifds']
            IFLs = ifdIfl['ifls']
            self.configurator._session = session
            lldpUplinksWithIfdFromLeaf2 = [{
                'device1': None,
                'port1': 'et-0/1/0',
                'device2': 'spine1',
                'port2': 'et-0/0/0',
                'ifd2': IFDs[0]
            }, {
                'device1': None,
                'port1': 'et-0/1/1',
                'device2': 'spine2',
                'port2': 'et-0/0/0',
                'ifd2': IFDs[1]
            }]
            self.assertEqual(
                'uplink-0',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[6].id).one().name)
            self.assertEqual(
                'uplink-1',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[7].id).one().name)
            self.assertEqual(
                'uplink-0.0',
                session.query(InterfaceLogical).filter(
                    InterfaceLogical.id == IFLs[6].id).one().name)
            self.assertEqual(
                'uplink-1.0',
                session.query(InterfaceLogical).filter(
                    InterfaceLogical.id == IFLs[7].id).one().name)

            IFDs[6].device.family = 'ex4300-24p'
            self.configurator.fixUplinkPorts(IFDs[6].device,
                                             lldpUplinksWithIfdFromLeaf2)

            IFDs = session.query(InterfaceDefinition).filter(
                InterfaceDefinition.device_id == IFDs[6].device.id).filter(
                    InterfaceDefinition.role == 'uplink').all()
            self.assertEqual('et-0/1/0', IFDs[0].name)
            self.assertEqual('et-0/1/1', IFDs[1].name)
            self.assertEqual('et-0/1/0.0', IFDs[0].layerAboves[0].name)
            self.assertEqual('et-0/1/1.0', IFDs[1].layerAboves[0].name)

            self.assertEqual('et-0/1/2', IFDs[2].name)
            self.assertEqual('et-0/1/3', IFDs[3].name)
            self.assertEqual('uplink-4', IFDs[4].name)
            self.assertEqual('uplink-5', IFDs[5].name)

    def testFixUplinkPortsUnknownToEx4300SpineCount2RandomPorts(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafUnknownPlugNPlay(session)
            IFDs = ifdIfl['ifds']
            IFLs = ifdIfl['ifls']
            self.configurator._session = session
            lldpUplinksWithIfdFromLeaf2 = [{
                'device1': None,
                'port1': 'et-0/1/1',
                'device2': 'spine1',
                'port2': 'et-0/0/0',
                'ifd2': IFDs[0]
            }, {
                'device1': None,
                'port1': 'et-0/1/3',
                'device2': 'spine2',
                'port2': 'et-0/0/0',
                'ifd2': IFDs[1]
            }]
            self.assertEqual(
                'uplink-1',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[7].id).one().name)
            self.assertEqual(
                'uplink-3',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[9].id).one().name)
            self.assertEqual(
                'uplink-1.0',
                session.query(InterfaceLogical).filter(
                    InterfaceLogical.id == IFLs[7].id).one().name)
            self.assertEqual(
                'uplink-3.0',
                session.query(InterfaceLogical).filter(
                    InterfaceLogical.id == IFLs[9].id).one().name)

            IFDs[6].device.family = 'ex4300-24p'
            self.configurator.fixUplinkPorts(IFDs[6].device,
                                             lldpUplinksWithIfdFromLeaf2)

            IFDs = session.query(InterfaceDefinition).filter(
                InterfaceDefinition.device_id == IFDs[6].device.id).filter(
                    InterfaceDefinition.role == 'uplink').all()
            self.assertEqual('et-0/1/1', IFDs[1].name)
            self.assertEqual('et-0/1/3', IFDs[3].name)
            self.assertEqual('et-0/1/1.0', IFDs[1].layerAboves[0].name)
            self.assertEqual('et-0/1/3.0', IFDs[3].layerAboves[0].name)

            self.assertEqual('et-0/1/0', IFDs[0].name)
            self.assertEqual('et-0/1/2', IFDs[2].name)
            self.assertEqual('uplink-4', IFDs[4].name)
            self.assertEqual('uplink-5', IFDs[5].name)

    def testFixUplinkPortsUnknownToEx4300SpineCount4RandomPorts(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafUnknownPlugNPlay(session)
            IFDs = ifdIfl['ifds']
            self.configurator._session = session

            lldpUplinksWithIfdFromLeaf2 = [{
                'device1': None,
                'port1': 'et-0/1/0',
                'device2': 'spine1',
                'port2': 'et-0/0/3',
                'ifd2': IFDs[3]
            }, {
                'device1': None,
                'port1': 'et-0/1/1',
                'device2': 'spine2',
                'port2': 'et-0/0/2',
                'ifd2': IFDs[2]
            }, {
                'device1': None,
                'port1': 'et-0/1/2',
                'device2': 'spine1',
                'port2': 'et-0/0/1',
                'ifd2': IFDs[1]
            }, {
                'device1': None,
                'port1': 'et-0/1/3',
                'device2': 'spine2',
                'port2': 'et-0/0/0',
                'ifd2': IFDs[0]
            }]
            self.assertEqual(
                'uplink-1',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[7].id).one().name)
            self.assertEqual(
                'uplink-2',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[8].id).one().name)
            self.assertEqual(
                'uplink-3',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[9].id).one().name)
            self.assertEqual(
                'uplink-4',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[10].id).one().name)

            IFDs[6].device.family = 'ex4300-24p'
            self.configurator.fixUplinkPorts(IFDs[6].device,
                                             lldpUplinksWithIfdFromLeaf2)

            IFDs = session.query(InterfaceDefinition).filter(
                InterfaceDefinition.device_id == IFDs[6].device.id).filter(
                    InterfaceDefinition.role == 'uplink').all()
            self.assertEqual('et-0/1/0', IFDs[0].name)
            self.assertEqual('et-0/1/1', IFDs[1].name)
            self.assertEqual('et-0/1/2', IFDs[2].name)
            self.assertEqual('et-0/1/3', IFDs[3].name)
            self.assertEqual('uplink-4', IFDs[4].name)
            self.assertEqual('uplink-5', IFDs[5].name)

    def createSixSpineOneLeafEx4300_24pPlugNPlay(self, session):
        from test_model import createPod
        pod = createPod('pod1', session)
        from test_model import createPodDevice
        spine1 = createPodDevice(session, 'spine1', pod)
        spine2 = createPodDevice(session, 'spine2', pod)
        spine3 = createPodDevice(session, 'spine3', pod)
        spine4 = createPodDevice(session, 'spine4', pod)
        spine5 = createPodDevice(session, 'spine5', pod)
        spine6 = createPodDevice(session, 'spine6', pod)
        leaf1 = createPodDevice(session, 'leaf1', pod)
        leaf1.role = 'leaf'
        leaf1.family = 'ex4300-24p'

        IFDs = [
            InterfaceDefinition('et-0/0/0', spine1, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine2, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine3, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine4, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine5, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine6, 'downlink'),
            InterfaceDefinition('et-0/1/0', leaf1, 'uplink'),
            InterfaceDefinition('et-0/1/1', leaf1, 'uplink'),
            InterfaceDefinition('et-0/1/2', leaf1, 'uplink'),
            InterfaceDefinition('et-0/1/3', leaf1, 'uplink'),
            InterfaceDefinition('uplink-4', leaf1, 'uplink'),
            InterfaceDefinition('uplink-5', leaf1, 'uplink')
        ]
        session.add_all(IFDs)

        IFLs = self.createIfls(session, IFDs)

        IFDs[6].peer = IFDs[0]
        IFDs[0].peer = IFDs[6]
        IFDs[7].peer = IFDs[1]
        IFDs[1].peer = IFDs[7]
        IFDs[8].peer = IFDs[2]
        IFDs[2].peer = IFDs[8]
        IFDs[9].peer = IFDs[3]
        IFDs[3].peer = IFDs[9]
        IFDs[10].peer = IFDs[4]
        IFDs[4].peer = IFDs[10]
        IFDs[11].peer = IFDs[5]
        IFDs[5].peer = IFDs[11]

        return {'ifds': IFDs, 'ifls': IFLs}

    def testFixUplinkPortsEx4300ToQfx5100_48sSpineCount2RandomPorts(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafEx4300_24pPlugNPlay(session)
            IFDs = ifdIfl['ifds']
            IFLs = ifdIfl['ifls']
            self.configurator._session = session

            lldpUplinksWithIfdFromLeaf2 = [{
                'device1': None,
                'port1': 'et-0/0/49',
                'device2': 'spine1',
                'port2': 'et-0/0/0',
                'ifd2': IFDs[0]
            }, {
                'device1': None,
                'port1': 'et-0/0/52',
                'device2': 'spine2',
                'port2': 'et-0/0/0',
                'ifd2': IFDs[1]
            }]
            self.assertEqual(
                'et-0/1/1',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[7].id).one().name)
            self.assertEqual(
                'uplink-4',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[10].id).one().name)
            self.assertEqual(
                'et-0/1/1.0',
                session.query(InterfaceLogical).filter(
                    InterfaceLogical.id == IFLs[7].id).one().name)
            self.assertEqual(
                'uplink-4.0',
                session.query(InterfaceLogical).filter(
                    InterfaceLogical.id == IFLs[10].id).one().name)

            IFDs[6].device.family = 'qfx5100-48s-6q'
            self.configurator.fixUplinkPorts(IFDs[6].device,
                                             lldpUplinksWithIfdFromLeaf2)

            IFDs = session.query(InterfaceDefinition).filter(
                InterfaceDefinition.device_id == IFDs[6].device.id).filter(
                    InterfaceDefinition.role == 'uplink').all()
            self.assertEqual('et-0/0/49', IFDs[1].name)
            self.assertEqual('et-0/0/52', IFDs[4].name)
            self.assertEqual('et-0/0/49.0', IFDs[1].layerAboves[0].name)
            self.assertEqual('et-0/0/52.0', IFDs[4].layerAboves[0].name)

            self.assertEqual('et-0/0/48', IFDs[0].name)
            self.assertEqual('et-0/0/50', IFDs[2].name)
            self.assertEqual('et-0/0/51', IFDs[3].name)
            self.assertEqual('et-0/0/53', IFDs[5].name)

    def createSixSpineOneLeafqfx5100_48sPlugNPlay(self, session):
        from test_model import createPod
        pod = createPod('pod1', session)
        from test_model import createPodDevice
        spine1 = createPodDevice(session, 'spine1', pod)
        spine2 = createPodDevice(session, 'spine2', pod)
        spine3 = createPodDevice(session, 'spine3', pod)
        spine4 = createPodDevice(session, 'spine4', pod)
        spine5 = createPodDevice(session, 'spine5', pod)
        spine6 = createPodDevice(session, 'spine6', pod)
        leaf1 = createPodDevice(session, 'leaf1', pod)
        leaf1.role = 'leaf'
        leaf1.family = 'qfx5100-48s-6q'

        IFDs = [
            InterfaceDefinition('et-0/0/0', spine1, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine2, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine3, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine4, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine5, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine6, 'downlink'),
            InterfaceDefinition('et-0/0/48', leaf1, 'uplink'),
            InterfaceDefinition('et-0/0/49', leaf1, 'uplink'),
            InterfaceDefinition('et-0/0/50', leaf1, 'uplink'),
            InterfaceDefinition('et-0/0/51', leaf1, 'uplink'),
            InterfaceDefinition('et-0/0/52', leaf1, 'uplink'),
            InterfaceDefinition('et-0/0/53', leaf1, 'uplink')
        ]
        session.add_all(IFDs)

        IFLs = self.createIfls(session, IFDs)

        IFDs[6].peer = IFDs[0]
        IFDs[0].peer = IFDs[6]
        IFDs[7].peer = IFDs[1]
        IFDs[1].peer = IFDs[7]
        IFDs[8].peer = IFDs[2]
        IFDs[2].peer = IFDs[8]
        IFDs[9].peer = IFDs[3]
        IFDs[3].peer = IFDs[9]
        IFDs[10].peer = IFDs[4]
        IFDs[4].peer = IFDs[10]
        IFDs[11].peer = IFDs[5]
        IFDs[5].peer = IFDs[11]

        return {'ifds': IFDs, 'ifls': IFLs}

    def testFixUplinkPortsQfx5100_48sToEx4300SpineCount2RandomPorts(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createSixSpineOneLeafqfx5100_48sPlugNPlay(session)
            IFDs = ifdIfl['ifds']
            IFLs = ifdIfl['ifls']
            self.configurator._session = session

            lldpUplinksWithIfdFromLeaf2 = [{
                'device1': None,
                'port1': 'et-0/1/3',
                'device2': 'spine1',
                'port2': 'et-0/0/0',
                'ifd2': IFDs[0]
            }, {
                'device1': None,
                'port1': 'et-0/1/2',
                'device2': 'spine2',
                'port2': 'et-0/0/0',
                'ifd2': IFDs[1]
            }]
            self.assertEqual(
                'et-0/0/51',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[9].id).one().name)
            self.assertEqual(
                'et-0/0/50',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[8].id).one().name)
            self.assertEqual(
                'et-0/0/51.0',
                session.query(InterfaceLogical).filter(
                    InterfaceLogical.id == IFLs[9].id).one().name)
            self.assertEqual(
                'et-0/0/50.0',
                session.query(InterfaceLogical).filter(
                    InterfaceLogical.id == IFLs[8].id).one().name)

            IFDs[6].device.family = 'ex4300-24p'
            self.configurator.fixUplinkPorts(IFDs[6].device,
                                             lldpUplinksWithIfdFromLeaf2)

            IFDs = session.query(InterfaceDefinition).filter(
                InterfaceDefinition.device_id == IFDs[6].device.id).filter(
                    InterfaceDefinition.role == 'uplink').all()
            self.assertEqual('et-0/1/3', IFDs[3].name)
            self.assertEqual('et-0/1/2', IFDs[2].name)
            self.assertEqual('et-0/1/3.0', IFDs[3].layerAboves[0].name)
            self.assertEqual('et-0/1/2.0', IFDs[2].layerAboves[0].name)

            self.assertEqual('et-0/1/0', IFDs[0].name)
            self.assertEqual('et-0/1/1', IFDs[1].name)
            self.assertEqual('uplink-4', IFDs[4].name)
            self.assertEqual('uplink-5', IFDs[5].name)

    def createTwoSpineTwoLeafPlugNPlay(self, session):
        from test_model import createPod
        pod = createPod('pod1', session)
        from test_model import createPodDevice
        spine1 = createPodDevice(session, 'spine1', pod)
        spine2 = createPodDevice(session, 'spine2', pod)
        leaf1 = createPodDevice(session, 'leaf1', pod)
        leaf1.role = 'leaf'
        leaf1.family = 'qfx5100-48s-6q'
        leaf2 = createPodDevice(session, 'leaf2', pod)
        leaf2.role = 'leaf'
        leaf2.family = 'unknown'

        IFDs = [
            InterfaceDefinition('et-0/0/0', spine1, 'downlink'),
            InterfaceDefinition('et-0/0/1', spine1, 'downlink'),
            InterfaceDefinition('et-0/0/0', spine2, 'downlink'),
            InterfaceDefinition('et-0/0/1', spine2, 'downlink'),
            InterfaceDefinition('et-0/0/48', leaf1, 'uplink'),
            InterfaceDefinition('et-0/0/49', leaf1, 'uplink'),
            InterfaceDefinition('uplink-1', leaf2, 'uplink'),
            InterfaceDefinition('uplink-2', leaf2, 'uplink')
        ]
        session.add_all(IFDs)

        IFLs = self.createIfls(session, IFDs)

        IFDs[4].peer = IFDs[0]
        IFDs[0].peer = IFDs[4]
        IFDs[5].peer = IFDs[2]
        IFDs[2].peer = IFDs[5]

        IFDs[6].peer = IFDs[1]
        IFDs[1].peer = IFDs[6]
        IFDs[7].peer = IFDs[3]
        IFDs[3].peer = IFDs[7]

        return {'ifds': IFDs, 'ifls': IFLs}

    def testFixUplinkPortsUnknownToQfx5100_48s(self):
        with self._dao.getReadSession() as session:
            ifdIfl = self.createTwoSpineTwoLeafPlugNPlay(session)
            IFDs = ifdIfl['ifds']
            IFLs = ifdIfl['ifls']
            self.configurator._session = session

            lldpUplinksWithIfdFromLeaf2 = [{
                'device1': None,
                'port1': 'et-0/0/48',
                'device2': 'spine1',
                'port2': 'et-0/0/1',
                'ifd2': IFDs[1]
            }, {
                'device1': None,
                'port1': 'et-0/0/49',
                'device2': 'spine2',
                'port2': 'et-0/0/1',
                'ifd2': IFDs[3]
            }]
            self.assertEqual(
                'uplink-1',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[6].id).one().name)
            self.assertEqual(
                'uplink-2',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[7].id).one().name)
            self.assertEqual(
                'uplink-1.0',
                session.query(InterfaceLogical).filter(
                    InterfaceLogical.id == IFLs[6].id).one().name)
            self.assertEqual(
                'uplink-2.0',
                session.query(InterfaceLogical).filter(
                    InterfaceLogical.id == IFLs[7].id).one().name)

            IFDs[6].device.family = 'qfx5100-48s-6q'
            self.configurator.fixUplinkPorts(IFDs[6].device,
                                             lldpUplinksWithIfdFromLeaf2)

            self.assertEqual(
                'et-0/0/48',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[6].id).one().name)
            self.assertEqual(
                'et-0/0/49',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[7].id).one().name)
            self.assertEqual(
                'et-0/0/48.0',
                session.query(InterfaceLogical).filter(
                    InterfaceLogical.id == IFLs[6].id).one().name)
            self.assertEqual(
                'et-0/0/49.0',
                session.query(InterfaceLogical).filter(
                    InterfaceLogical.id == IFLs[7].id).one().name)

    @unittest.skip("")
    def testMatchDevice(self):
        self.configurator.findMatchedDevice(self.getLldpData(),
                                            'qfx5100-96s-8q')