def setupRestWithTwoPods(self): from test_model import createPod restServer = RestServer(self.conf) session = restServer.dao.Session() self.ipFabric1 = createPod("test1", session) self.ipFabric2 = createPod("test2", session) restServer.initRest() return TestApp(restServer.app)
def setupRestWithTwoPods(self): from test_model import createPod restServer = RestServer(self.conf) session = restServer.dao.Session() self.ipFabric1 = createPod("test1", session) self.ipFabric2 = createPod("test2", session) restServer.initRest() return TestApp(restServer.app)
def testcreateLinksInGraph(self): testLinksInTopology = pydot.Dot(graph_type='graph') pod = createPod('pod1', self.dao.Session()) cablingPlanWriter = CablingPlanWriter(self.conf, pod, self.dao) deviceOne = Device('spine01', "", 'admin', 'admin', 'spine', "", "", pod) deviceOne.id = 'spine01' IF1 = InterfaceDefinition('IF1', deviceOne, 'downlink') IF1.id = 'IF1' deviceTwo = Device('leaf01', "", 'admin', 'admin', 'leaf', "", "", pod) deviceTwo.id = 'leaf01' IF21 = InterfaceDefinition('IF1', deviceTwo, 'uplink') IF21.id = 'IF21' IF1.peer = IF21 IF21.peer = IF1 linkLabel = {deviceOne.id + ':' + IF1.id: deviceTwo.id + ':' + IF21.id} cablingPlanWriter.createLinksInGraph(linkLabel, testLinksInTopology, 'red') path = cablingPlanWriter.outputDir + '/testLinklabel.dot' testLinksInTopology.write_raw(path) data = open(path, 'r').read() #check generated label for links self.assertTrue('spine01:IF1 -- leaf01:IF21 [color=red];' in data)
def testGeneratePodSpecificDhcpConfWithSerial(self): from jnpr.openclos.l3Clos import util flexmock(util, isPlatformUbuntu=True) with self._dao.getReadWriteSession() as session: pod = createPod('pod1', session) pod.spineJunosImage = 'testSpineImage' createPodDevice(session, 'dev1', pod) dev2 = createPodDevice(session, 'dev2', pod) dev2.macAddress = None dev2.serialNumber = 'VB1234567890' dev3 = createPodDevice(session, 'dev3', pod) dev3.role = 'leaf' dev3.serialNumber = 'VB1234567891' dhcpConf = self.ztpServer.generatePodSpecificDhcpConf( session, pod.id) print dhcpConf self.assertEquals(2, dhcpConf.count('testSpineImage')) self.assertFalse('{{' in dhcpConf) self.assertFalse('}}' in dhcpConf) self.assertFalse('None' in dhcpConf) self.assertTrue('VB1234567890' in dhcpConf) self.assertTrue('VB1234567891' not in dhcpConf) self.assertEquals( 5, dhcpConf.count('host-name') ) # 1 global class + 1 subnet + 2 device mac + 1 device serial
def setupRestWithPodAndGenericConfig(self, session): from test_model import createPod from jnpr.openclos.model import LeafSetting self.pod1 = createPod("test1", session) leafSetting = LeafSetting('qfx5100-48s-6q', self.pod1.id, config = "testConfig abcd") self.pod1.leafSettings = [leafSetting] session.merge(self.pod1)
def testGeneratePodSpecificDhcpConfWithSerial(self): from jnpr.openclos.l3Clos import util flexmock(util, isPlatformUbuntu = True) with self._dao.getReadWriteSession() as session: pod = createPod('pod1', session) pod.spineJunosImage = 'testSpineImage' createPodDevice(session, 'dev1', pod) dev2 = createPodDevice(session, 'dev2', pod) dev2.macAddress = None dev2.serialNumber = 'VB1234567890' dev3 = createPodDevice(session, 'dev3', pod) dev3.role = 'leaf' dev3.serialNumber = 'VB1234567891' dhcpConf = self.ztpServer.generatePodSpecificDhcpConf(session, pod.id) print dhcpConf self.assertEquals(2, dhcpConf.count('testSpineImage')) self.assertFalse('{{' in dhcpConf) self.assertFalse('}}' in dhcpConf) self.assertFalse('None' in dhcpConf) self.assertTrue('VB1234567890' in dhcpConf) self.assertTrue('VB1234567891' not in dhcpConf) self.assertEquals(5, dhcpConf.count('host-name')) # 1 global class + 1 subnet + 2 device mac + 1 device serial
def testGeneratePodSpecificDhcpConfFor2StageZtp(self): from jnpr.openclos.l3Clos import util flexmock(util, isPlatformUbuntu = True) flexmock(util, isZtpStaged = True) with self._dao.getReadWriteSession() as session: pod = createPod('pod1', session) pod.spineJunosImage = 'testSpineImage' pod.leafSettings.append(LeafSetting('ex4300-24p', pod.id)) dev1 = createPodDevice(session, 'dev1', pod) dev2 = createPodDevice(session, 'dev2', pod) dev3 = createPodDevice(session, 'dev3', pod) dev3.role = 'leaf' dev4 = createPodDevice(session, 'dev4', pod) dev4.role = 'leaf' dhcpConf = self.ztpServer.generatePodSpecificDhcpConf(session, pod.id) self.assertEquals(2, dhcpConf.count('testSpineImage')) self.assertFalse('{{' in dhcpConf) self.assertFalse('}}' in dhcpConf) self.assertFalse('None' in dhcpConf) self.assertEquals(3, dhcpConf.count('host-name')) # 1 global + 2 spine device self.assertEquals(1, dhcpConf.count('pool')) self.assertEquals(2, dhcpConf.count('class ')) self.assertEquals(4, dhcpConf.count('vendor-class-identifier'))
def testGetObjectById(self): from test_model import createPod with self.__dao.getReadWriteSession() as session: pod = createPod("test", session) with self.__dao.getReadSession() as session: self.assertEqual(1, len(self.__dao.getAll(session, Pod)))
def testGeneratePodSpecificDhcpConfFor2StageZtp(self): from jnpr.openclos.l3Clos import util flexmock(util, isPlatformUbuntu=True) flexmock(util, isZtpStaged=True) with self._dao.getReadWriteSession() as session: pod = createPod('pod1', session) pod.spineJunosImage = 'testSpineImage' pod.leafSettings.append(LeafSetting('ex4300-24p', pod.id)) dev1 = createPodDevice(session, 'dev1', pod) dev2 = createPodDevice(session, 'dev2', pod) dev3 = createPodDevice(session, 'dev3', pod) dev3.role = 'leaf' dev4 = createPodDevice(session, 'dev4', pod) dev4.role = 'leaf' dhcpConf = self.ztpServer.generatePodSpecificDhcpConf( session, pod.id) self.assertEquals(2, dhcpConf.count('testSpineImage')) self.assertFalse('{{' in dhcpConf) self.assertFalse('}}' in dhcpConf) self.assertFalse('None' in dhcpConf) self.assertEquals( 3, dhcpConf.count('host-name')) # 1 global + 2 spine device self.assertEquals(1, dhcpConf.count('pool')) self.assertEquals(2, dhcpConf.count('class ')) self.assertEquals(4, dhcpConf.count('vendor-class-identifier'))
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 testWrite(self): pod = createPod('pod1', self.dao.Session()) device = Device('test_device', "", 'admin', 'admin', 'spine', "", "", pod) configWriter = ConfigWriter(self.conf, pod, self.dao) configWriter.write(device, "dummy config") self.assertTrue( os.path.exists(configWriter.outputDir + '/test_device.conf'))
def testInitWithTemplate(self): from jinja2 import TemplateNotFound pod = createPod('pod1', self.dao.Session()) cablingPlanWriter = CablingPlanWriter(self.conf, pod, self.dao) self.assertIsNotNone(cablingPlanWriter.template) with self.assertRaises(TemplateNotFound) as e: cablingPlanWriter.templateEnv.get_template('unknown-template') self.assertTrue('unknown-template' in e.exception.message)
def testInitWithTemplate(self): from jinja2 import TemplateNotFound pod = createPod('pod1', self.dao.Session()) cablingPlanWriter = CablingPlanWriter(self.conf, pod, self.dao) self.assertIsNotNone(cablingPlanWriter.template) with self.assertRaises(TemplateNotFound) as e: cablingPlanWriter.templateEnv.get_template('unknown-template') self.assertTrue('unknown-template' in e.exception.message)
def testGetInterconnectAllocation(self): from test_model import createPod pod = createPod("test", self.session) pod.allocatedInterConnectBlock = '1.2.3.4/24' pod.interConnectPrefix = '1.2.0.0' interconnectAllocation = self.report.getInterconnectAllocation("test") self.assertEqual('1.2.0.0', interconnectAllocation['block']) self.assertEqual('1.2.3.4/24', interconnectAllocation['allocated'])
def setupRestWithPodAndGenericConfig(self, session): from test_model import createPod from jnpr.openclos.model import LeafSetting self.pod1 = createPod("test1", session) leafSetting = LeafSetting('qfx5100-48s-6q', self.pod1.id, config="testConfig abcd") self.pod1.leafSettings = [leafSetting] session.merge(self.pod1)
def testGetInterconnectAllocation(self): from test_model import createPod pod = createPod("test", self.session) pod.allocatedInterConnectBlock = '1.2.3.4/24' pod.interConnectPrefix = '1.2.0.0' interconnectAllocation = self.report.getInterconnectAllocation("test") self.assertEqual('1.2.0.0', interconnectAllocation['block']) self.assertEqual('1.2.3.4/24', interconnectAllocation['allocated'])
def testCreateLeafAndIfds(self): with self._dao.getReadSession() as session: from test_model import createPod pod = createPod('test', session) pod.spineCount = 6 leaves = [{ "name" : "leaf-01", "family" : "ex4300-24p", "macAddress" : "88:e0:f3:1c:d6:01", "deployStatus": "deploy" }] self.l3ClosMediation._createLeafAndIfds(session, pod, leaves) interfaces = session.query(InterfaceDefinition).all() self.assertEqual(6, len(interfaces))
def testWriteConfigInFile(self): from jnpr.openclos.model import DeviceConfig self._conf['writeConfigInFile'] = True with self._dao.getReadWriteSession() as session: pod = createPod('pod1', session) device = Device('test_device', "",'admin', 'admin', 'spine', "", "", pod) device.config = DeviceConfig(device.id, "dummy config") configWriter = ConfigWriter(self._conf, pod, self._dao) configWriter.write(device) self.assertTrue(os.path.exists(os.path.join(configWriter.outputDir, device.id+'__test_device.conf')))
def testCreateAccessInterface(self): with self._dao.getReadSession() as session: from test_model import createPod pod = createPod('test', session) device = Device("test", "qfx5100-48s-6q", "user", "pwd", "leaf", "mac", "mgmtIp", pod) configlet = self.l3ClosMediation._createAccessPortInterfaces(session, device) self.assertEquals(96, configlet.count('family ethernet-switching')) self.assertTrue('xe-0/0/0' in configlet) self.assertTrue('xe-0/0/47' in configlet) self.assertTrue('ge-0/0/0' in configlet) self.assertTrue('ge-0/0/47' in configlet)
def testCreateAccessInterfaceEx4300(self): self._conf["deviceFamily"]["ex4300-48p"] = {"uplinkPorts": "et-0/0/[48-51]", "downlinkPorts": "ge-0/0/[0-47]"} self.l3ClosMediation = L3ClosMediation(self._conf, InMemoryDao) with self._dao.getReadSession() as session: from test_model import createPod pod = createPod("test", session) device = Device("test", "ex4300-48p", "user", "pwd", "leaf", "mac", "mgmtIp", pod) configlet = self.l3ClosMediation._createAccessPortInterfaces(session, device) self.assertEquals(48, configlet.count("family ethernet-switching")) self.assertTrue("ge-0/0/0" in configlet) self.assertTrue("ge-0/0/47" in configlet)
def testCreateDeviceInGraph(self): testDeviceTopology = pydot.Dot(graph_type='graph', ) pod = createPod('pod1', self.dao.Session()) cablingPlanWriter = CablingPlanWriter(self.conf, pod, self.dao) device = createPodDevice(self.dao.Session(), 'Preethi', pod) device.id = 'preethi-1' cablingPlanWriter.createDeviceInGraph(device.name, device, testDeviceTopology) path = cablingPlanWriter.outputDir + '/testDevicelabel.dot' testDeviceTopology.write_raw(path) data = open(path, 'r').read() #check the generated label for device self.assertTrue('"preethi-1" [shape=record, label=Preethi];' in data)
def testcreateDOTFile(self): # create pod # create device #create interface with self._dao.getReadWriteSession() as session: pod = createPod('pod1', session) cablingPlanWriter = CablingPlanWriter(self._conf, pod, self._dao) #check the DOT file is generated cablingPlanWriter.writeDOT() data = open(cablingPlanWriter.outputDir + '/cablingPlan.dot', 'r').read() #check generated label for links self.assertTrue('splines=polyline;' in data)
def testCreateAccessInterface(self): with self._dao.getReadSession() as session: from test_model import createPod pod = createPod('test', session) device = Device("test", "qfx5100-48s-6q", "user", "pwd", "leaf", "mac", "mgmtIp", pod) configlet = self.l3ClosMediation._createAccessPortInterfaces( session, device) self.assertEquals(96, configlet.count('family ethernet-switching')) self.assertTrue('xe-0/0/0' in configlet) self.assertTrue('xe-0/0/47' in configlet) self.assertTrue('ge-0/0/0' in configlet) self.assertTrue('ge-0/0/47' in configlet)
def testcreateDOTFile(self): # create pod # create device #create interface session = self.dao.Session() pod = createPod('pod1', session) cablingPlanWriter = CablingPlanWriter(self.conf, pod, self.dao) deviceOne = Device('spine01', "", 'admin', 'admin', 'spine', "", "", pod) session.add(deviceOne) IF1 = InterfaceDefinition('IF1', deviceOne, 'downlink') session.add(IF1) IF2 = InterfaceDefinition('IF2', deviceOne, 'downlink') session.add(IF2) deviceTwo = Device('leaf01', "", 'admin', 'admin', 'leaf', "", "", pod) session.add(deviceTwo) IF21 = InterfaceDefinition('IF1', deviceTwo, 'uplink') session.add(IF21) IF22 = InterfaceDefinition('IF2', deviceTwo, 'uplink') session.add(IF22) IF23 = InterfaceDefinition('IF3', deviceTwo, 'downlink') session.add(IF23) IF24 = InterfaceDefinition('IF3', deviceTwo, 'downlink') session.add(IF24) deviceThree = Device('Access01', "", 'admin', 'admin', 'leaf', "", "", pod) session.add(deviceThree) IF31 = InterfaceDefinition('IF1', deviceThree, 'uplink') session.add(IF31) IF32 = InterfaceDefinition('IF2', deviceThree, 'uplink') session.add(IF32) IF1.peer = IF21 IF2.peer = IF22 IF21.peer = IF1 IF22.peer = IF2 IF23.peer = IF31 IF31.peer = IF23 IF24.peer = IF32 IF32.peer = IF24 session.commit() devices = session.query(Device).all() #check the DOT file is generated cablingPlanWriter.writeDOT() data = open(cablingPlanWriter.outputDir + '/cablingPlan.dot', 'r').read() #check generated label for links self.assertTrue('splines=polyline;' in data)
def testStoreBgpLinks(self): device_id = None with self._dao.getReadWriteSession() as session: from test_model import createPod pod = createPod("pod1", session) session.add(pod) device = Device("leaf1", "qfx5100-48s-6q", "", "", "leaf", "11:12:13:14:15:16", "1.2.3.4/24", pod) device_id = device.id session.add(device) with self._dao.getReadSession() as session: dataCollector = L3DataCollector(device_id, {}, InMemoryDao) dataCollector.manualInit() dataCollector._session = session bgpLinks = [ { "device1": "leaf1", "device1as1": 401, "device1Ip": "192.169.0.3+179", "device2": None, "device2as": 300, "device2Ip": "192.169.0.2+57574", "inputMsgCount": 16764, "outputMsgCount": 16811, "outQueueCount": 0, "linkState": "Established", "active/receive/acceptCount": "3/3/3", }, { "device1": "leaf1", "device1as1": 401, "device1Ip": "192.169.0.11+179", "device2": None, "device2as": 301, "device2Ip": "192.169.0.10+49383", "inputMsgCount": 16816, "outputMsgCount": 16810, "outQueueCount": 0, "linkState": "Established", "active/receive/acceptCount": "2/2/2", }, ] dataCollector.persistBgpLinks(bgpLinks) bgpLinks = session.query(BgpLink).filter(BgpLink.device_id == device_id).all() self.assertEqual("192.169.0.3+179", bgpLinks[0].device1Ip) self.assertEqual("192.169.0.11+179", bgpLinks[1].device1Ip)
def testcreateDOTFile(self): # create pod # create device #create interface session = self.dao.Session() pod = createPod('pod1', session) cablingPlanWriter = CablingPlanWriter(self.conf, pod, self.dao) deviceOne = Device('spine01',"", 'admin', 'admin', 'spine', "", "", pod) session.add(deviceOne) IF1 = InterfaceDefinition('IF1', deviceOne, 'downlink') session.add(IF1) IF2 = InterfaceDefinition('IF2', deviceOne, 'downlink') session.add(IF2) deviceTwo = Device('leaf01',"", 'admin', 'admin', 'leaf', "", "", pod) session.add(deviceTwo) IF21 = InterfaceDefinition('IF1', deviceTwo, 'uplink') session.add(IF21) IF22 = InterfaceDefinition('IF2', deviceTwo, 'uplink') session.add(IF22) IF23 = InterfaceDefinition('IF3', deviceTwo, 'downlink') session.add(IF23) IF24 = InterfaceDefinition('IF3', deviceTwo, 'downlink') session.add(IF24) deviceThree = Device('Access01', "",'admin', 'admin', 'leaf', "", "", pod) session.add(deviceThree) IF31 = InterfaceDefinition('IF1', deviceThree, 'uplink') session.add(IF31) IF32 = InterfaceDefinition('IF2', deviceThree, 'uplink') session.add(IF32) IF1.peer = IF21 IF2.peer = IF22 IF21.peer = IF1 IF22.peer = IF2 IF23.peer = IF31 IF31.peer = IF23 IF24.peer = IF32 IF32.peer = IF24 session.commit() devices = session.query(Device).all() #check the DOT file is generated cablingPlanWriter.writeDOT() data = open(cablingPlanWriter.outputDir + '/cablingPlan.dot', 'r').read() #check generated label for links self.assertTrue('splines=polyline;' in data)
def testCreateLeafAndIfds(self): with self._dao.getReadSession() as session: from test_model import createPod pod = createPod('test', session) pod.spineCount = 6 leaves = [{ "name": "leaf-01", "family": "ex4300-24p", "macAddress": "88:e0:f3:1c:d6:01", "deployStatus": "deploy" }] self.l3ClosMediation._createLeafAndIfds(session, pod, leaves) interfaces = session.query(InterfaceDefinition).all() self.assertEqual(6, len(interfaces))
def createTwoSpineTwoLeafWithDummyUplinksForEx4300(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) leaf1 = createPodDevice(session, "leaf1", pod) leaf1.role = "leaf" leaf1.family = "qfx5100-48s-6q" leaf2 = createPodDevice(session, "leaf2", pod) leaf2.role = "leaf" leaf2.family = "qfx5100-48s-6q" 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/0", spine3, "downlink"), InterfaceDefinition("et-0/0/1", spine3, "downlink"), InterfaceDefinition("et-0/0/48", leaf1, "uplink"), InterfaceDefinition("et-0/0/49", leaf1, "uplink"), InterfaceDefinition("et-0/0/50", leaf2, "uplink"), InterfaceDefinition("et-0/0/48", leaf2, "uplink"), InterfaceDefinition("et-0/0/49", leaf2, "uplink"), InterfaceDefinition("dummy", leaf2, "uplink"), ] session.add_all(IFDs) IFDs[6].peer = IFDs[0] IFDs[0].peer = IFDs[6] IFDs[7].peer = IFDs[2] IFDs[2].peer = IFDs[7] IFDs[8].peer = IFDs[4] IFDs[4].peer = IFDs[8] IFDs[9].peer = IFDs[1] IFDs[1].peer = IFDs[9] IFDs[10].peer = IFDs[3] IFDs[3].peer = IFDs[10] IFDs[11].peer = IFDs[5] IFDs[5].peer = IFDs[11] return IFDs
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 testCreateAccessInterfaceEx4300(self): self._conf['deviceFamily']['ex4300-48p'] = { "uplinkPorts": 'et-0/0/[48-51]', "downlinkPorts": 'ge-0/0/[0-47]' } self.l3ClosMediation = L3ClosMediation(self._conf, InMemoryDao) with self._dao.getReadSession() as session: from test_model import createPod pod = createPod('test', session) device = Device("test", "ex4300-48p", "user", "pwd", "leaf", "mac", "mgmtIp", pod) configlet = self.l3ClosMediation._createAccessPortInterfaces( session, device) self.assertEquals(48, configlet.count('family ethernet-switching')) self.assertTrue('ge-0/0/0' in configlet) self.assertTrue('ge-0/0/47' in configlet)
def testStoreBgpLinks(self): device_id = None with self._dao.getReadWriteSession() as session: from test_model import createPod pod = createPod('pod1', session) session.add(pod) device = Device("leaf1", "qfx5100-48s-6q", "", "", "leaf", "11:12:13:14:15:16", "1.2.3.4/24", pod) device_id = device.id session.add(device) with self._dao.getReadSession() as session: dataCollector = L3DataCollector(device_id, {}, InMemoryDao) dataCollector.manualInit() dataCollector._session = session bgpLinks = [{ 'device1': 'leaf1', 'device1as1': 401, 'device1Ip': '192.169.0.3+179', 'device2': None, 'device2as': 300, 'device2Ip': '192.169.0.2+57574', 'inputMsgCount': 16764, 'outputMsgCount': 16811, 'outQueueCount': 0, 'linkState': 'Established', 'active/receive/acceptCount': '3/3/3' }, { 'device1': 'leaf1', 'device1as1': 401, 'device1Ip': '192.169.0.11+179', 'device2': None, 'device2as': 301, 'device2Ip': '192.169.0.10+49383', 'inputMsgCount': 16816, 'outputMsgCount': 16810, 'outQueueCount': 0, 'linkState': 'Established', 'active/receive/acceptCount': '2/2/2' }] dataCollector.persistBgpLinks(bgpLinks) bgpLinks = session.query(BgpLink).filter( BgpLink.device_id == device_id).all() self.assertEqual('192.169.0.3+179', bgpLinks[0].device1Ip) self.assertEqual('192.169.0.11+179', bgpLinks[1].device1Ip)
def createTwoSpineTwoLeafWithDummyUplinksForEx4300(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) leaf1 = createPodDevice(session, 'leaf1', pod) leaf1.role = 'leaf' leaf1.family = 'qfx5100-48s-6q' leaf2 = createPodDevice(session, 'leaf2', pod) leaf2.role = 'leaf' leaf2.family = 'qfx5100-48s-6q' 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/0', spine3, 'downlink'), InterfaceDefinition('et-0/0/1', spine3, 'downlink'), InterfaceDefinition('et-0/0/48', leaf1, 'uplink'), InterfaceDefinition('et-0/0/49', leaf1, 'uplink'), InterfaceDefinition('et-0/0/50', leaf2, 'uplink'), InterfaceDefinition('et-0/0/48', leaf2, 'uplink'), InterfaceDefinition('et-0/0/49', leaf2, 'uplink'), InterfaceDefinition('dummy', leaf2, 'uplink') ] session.add_all(IFDs) IFDs[6].peer = IFDs[0] IFDs[0].peer = IFDs[6] IFDs[7].peer = IFDs[2] IFDs[2].peer = IFDs[7] IFDs[8].peer = IFDs[4] IFDs[4].peer = IFDs[8] IFDs[9].peer = IFDs[1] IFDs[1].peer = IFDs[9] IFDs[10].peer = IFDs[3] IFDs[3].peer = IFDs[10] IFDs[11].peer = IFDs[5] IFDs[5].peer = IFDs[11] return IFDs
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 testGeneratePodSpecificDhcpConf(self): from jnpr.openclos.l3Clos import util flexmock(util, isPlatformUbuntu = True) with self._dao.getReadWriteSession() as session: pod = createPod('pod1', session) pod.spineJunosImage = 'testSpineImage' createPodDevice(session, 'dev1', pod) dev2 = createPodDevice(session, 'dev2', pod) dev3 = createPodDevice(session, 'dev3', pod) dev3.role = 'leaf' dhcpConf = self.ztpServer.generatePodSpecificDhcpConf(session, pod.id) self.assertEquals(2, dhcpConf.count('testSpineImage')) self.assertFalse('{{' in dhcpConf) self.assertFalse('}}' in dhcpConf) self.assertFalse('None' in dhcpConf) self.assertEquals(4, dhcpConf.count('host-name')) # 1 global + 3 device
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 testGeneratePodSpecificDhcpConf(self): from jnpr.openclos.l3Clos import util flexmock(util, isPlatformUbuntu=True) with self._dao.getReadWriteSession() as session: pod = createPod('pod1', session) pod.spineJunosImage = 'testSpineImage' createPodDevice(session, 'dev1', pod) dev2 = createPodDevice(session, 'dev2', pod) dev3 = createPodDevice(session, 'dev3', pod) dev3.role = 'leaf' dhcpConf = self.ztpServer.generatePodSpecificDhcpConf( session, pod.id) self.assertEquals(2, dhcpConf.count('testSpineImage')) self.assertFalse('{{' in dhcpConf) self.assertFalse('}}' in dhcpConf) self.assertFalse('None' in dhcpConf) self.assertEquals(4, dhcpConf.count('host-name')) # 1 global + 3 device
def testStoreBgpLinks(self): device_id = None with self._dao.getReadWriteSession() as session: from test_model import createPod pod = createPod('pod1', session) session.add(pod) device = Device("leaf1", "qfx5100-48s-6q", "", "", "leaf", "11:12:13:14:15:16", "1.2.3.4/24", pod) device_id = device.id session.add(device) with self._dao.getReadSession() as session: dataCollector = L3DataCollector(device_id, {}, InMemoryDao) dataCollector.manualInit() dataCollector._session = session bgpLinks = [{'device1': 'leaf1', 'device1as1': 401, 'device1Ip': '192.169.0.3+179', 'device2': None, 'device2as': 300, 'device2Ip': '192.169.0.2+57574', 'inputMsgCount': 16764, 'outputMsgCount': 16811, 'outQueueCount': 0 , 'linkState' : 'Established', 'active/receive/acceptCount': '3/3/3'}, {'device1': 'leaf1', 'device1as1': 401, 'device1Ip': '192.169.0.11+179', 'device2': None, 'device2as': 301, 'device2Ip': '192.169.0.10+49383','inputMsgCount': 16816, 'outputMsgCount': 16810, 'outQueueCount': 0 , 'linkState' : 'Established', 'active/receive/acceptCount': '2/2/2'}] dataCollector.persistBgpLinks(bgpLinks) bgpLinks = session.query(BgpLink).filter(BgpLink.device_id == device_id).all() self.assertEqual('192.169.0.3+179', bgpLinks[0].device1Ip) self.assertEqual('192.169.0.11+179', bgpLinks[1].device1Ip)
def testGeneratePodSpecificDhcpConf(self): from jnpr.openclos.l3Clos import util flexmock(util, isPlatformUbuntu = True) pod = createPod('pod1', self.session) pod.spineJunosImage = 'testSpineImage' pod.leafJunosImage = 'testLeafImage' createPodDevice(self.session, 'dev1', pod) dev2 = createPodDevice(self.session, 'dev2', pod) dev3 = createPodDevice(self.session, 'dev3', pod) dev3.role = 'leaf' dev4 = createPodDevice(self.session, 'dev4', pod) dev4.role = 'unknown' dhcpConf = self.ztpServer.generatePodSpecificDhcpConf('pod1') self.assertEquals(2, dhcpConf.count('testSpineImage')) self.assertEquals(1, dhcpConf.count('testLeafImage')) self.assertFalse('{{' in dhcpConf) self.assertFalse('}}' in dhcpConf) self.assertEquals(5, dhcpConf.count('host-name')) # 1 global + 4 device
def createTwoSpineTwoLeafWithDummyUplinksForEx4300(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) leaf1 = createPodDevice(session, 'leaf1', pod) leaf1.role = 'leaf' leaf1.family = 'qfx5100-48s-6q' leaf2 = createPodDevice(session, 'leaf2', pod) leaf2.role = 'leaf' leaf2.family = 'qfx5100-48s-6q' 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/0', spine3, 'downlink'), InterfaceDefinition('et-0/0/1', spine3, 'downlink'), InterfaceDefinition('et-0/0/48', leaf1, 'uplink'), InterfaceDefinition('et-0/0/49', leaf1, 'uplink'), InterfaceDefinition('et-0/0/50', leaf2, 'uplink'), InterfaceDefinition('et-0/0/48', leaf2, 'uplink'), InterfaceDefinition('et-0/0/49', leaf2, 'uplink'), InterfaceDefinition('dummy', leaf2, 'uplink')] session.add_all(IFDs) IFDs[6].peer = IFDs[0] IFDs[0].peer = IFDs[6] IFDs[7].peer = IFDs[2] IFDs[2].peer = IFDs[7] IFDs[8].peer = IFDs[4] IFDs[4].peer = IFDs[8] IFDs[9].peer = IFDs[1] IFDs[1].peer = IFDs[9] IFDs[10].peer = IFDs[3] IFDs[3].peer = IFDs[10] IFDs[11].peer = IFDs[5] IFDs[5].peer = IFDs[11] return IFDs
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 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 testcreateLinksInGraph(self): testLinksInTopology = pydot.Dot(graph_type='graph') pod = createPod('pod1', self.dao.Session()) cablingPlanWriter = CablingPlanWriter(self.conf, pod, self.dao) deviceOne = Device('spine01',"", 'admin', 'admin', 'spine', "", "", pod) deviceOne.id = 'spine01' IF1 = InterfaceDefinition('IF1', deviceOne, 'downlink') IF1.id = 'IF1' deviceTwo = Device('leaf01',"", 'admin', 'admin', 'leaf', "", "", pod) deviceTwo.id = 'leaf01' IF21 = InterfaceDefinition('IF1', deviceTwo, 'uplink') IF21.id = 'IF21' IF1.peer = IF21 IF21.peer = IF1 linkLabel = {deviceOne.id + ':' + IF1.id : deviceTwo.id + ':' + IF21.id} cablingPlanWriter.createLinksInGraph(linkLabel, testLinksInTopology, 'red') path = cablingPlanWriter.outputDir + '/testLinklabel.dot' testLinksInTopology.write_raw(path) data = open(path, 'r').read() #check generated label for links self.assertTrue('spine01:IF1 -- leaf01:IF21 [color=red];' in data)
def testGeneratePodSpecificDhcpConf(self): from jnpr.openclos.l3Clos import util flexmock(util, isPlatformUbuntu=True) pod = createPod('pod1', self.session) pod.spineJunosImage = 'testSpineImage' pod.leafJunosImage = 'testLeafImage' createPodDevice(self.session, 'dev1', pod) dev2 = createPodDevice(self.session, 'dev2', pod) dev3 = createPodDevice(self.session, 'dev3', pod) dev3.role = 'leaf' dev4 = createPodDevice(self.session, 'dev4', pod) dev4.role = 'unknown' dhcpConf = self.ztpServer.generatePodSpecificDhcpConf('pod1') self.assertEquals(2, dhcpConf.count('testSpineImage')) self.assertEquals(1, dhcpConf.count('testLeafImage')) self.assertFalse('{{' in dhcpConf) self.assertFalse('}}' in dhcpConf) self.assertEquals(5, dhcpConf.count('host-name')) # 1 global + 4 device
def testGetObjectById(self): from test_model import createPod #self.conf['debugSql'] = True dao = Dao(self.conf) session = dao.Session() pod = createPod("test", session)
def testWrite(self): pod = createPod('pod1', self.dao.Session()) device = Device('test_device', "",'admin', 'admin', 'spine', "", "", pod) configWriter = ConfigWriter(self.conf, pod, self.dao) configWriter.write(device, "dummy config") self.assertTrue(os.path.exists(os.path.join(configWriter.outputDir, device.id+'-test_device.conf')))
def setupRestWithTwoPods(self, session): from test_model import createPod self.pod1 = createPod("test1", session) self.pod2 = createPod("test2", session)
def testGenerateL3Report(self): l3Report = L3Report(self.__conf, self._dao) from test_model import createPod with self._dao.getReadSession() as session: pod = createPod("test", session) l3Report.generateReport(pod.id, True, False)
def setupRestWithTwoPods(self, session): from test_model import createPod self.pod1 = createPod("test1", session) self.pod2 = createPod("test2", session)
def testGetObjectById(self): from test_model import createPod #self.conf['debugSql'] = True dao = Dao(self.conf) session = dao.Session() pod = createPod("test", session)
def testGenerateL3Report(self): l3Report = L3Report(self.__conf, self._dao) from test_model import createPod with self._dao.getReadSession() as session: pod = createPod("test", session) l3Report.generateReport(pod.id, True, False)