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