/** * Copyright (c) 2016 Juniper Networks, Inc. All rights reserved. */ package net.juniper.contrail.vcenter; import java.util.UUID; import java.util.concurrent.ConcurrentSkipListMap; import java.io.IOException; import java.util.SortedMap; import org.apache.log4j.Logger; import org.powermock.core.classloader.annotations.PrepareForTest; import junit.framework.TestCase; import org.junit.Test; import org.junit.Before; import org.junit.FixMethodOrder; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import org.junit.runners.MethodSorters; import net.juniper.contrail.api.ApiConnector; import net.juniper.contrail.api.ApiConnectorMock; import net.juniper.contrail.api.types.VirtualNetwork; import net.juniper.contrail.api.types.Project; @RunWith(JUnit4.class) @PrepareForTest(VRouterNotifier.class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class VirtualNetworkInfoTest extends TestCase { public static VncDB vncDB; public static ApiConnector api; private static final Logger s_logger = Logger.getLogger(VirtualNetworkInfoTest.class); private final static String vnUuid1 = UUID.randomUUID().toString(); private final static String vnName1 = "BLUE"; private final static boolean externalIpam1 = false; private final static boolean ipPoolEnabled1 = true; private final static String subnetAddr1 = "10.1.0.0"; private final static String subnetMask1 = "255.255.0.0"; private final static String gatewayAddr1 = "10.1.0.1"; private final static String range1 = "10.1.0.2#430"; private final static short primaryVlanId1 = 100; private final static short isolatedVlanId1 = 101; public static VirtualNetworkInfo BLUE = new VirtualNetworkInfo(vnUuid1, vnName1, externalIpam1, ipPoolEnabled1, subnetAddr1, subnetMask1, range1, gatewayAddr1, primaryVlanId1, isolatedVlanId1); private final static String vnUuid2 = UUID.randomUUID().toString(); private final static String vnName2 = "RED"; private final static boolean externalIpam2 = false; private final static boolean ipPoolEnabled2 = true; private final static String subnetAddr2 = "192.168.2.0"; private final static String subnetMask2 = "255.255.255.0"; private final static String gatewayAddr2 = "192.168.2.1"; private final static String range2 = "192.168.2.2#230"; private final static short primaryVlanId2 = 200; private final static short isolatedVlanId2 = 201; public static VirtualNetworkInfo RED = new VirtualNetworkInfo(vnUuid2, vnName2, externalIpam2, ipPoolEnabled2, subnetAddr2, subnetMask2, range2, gatewayAddr2, primaryVlanId2, isolatedVlanId2); private final static String vnUuid3 = UUID.randomUUID().toString(); private final static String vnName3 = "STATIC_IP"; private final static boolean externalIpam3 = true; private final static boolean ipPoolEnabled3 = true; private final static String subnetAddr3 = "192.168.3.0"; private final static String subnetMask3 = "255.255.255.0"; private final static String gatewayAddr3 = "192.168.3.1"; private final static String range3 = "192.18.3.2#230"; private final static short primaryVlanId3 = 300; private final static short isolatedVlanId3 = 301; public static VirtualNetworkInfo STATIC_IP = new VirtualNetworkInfo(vnUuid3, vnName3, externalIpam3, ipPoolEnabled3, subnetAddr3, subnetMask3, range3, gatewayAddr3, primaryVlanId3, isolatedVlanId3); private final static String vnUuid4 = UUID.randomUUID().toString(); private final static String vnName4 = "STATIC_IP2"; private final static boolean externalIpam4 = true; private final static boolean ipPoolEnabled4 = true; private final static String subnetAddr4 = "192.168.4.0"; private final static String subnetMask4 = "255.255.255.0"; private final static String gatewayAddr4 = "192.168.4.1"; private final static String range4 = "192.18.4.2#230"; private final static short primaryVlanId4 = 400; private final static short isolatedVlanId4 = 401; public static VirtualNetworkInfo STATIC_IP2 = new VirtualNetworkInfo(vnUuid4, vnName4, externalIpam4, ipPoolEnabled4, subnetAddr4, subnetMask4, range4, gatewayAddr4, primaryVlanId4, isolatedVlanId4); public static VirtualNetworkInfo newInstance(int selection) { switch (selection) { case 1: return new VirtualNetworkInfo(BLUE); case 2: return new VirtualNetworkInfo(RED); default: ; } return new VirtualNetworkInfo(BLUE); } @Before public void globalSetUp() throws IOException { api = new ApiConnectorMock(null, 0); assertNotNull(api); // Create default-domain,default-project Project vProject = new Project(); vProject.setName("default-project"); try { if (!api.create(vProject)) { s_logger.error("Unable to create project: " + vProject.getName()); fail("default-project creation failed"); return; } } catch (IOException e) { s_logger.error("Exception : " + e); e.printStackTrace(); fail("default-project creation failed"); return; } // Setup vnc object vncDB = new VncDB(null,0, Mode.VCENTER_ONLY); vncDB.setApiConnector(api); assertNotNull(vncDB.getApiConnector()); assertTrue(vncDB.isVncApiServerAlive()); assertTrue(vncDB.Initialize()); MainDB.vncDB = vncDB; } public static VirtualNetwork verifyVirtualNetworkPresent(VirtualNetworkInfo vnInfo) throws IOException { VirtualNetwork vn = (VirtualNetwork) api.findById(VirtualNetwork.class, vnInfo.getUuid()); assertNotNull(vn); assertEquals(vn.getUuid(), vnInfo.getUuid()); assertEquals(vn.getName(), vnInfo.getName()); assertNotNull(vn.getParentUuid()); assertNotNull(vnInfo.getProjectUuid()); return vn; } public static void verifyVirtualNetworkAbsent(VirtualNetworkInfo vnInfo) throws IOException { VirtualNetwork vn = (VirtualNetwork) api.findById(VirtualNetwork.class, vnInfo.getUuid()); assertNull(vn); } @Test public void testVirtualNetworkCreateDelete() throws IOException { VirtualNetworkInfo vnInfo = newInstance(1); try { vnInfo.create(vncDB); } catch (Exception e) { fail("Cannot create VN " + vnInfo); } // Verify virtual-network creation assertTrue(MainDB.getVNs().containsKey(vnInfo.getUuid())); verifyVirtualNetworkPresent(vnInfo); try { vnInfo.delete(vncDB); } catch (Exception e) { fail("Cannot delete VN " + vnInfo); e.printStackTrace(); } assertFalse(MainDB.getVNs().containsKey(vnInfo.getUuid())); verifyVirtualNetworkAbsent(vnInfo); } @Test public void testSyncVirtualNetwork() throws IOException { SortedMap<String, VirtualNetworkInfo> newVNs = new ConcurrentSkipListMap<String, VirtualNetworkInfo>(); VirtualNetworkInfo newVnInfo = newInstance(1); newVNs.put(newVnInfo.getUuid(), newVnInfo); SortedMap<String, VirtualNetworkInfo> oldVNs = new ConcurrentSkipListMap<String, VirtualNetworkInfo>(); MainDB.sync(oldVNs, newVNs); // Verify virtual-network has been created verifyVirtualNetworkPresent(newVnInfo); oldVNs = vncDB.readVirtualNetworks(); newVNs = new ConcurrentSkipListMap<String, VirtualNetworkInfo>(); MainDB.sync(oldVNs, newVNs); // Verify virtual-network has been deleted verifyVirtualNetworkAbsent(newVnInfo); } @Test public void testIsIpAddressinSubnetAndRange() throws IOException { assertTrue(RED.isIpAddressInSubnetAndRange("192.168.2.5")); assertFalse(RED.isIpAddressInSubnetAndRange("192.168.3.5")); assertTrue(BLUE.isIpAddressInSubnetAndRange("10.1.1.5")); assertFalse(BLUE.isIpAddressInSubnetAndRange("10.1.2.5")); assertFalse(BLUE.isIpAddressInSubnetAndRange("11.1.2.5")); } }