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 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 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()
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')
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")
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')