예제 #1
0
    def testUpdateGoodIfdStatus(self):
        with self._dao.getReadSession() as session:
            IFDs = self.createTwoSpineTwoLeaf(session)
            dataCollector = L2DataCollector(IFDs[4].device.id, {}, InMemoryDao)
            dataCollector.manualInit()
            dataCollector._session = session
            dataCollector.device = IFDs[4].device

            dataCollector.updateGoodIfdStatus([IFDs[4], IFDs[5]])

            self.assertEqual(
                'good',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[4].id).one().status)
            self.assertEqual(
                'good',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[5].id).one().status)
            self.assertEqual(
                'good',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[0].id).one().status)
            self.assertEqual(
                'good',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[2].id).one().status)
            self.assertEqual(
                'unknown',
                session.query(InterfaceDefinition).filter(
                    InterfaceDefinition.id == IFDs[6].id).one().status)

            spine = IFDs[0].device
            self.assertEqual('deploy', spine.deployStatus)
            self.assertEqual('good', spine.configStatus)
            self.assertEqual('good', spine.l2Status)
예제 #2
0
    def testUpdateDeviceL2StatusProcessing(self):
        from test_model import createDevice
        with self._dao.getReadSession() as session:
            leaf = createDevice(session, 'leaf')
            dataCollector = L2DataCollector(leaf.id, {}, InMemoryDao)
            dataCollector.manualInit()
            dataCollector._session = session

            dataCollector.updateDeviceL2Status("processing")
            self.assertEqual(leaf.l2Status, "processing")
            self.assertIsNone(leaf.l2StatusReason)
예제 #3
0
    def testCollectLldpFromDevice(self):
        flexmock(self._dao).should_receive('getObjectById').and_return(
            Device("test", "qfx5100-96s-8q", "root", "abcd1234", "leaf", "",
                   "192.168.48.219", None))

        dataCollector = L2DataCollector('1234', self.__conf, InMemoryDao)
        dataCollector._dao = self._dao
        dataCollector.manualInit()

        dataCollector.connectToDevice()
        dataCollector.collectLldpFromDevice()
예제 #4
0
    def testUpdateDeviceL2StatusWithErrorMessage(self):
        from test_model import createDevice
        with self._dao.getReadSession() as session:
            leaf = createDevice(session, 'leaf')
            dataCollector = L2DataCollector(leaf.id, {}, InMemoryDao)
            dataCollector.manualInit()
            dataCollector._session = session

            dataCollector.updateDeviceL2Status("error", "test reason")
            self.assertEqual("error", leaf.l2Status)
            self.assertEqual("test reason", leaf.l2StatusReason)
예제 #5
0
    def testUpdateDeviceL2StatusWithException(self):
        from test_model import createDevice
        with self._dao.getReadSession() as session:
            leaf = createDevice(session, 'leaf')
            dataCollector = L2DataCollector(leaf.id, {}, InMemoryDao)
            dataCollector.manualInit()
            dataCollector._session = session

            dataCollector.updateDeviceL2Status(
                None,
                error=DeviceRpcFailed("", cause=ValueError("test error")))
            self.assertEqual("error", leaf.l2Status)
            self.assertEqual("test error", leaf.l2StatusReason)
예제 #6
0
    def testGetAllocatedConnectedUplinkIfds(self):
        from test_model import createDevice
        with self._dao.getReadSession() as session:
            leaf = createDevice(session, 'leaf')
            dataCollector = L2DataCollector(leaf.id, {}, InMemoryDao)
            dataCollector.manualInit()
            dataCollector._session = session
            flexmock(session).should_receive('query.filter.filter.filter.order_by.all').\
            and_return([InterfaceDefinition("et-0/0/48", None, 'uplink'), InterfaceDefinition("et-0/0/49", None, 'uplink'), InterfaceDefinition("et-0/0/50", None, 'uplink')])

            ifds = dataCollector.getAllocatedConnectedUplinkIfds()
            self.assertIsNotNone(ifds['et-0/0/48'])
            self.assertTrue(isinstance(ifds['et-0/0/48'], InterfaceDefinition))
            self.assertIsNotNone(ifds['et-0/0/49'])
            self.assertIsNotNone(ifds['et-0/0/50'])
예제 #7
0
    def testProcessLlDpData(self):
        with self._dao.getReadSession() as session:
            IFDs = self.createTwoSpineTwoLeafWithDummyUplinksForEx4300(session)
            dataCollector = L2DataCollector(IFDs[11].device.id, {},
                                            InMemoryDao)
            dataCollector.manualInit()
            dataCollector._session = session
            dataCollector.device = IFDs[11].device

            lldpDataFromLeaf2 = {
                'et-0/0/48': {
                    'device1': None,
                    'port1': 'et-0/0/48',
                    'device2': 'spine1',
                    'port2': 'et-0/0/1'
                },  # perfect match
                'et-0/0/49': {
                    'device1': None,
                    'port1': 'et-0/0/49',
                    'device2': 'spine2',
                    'port2': 'et-0/0/99'
                },  # bad connect
                'et-0/0/51': {
                    'device1': None,
                    'port1': 'et-0/0/51',
                    'device2': 'spine9',
                    'port2': 'et-0/0/99'
                },  # additional
            }

            flexmock(dataCollector).should_receive(
                'persistAdditionalLinks').with_args(
                    [lldpDataFromLeaf2['et-0/0/51']]).times(1)
            flexmock(dataCollector).should_receive(
                'updateGoodIfdStatus').with_args([IFDs[9]]).times(1)
            flexmock(dataCollector).should_receive(
                'updateBadIfdStatus').with_args([IFDs[11], IFDs[10]]).times(1)
            #flexmock(dataCollector).should_receive('resetSpineStatus').with_args(IFDs[11].device.pod).times(1)

            counts = dataCollector.processLlDpData(lldpDataFromLeaf2, {
                'et-0/0/48': IFDs[9],
                'et-0/0/49': IFDs[10],
                'dummy': IFDs[11]
            })

            self.assertEqual(1, counts['goodUplinkCount'])
            self.assertEqual(2, counts['badUplinkCount'])
            self.assertEqual(1, counts['additionalLinkCount'])
예제 #8
0
    def testFilterUplinkAppendRemotePortIfd(self):
        with self._dao.getReadSession() as session:
            IFDs = self.createTwoSpineTwoLeaf(session)
            dataCollector = L2DataCollector(IFDs[4].device.id, {}, InMemoryDao)
            dataCollector.manualInit()
            dataCollector._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'
                },
                'mo': {}
            }

            uplinks = dataCollector.filterUplinkFromLldpData(
                lldpDataFromLeaf1, 'qfx5100-48s-6q')

            self.assertEqual(2, len(uplinks))
            self.assertIsNotNone(uplinks['et-0/0/48'])
            self.assertIsNotNone(uplinks['et-0/0/49'])
예제 #9
0
    def testUpdateSpineStatusFromLldpData(self):
        with self._dao.getReadSession() as session:
            IFDs = self.createTwoSpineTwoLeaf(session)
            dataCollector = L2DataCollector(IFDs[4].device.id, {}, InMemoryDao)
            dataCollector.manualInit()
            dataCollector._session = session

            uplinkData = [IFDs[0], IFDs[2], IFDs[6]]
            dataCollector.updateSpineStatusFromLldpData(uplinkData)

            spine = IFDs[0].device
            self.assertEqual('deploy', spine.deployStatus)
            self.assertEqual('good', spine.configStatus)
            self.assertEqual('good', spine.l2Status)

            spine = IFDs[2].device
            self.assertEqual('deploy', spine.deployStatus)
            self.assertEqual('good', spine.configStatus)
            self.assertEqual('good', spine.l2Status)

            spine = IFDs[6].device
            self.assertEqual('provision', spine.deployStatus)
            self.assertEqual('unknown', spine.configStatus)
            self.assertEqual('unknown', spine.l2Status)