/** * Copyright (c) 2015 Juniper Networks, Inc. All rights reserved. */ package net.juniper.contrail.vcenter; import java.io.IOException; import org.apache.log4j.Logger; 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.InstanceIp; import net.juniper.contrail.api.types.Project; @RunWith(JUnit4.class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class VncDBTest extends TestCase { private static final Logger s_logger = Logger.getLogger(VncDBTest.class); private static VncDB vncDB; private static ApiConnector _api; @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; VirtualNetworkInfoTest.vncDB = vncDB; VirtualNetworkInfoTest.api = _api; VirtualMachineInfoTest.vncDB = vncDB; VirtualMachineInfoTest.api = _api; VirtualMachineInterfaceInfoTest.vncDB = vncDB; VirtualMachineInterfaceInfoTest.api = _api; } @Test public void testVirtualNetworkAddDelete() throws IOException { VirtualNetworkInfo vnInfo = new VirtualNetworkInfo(VirtualNetworkInfoTest.BLUE); // Create virtual-network on api-server vncDB.createVirtualNetwork(vnInfo); // Verify virtual-network creation VirtualNetworkInfoTest.verifyVirtualNetworkPresent(vnInfo); // Delete virtual-network from api-server s_logger.info("Deleting " + vnInfo); vncDB.deleteVirtualNetwork(vnInfo); s_logger.info("Verifying VN is deleted " + vnInfo); VirtualNetworkInfoTest.verifyVirtualNetworkAbsent(vnInfo); } @Test public void testAddDeleteOneByOne() throws IOException { VirtualNetworkInfo vnInfo = new VirtualNetworkInfo(VirtualNetworkInfoTest.BLUE); // Create virtual-network on api-server vncDB.createVirtualNetwork(vnInfo); // Verify virtual-network creation VirtualNetworkInfoTest.verifyVirtualNetworkPresent(vnInfo); // Create Virtual Machine VirtualMachineInfo vmInfo = new VirtualMachineInfo(VirtualMachineInfoTest.VM1); vncDB.createVirtualMachine(vmInfo); // Verify virtual-machine is created on api-server VirtualMachineInfoTest.verifyVirtualMachinePresent(vmInfo); VirtualMachineInterfaceInfo vmiInfo = new VirtualMachineInterfaceInfo(VirtualMachineInterfaceInfoTest.VMI1); vmiInfo.setVnInfo(vnInfo); vmiInfo.setVmInfo(vmInfo); vncDB.createVirtualMachineInterface(vmiInfo); // Verify virtual-machine-interface is created on api-server VirtualMachineInterfaceInfoTest.verifyVirtualMachineInterfacePresent(vmiInfo); vncDB.createInstanceIp(vmiInfo); InstanceIp instanceIp = VirtualMachineInterfaceInfoTest.verifyInstanceIpPresent(vmiInfo); // Delete vncDB.deleteInstanceIp(vmiInfo); // Verify instance-ip is deleted from api-server VirtualMachineInterfaceInfoTest.verifyInstanceIpAbsent(instanceIp); vncDB.deleteVirtualMachineInterface(vmiInfo); VirtualMachineInterfaceInfoTest.verifyVirtualMachineInterfaceAbsent(vmiInfo); vncDB.deleteVirtualMachine(vmInfo); // Verify virtual-machine is deleted from api-server VirtualMachineInfoTest.verifyVirtualMachineAbsent(vmInfo); // Delete virtual-network from api-server vncDB.deleteVirtualNetwork(vnInfo); // Verify virtual-network is deleted VirtualNetworkInfoTest.verifyVirtualNetworkAbsent(vnInfo); } @Test public void testAddHierarchicalDelete() throws IOException { VirtualNetworkInfo vnInfo = new VirtualNetworkInfo(VirtualNetworkInfoTest.BLUE); // Create virtual-network on api-server vncDB.createVirtualNetwork(vnInfo); // Verify virtual-network creation VirtualNetworkInfoTest.verifyVirtualNetworkPresent(vnInfo); // Create Virtual Machine VirtualMachineInfo vmInfo = new VirtualMachineInfo(VirtualMachineInfoTest.VM1); vncDB.createVirtualMachine(vmInfo); // Verify virtual-machine is created on api-server VirtualMachineInfoTest.verifyVirtualMachinePresent(vmInfo); VirtualMachineInterfaceInfo vmiInfo = new VirtualMachineInterfaceInfo(VirtualMachineInterfaceInfoTest.VMI1); vmiInfo.setVnInfo(vnInfo); vmiInfo.setVmInfo(vmInfo); vncDB.createVirtualMachineInterface(vmiInfo); // Verify virtual-machine-interface is created on api-server VirtualMachineInterfaceInfoTest.verifyVirtualMachineInterfacePresent(vmiInfo); vncDB.createInstanceIp(vmiInfo); InstanceIp instanceIp = VirtualMachineInterfaceInfoTest.verifyInstanceIpPresent(vmiInfo); // Delete virtual-network from api-server // This should in turn delete thr virtual-machine, // virtual-machine-interfce, instance-ip etc vncDB.deleteVirtualNetwork(vnInfo); // Verify instance-ip is deleted from api-server VirtualMachineInterfaceInfoTest.verifyInstanceIpAbsent(instanceIp); VirtualMachineInterfaceInfoTest.verifyVirtualMachineInterfaceAbsent(vmiInfo); // Verify virtual-network is deleted VirtualNetworkInfoTest.verifyVirtualNetworkAbsent(vnInfo); // verify VM is still there VirtualMachineInfoTest.verifyVirtualMachinePresent(vmInfo); } @Test public void testAddHierarchicalDeleteVM() throws IOException { VirtualNetworkInfo vnInfo = new VirtualNetworkInfo(VirtualNetworkInfoTest.BLUE); // Create virtual-network on api-server vncDB.createVirtualNetwork(vnInfo); // Verify virtual-network creation VirtualNetworkInfoTest.verifyVirtualNetworkPresent(vnInfo); // Create Virtual Machine VirtualMachineInfo vmInfo = new VirtualMachineInfo(VirtualMachineInfoTest.VM1); vncDB.createVirtualMachine(vmInfo); // Verify virtual-machine is created on api-server VirtualMachineInfoTest.verifyVirtualMachinePresent(vmInfo); VirtualMachineInterfaceInfo vmiInfo = new VirtualMachineInterfaceInfo(VirtualMachineInterfaceInfoTest.VMI1); vmiInfo.setVnInfo(vnInfo); vmiInfo.setVmInfo(vmInfo); vncDB.createVirtualMachineInterface(vmiInfo); // Verify virtual-machine-interface is created on api-server VirtualMachineInterfaceInfoTest.verifyVirtualMachineInterfacePresent(vmiInfo); vncDB.createInstanceIp(vmiInfo); InstanceIp instanceIp = VirtualMachineInterfaceInfoTest.verifyInstanceIpPresent(vmiInfo); // Delete virtual machine from api-server // This should in turn delete the virtual-machine, // virtual-machine-interface, instance-ip etc vncDB.deleteVirtualMachine(vmInfo); // Verify instance-ip is deleted from api-server VirtualMachineInterfaceInfoTest.verifyInstanceIpAbsent(instanceIp); VirtualMachineInterfaceInfoTest.verifyVirtualMachineInterfaceAbsent(vmiInfo); // Verify virtual-network is still there VirtualNetworkInfoTest.verifyVirtualNetworkPresent(vnInfo); // verify VM is still there VirtualMachineInfoTest.verifyVirtualMachineAbsent(vmInfo); } @Test(expected=IllegalArgumentException.class) public void testDeleteVirtualNetworkNullInput() throws IOException { vncDB.deleteVirtualNetwork(null); } @Test(expected=IllegalArgumentException.class) public void testDeleteVirtualMachineNullInput() throws IOException { vncDB.deleteVirtualMachine(null); } }