You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ch...@apache.org on 2013/10/08 15:38:34 UTC
[2/6] Contrail network virtualization plugin.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7099686b/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/NetworkProviderTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/NetworkProviderTest.java b/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/NetworkProviderTest.java
new file mode 100644
index 0000000..7cdb1a2
--- /dev/null
+++ b/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/NetworkProviderTest.java
@@ -0,0 +1,789 @@
+package net.juniper.contrail.management;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import javax.inject.Inject;
+
+import junit.framework.TestCase;
+import net.juniper.contrail.management.ContrailManager;
+import com.cloud.offering.NetworkOffering;
+import net.juniper.contrail.management.ServerDBSync;
+import net.juniper.contrail.api.ApiConnector;
+import net.juniper.contrail.api.ApiConnectorMock;
+import net.juniper.contrail.api.ApiObjectBase;
+import net.juniper.contrail.api.types.InstanceIp;
+import net.juniper.contrail.api.types.NetworkIpam;
+import net.juniper.contrail.api.types.SubnetType;
+import net.juniper.contrail.api.types.VirtualMachine;
+import net.juniper.contrail.api.types.VirtualMachineInterface;
+import net.juniper.contrail.api.types.VirtualNetwork;
+import net.juniper.contrail.api.types.VnSubnetsType;
+import net.juniper.contrail.api.types.NetworkPolicy;
+import net.juniper.contrail.api.types.Project;
+import net.juniper.contrail.api.types.VnSubnetsType;
+
+import org.apache.log4j.Logger;
+import org.mockito.Mockito;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.command.user.project.CreateProjectCmd;
+import org.apache.cloudstack.api.command.user.project.DeleteProjectCmd;
+import org.apache.cloudstack.api.command.user.address.AssociateIPAddrCmd;
+import org.apache.cloudstack.api.command.user.address.ListPublicIpAddressesCmd;
+import org.apache.cloudstack.api.command.user.nat.EnableStaticNatCmd;
+import org.apache.cloudstack.api.command.user.nat.DisableStaticNatCmd;
+import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd;
+import org.apache.cloudstack.api.command.admin.vlan.CreateVlanIpRangeCmd;
+import org.junit.runner.RunWith;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.AfterClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import com.cloud.utils.db.Merovingian2;
+import com.cloud.utils.mgmt.JmxUtil;
+import org.apache.cloudstack.utils.identity.ManagementServerNode;
+import com.cloud.agent.AgentManager;
+import com.cloud.agent.api.PlugNicAnswer;
+import com.cloud.agent.api.UnPlugNicAnswer;
+import com.cloud.agent.manager.Commands;
+import com.cloud.configuration.ConfigurationManager;
+import com.cloud.configuration.ConfigurationService;
+import com.cloud.dc.DataCenter.NetworkType;
+import com.cloud.dc.DataCenterVO;
+import com.cloud.dc.dao.DataCenterDao;
+import com.cloud.domain.Domain;
+import com.cloud.exception.AgentUnavailableException;
+import com.cloud.exception.CloudException;
+import com.cloud.exception.ConcurrentOperationException;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.exception.OperationTimedoutException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.host.Host.Type;
+import com.cloud.host.HostVO;
+import com.cloud.host.Status;
+import com.cloud.host.dao.HostDao;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.network.Network;
+import com.cloud.network.NetworkService;
+import com.cloud.network.Network.Provider;
+import com.cloud.network.Networks.TrafficType;
+import com.cloud.network.PhysicalNetwork;
+import com.cloud.network.PhysicalNetwork.BroadcastDomainRange;
+import com.cloud.network.PhysicalNetworkServiceProvider;
+import com.cloud.network.PhysicalNetworkTrafficType;
+import com.cloud.offering.ServiceOffering;
+import com.cloud.resource.ResourceState;
+import com.cloud.service.ServiceOfferingVO;
+import com.cloud.service.dao.ServiceOfferingDao;
+import com.cloud.storage.Storage.StoragePoolType;
+import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.dao.VMTemplateDao;
+import com.cloud.domain.DomainVO;
+import com.cloud.domain.dao.DomainDao;
+import com.cloud.projects.ProjectVO;
+import com.cloud.projects.dao.ProjectDao;
+import com.cloud.user.Account;
+import com.cloud.user.AccountManager;
+import com.cloud.user.User;
+import com.cloud.uservm.UserVm;
+import com.cloud.utils.Pair;
+import com.cloud.utils.component.ComponentContext;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Op;
+import com.cloud.vm.NicProfile;
+import com.cloud.vm.UserVmVO;
+import com.cloud.vm.VirtualMachine.State;
+import com.cloud.vm.VirtualMachineManager;
+import com.cloud.vm.dao.UserVmDao;
+import com.cloud.network.dao.IPAddressDao;
+import com.cloud.network.dao.IPAddressVO;
+import com.cloud.network.dao.NetworkDao;
+import com.cloud.network.dao.NetworkVO;
+import com.cloud.network.dao.PhysicalNetworkDao;
+import com.cloud.network.dao.PhysicalNetworkVO;
+import org.apache.cloudstack.context.CallContext;
+
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations="classpath:/serviceContext.xml")
+/**
+ * Exercise the public API.
+ */
+public class NetworkProviderTest extends TestCase {
+ private static final Logger s_logger =
+ Logger.getLogger(NetworkProviderTest.class);
+
+ @Inject public ConfigurationService _configService;
+ @Inject public DataCenterDao _zoneDao;
+
+ @Inject public NetworkService _networkService;
+ @Inject public ContrailManager _contrailMgr;
+ @Inject public ServerDBSync _dbSync;
+ @Inject public AccountManager _accountMgr;
+ @Inject NetworkDao _networksDao;
+ @Inject PhysicalNetworkDao _physicalNetworkDao;
+ @Inject IPAddressDao _ipAddressDao;
+
+ @Inject public VirtualMachineManager _vmMgr;
+
+ private DataCenterVO _zone;
+ private PhysicalNetwork _znet;
+ @Inject public UserVmDao _userVmDao;
+ @Inject public ServiceOfferingDao _serviceOfferingDao;
+ @Inject public VMTemplateDao _vmTemplateDao;
+ @Inject public DomainDao _domainDao;
+ @Inject public ProjectDao _projectDao;
+ @Inject public HostDao _hostDao;
+ @Inject public AgentManager _agentMgr;
+ private ApiConnector _api;
+ private long _host_id = -1L;
+ private static int _mysql_server_port;
+ private static long _msId;
+ private static Merovingian2 _lockMaster;
+ public static boolean initDone = false;
+
+ @BeforeClass
+ public static void globalSetUp() throws Exception {
+
+ s_logger.info("mysql server is getting launched ");
+ _mysql_server_port = TestDbSetup.init(null);
+ s_logger.info("mysql server launched on port " + _mysql_server_port);
+ _msId = ManagementServerNode.getManagementServerId();
+ _lockMaster = Merovingian2.createLockMaster(_msId);
+ }
+
+ @AfterClass
+ public static void globalTearDown() throws Exception {
+
+ _lockMaster.cleanupForServer(_msId);
+ JmxUtil.unregisterMBean("Locks", "Locks");
+ _lockMaster = null;
+ Thread.sleep(3000);
+
+ s_logger.info("destroying mysql server instance running at port <" + _mysql_server_port + ">");
+ TestDbSetup.destroy(_mysql_server_port, null);
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ try {
+ ComponentContext.initComponentsLifeCycle();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ s_logger.error(ex.getMessage());
+ }
+ Account system = _accountMgr.getSystemAccount();
+ User user = _accountMgr.getSystemUser();
+ CallContext.register(user, system);
+ LocateZone();
+ LocatePhysicalNetwork();
+ LocateHost();
+ _api = _contrailMgr.getApiConnector();
+ if (NetworkProviderTest.initDone == false) {
+ createPublicVlanIpRange();
+ NetworkProviderTest.initDone = true;
+ }
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ DeleteHost();
+ }
+
+ // TODO: Use the name parameter to retrieve the @Parameter annotation.
+ private void SetParameter(BaseCmd cmd, String name, BaseCmd.CommandType field_type, Object value) {
+ Class<?> cls = cmd.getClass();
+ Field field;
+ try {
+ field = cls.getDeclaredField(name);
+ } catch (Exception ex) {
+ s_logger.warn("class: " + cls.getName() + "\t" + ex);
+ return;
+ }
+ field.setAccessible(true);
+ switch (field_type) {
+ case STRING:
+ try {
+ field.set(cmd, value);
+ } catch (Exception ex) {
+ s_logger.warn(ex);
+ return;
+ }
+ break;
+ case UUID:
+ if (value.equals("-1")) {
+ try {
+ field.setLong(cmd, -1L);
+ } catch (Exception ex) {
+ s_logger.warn(ex);
+ return;
+ }
+ }
+ break;
+ case LONG:
+ try {
+ field.set(cmd, value);
+ } catch (Exception ex) {
+ s_logger.warn(ex);
+ return;
+ }
+ break;
+ default:
+ try {
+ field.set(cmd, value);
+ } catch (Exception ex) {
+ s_logger.warn(ex);
+ return;
+ }
+ break;
+ }
+ }
+
+ private void LocateZone() {
+ _zone = _zoneDao.findByName("default");
+ if (_zone == null) {
+ ConfigurationManager mgr = (ConfigurationManager) _configService;
+ _zone = mgr.createZone(User.UID_SYSTEM, "default", "8.8.8.8", null, "8.8.4.4", null,
+ null /* cidr */, "ROOT", Domain.ROOT_DOMAIN,
+ NetworkType.Advanced, null, null /* networkDomain */, false, false, null, null);
+ }
+ }
+ private void LocatePhysicalNetwork() {
+ // mandatory: name, zone-id
+ try {
+ long id = _networkService.findPhysicalNetworkId(_zone.getId(), "znet", TrafficType.Guest);
+ _znet = _networkService.getPhysicalNetwork(id);
+ List<PhysicalNetworkVO> nets = _physicalNetworkDao.listByZoneAndTrafficType(_zone.getId(), TrafficType.Public);
+ if (nets == null || nets.isEmpty()) {
+ _networkService.addTrafficTypeToPhysicalNetwork(_znet.getId(), TrafficType.Public.toString(), null, null, null, null, null);
+ }
+ } catch (InvalidParameterValueException e) {
+ List<String> isolationMethods = new ArrayList<String>();
+ isolationMethods.add("GRE");
+ _znet = _networkService.createPhysicalNetwork(_zone.getId(), null, null, isolationMethods,
+ BroadcastDomainRange.ZONE.toString(), _zone.getDomainId(),
+ null, "znet");
+ List<PhysicalNetworkVO> nets = _physicalNetworkDao.listByZoneAndTrafficType(_zone.getId(), TrafficType.Public);
+ if (nets == null || nets.isEmpty()) {
+ _networkService.addTrafficTypeToPhysicalNetwork(_znet.getId(), TrafficType.Public.toString(), null, null, null, null, null);
+ }
+ }
+ if (_znet.getState() != PhysicalNetwork.State.Enabled) {
+ _znet = _networkService.updatePhysicalNetwork(_znet.getId(), null, null, null,
+ PhysicalNetwork.State.Enabled.toString());
+ }
+
+ // Ensure that the physical network supports Guest traffic.
+ Pair<List<? extends PhysicalNetworkTrafficType>, Integer> trafficTypes =
+ _networkService.listTrafficTypes(_znet.getId());
+ boolean found = false;
+ for (PhysicalNetworkTrafficType ttype: trafficTypes.first()) {
+ if (ttype.getTrafficType() == TrafficType.Guest) {
+ found = true;
+ }
+ }
+ if (!found) {
+ _networkService.addTrafficTypeToPhysicalNetwork(_znet.getId(), TrafficType.Guest.toString(),
+ null, null, null, null, null);
+ }
+
+ Pair<List<? extends PhysicalNetworkServiceProvider>, Integer> providers =
+ _networkService.listNetworkServiceProviders(_znet.getId(), Provider.JuniperContrail.getName(),
+ null, null, null);
+ if (providers.second() == 0) {
+ s_logger.debug("Add " + Provider.JuniperContrail.getName() + " to network " + _znet.getName());
+ PhysicalNetworkServiceProvider provider =
+ _networkService.addProviderToPhysicalNetwork(_znet.getId(), Provider.JuniperContrail.getName(),
+ null, null);
+ _networkService.updateNetworkServiceProvider(provider.getId(),
+ PhysicalNetworkServiceProvider.State.Enabled.toString(), null);
+ } else {
+ PhysicalNetworkServiceProvider provider = providers.first().get(0);
+ if (provider.getState() != PhysicalNetworkServiceProvider.State.Enabled) {
+ _networkService.updateNetworkServiceProvider(provider.getId(),
+ PhysicalNetworkServiceProvider.State.Enabled.toString(), null);
+ }
+ }
+
+ providers = _networkService.listNetworkServiceProviders(_znet.getId(), null,
+ PhysicalNetworkServiceProvider.State.Enabled.toString(), null, null);
+ s_logger.debug(_znet.getName() + " has " + providers.second().toString() + " Enabled providers");
+ for (PhysicalNetworkServiceProvider provider: providers.first()) {
+ if (provider.getProviderName().equals(Provider.JuniperContrail.getName())) {
+ continue;
+ }
+ s_logger.debug("Disabling " + provider.getProviderName());
+ _networkService.updateNetworkServiceProvider(provider.getId(),
+ PhysicalNetworkServiceProvider.State.Disabled.toString(), null);
+ }
+ }
+
+ private void LocateHost() {
+ HostVO host = new HostVO(_host_id, "aa01", Type.BaremetalDhcp,
+ "192.168.1.1", "255.255.255.0", null,
+ null, null, null,
+ null, null, null,
+ null, null, null,
+ UUID.randomUUID().toString(), Status.Up, "1.0", null,
+ null, _zone.getId(), null, 0, 0, "aa", 0, StoragePoolType.NetworkFilesystem);
+ host.setResourceState(ResourceState.Enabled);
+ _hostDao.persist(host);
+ _host_id = host.getId();
+ }
+
+ private void DeleteHost() {
+ _hostDao.remove(_host_id);
+
+ }
+ private void purgeTestNetwork() {
+ Account system = _accountMgr.getSystemAccount();
+ List<? extends Network> list =
+ _networkService.getIsolatedNetworksOwnedByAccountInZone(_zone.getId(), system);
+ for (Network net : list) {
+ s_logger.debug("Delete network " + net.getName());
+ _networkService.deleteNetwork(net.getId());
+ }
+ }
+
+ private Network lookupTestNetwork(String name) {
+ Account system = _accountMgr.getSystemAccount();
+ List<? extends Network> list =
+ _networkService.getIsolatedNetworksOwnedByAccountInZone(_zone.getId(), system);
+ for (Network net : list) {
+ if (net.getName().equals(name)) {
+ return net;
+ }
+ }
+ return null;
+ }
+
+ private Network createTestNetwork(String name) {
+ CreateNetworkCmd cmd = new CreateNetworkCmd();
+ BaseCmd proxy = ComponentContext.inject(cmd);
+ Account system = _accountMgr.getSystemAccount();
+
+ SetParameter(cmd, "accountName", BaseCmd.CommandType.STRING, system.getAccountName());
+ SetParameter(cmd, ApiConstants.NAME, BaseCmd.CommandType.STRING, name);
+ SetParameter(cmd, "displayText", BaseCmd.CommandType.STRING, "test network");
+ SetParameter(cmd, "networkOfferingId", BaseCmd.CommandType.LONG, _contrailMgr.getOffering().getId());
+ SetParameter(cmd, "zoneId", BaseCmd.CommandType.LONG, _zone.getId());
+ SetParameter(cmd, ApiConstants.GATEWAY, BaseCmd.CommandType.STRING, "10.0.1.254");
+ SetParameter(cmd, ApiConstants.NETMASK, BaseCmd.CommandType.STRING, "255.255.255.0");
+ // Physical network id can't be specified for Guest traffic type.
+ // SetParameter(cmd, "physicalNetworkId", BaseCmd.CommandType.LONG, _znet.getId());
+
+ Network result = null;
+ try {
+ result = _networkService.createGuestNetwork(cmd);
+ } catch (CloudException e) {
+ e.printStackTrace();
+ return null;
+ }
+ return result;
+ }
+
+ private void createPublicVlanIpRange() {
+ CreateVlanIpRangeCmd cmd = new CreateVlanIpRangeCmd();
+ BaseCmd proxy = ComponentContext.inject(cmd);
+ Long public_net_id = null;
+
+ List<NetworkVO> nets = _networksDao.listByZoneAndTrafficType(_zone.getId(), TrafficType.Public);
+ if (nets != null && !nets.isEmpty()) {
+ NetworkVO public_net = nets.get(0);
+ public_net_id = public_net.getId();
+ } else {
+ s_logger.debug("no public network found in the zone: " + _zone.getId());
+ }
+ Account system = _accountMgr.getSystemAccount();
+
+ SetParameter(cmd, "accountName", BaseCmd.CommandType.STRING, system.getAccountName());
+ SetParameter(cmd, "domainId", BaseCmd.CommandType.LONG, Domain.ROOT_DOMAIN);
+ SetParameter(cmd, "startIp", BaseCmd.CommandType.STRING, "10.84.60.200");
+ SetParameter(cmd, "endIp", BaseCmd.CommandType.STRING, "10.84.60.250");
+ SetParameter(cmd, ApiConstants.GATEWAY, BaseCmd.CommandType.STRING, "10.84.60.254");
+ SetParameter(cmd, ApiConstants.NETMASK, BaseCmd.CommandType.STRING, "255.255.255.0");
+ SetParameter(cmd, "networkID", BaseCmd.CommandType.LONG, public_net_id);
+ SetParameter(cmd, "zoneId", BaseCmd.CommandType.LONG, _zone.getId());
+ //SetParameter(cmd, "forVirtualNetwork", BaseCmd.CommandType.BOOLEAN, true);
+ SetParameter(cmd, "vlan", BaseCmd.CommandType.STRING, "untagged");
+ s_logger.debug("createPublicVlanIpRange execute : zone id: " + _zone.getId() + ", public net id: " + public_net_id);
+ try {
+ _configService.createVlanAndPublicIpRange(cmd);
+ } catch (Exception e) {
+ s_logger.debug("createPublicVlanIpRange: " + e);
+ }
+ }
+
+ @Test
+ //@Ignore
+ public void testCreateNetwork() {
+ purgeTestNetwork();
+ createTestNetwork("test");
+ }
+
+ private VMTemplateVO getVMTemplate() {
+ List<VMTemplateVO> tmpl_list = _vmTemplateDao.listDefaultBuiltinTemplates();
+ for (VMTemplateVO tmpl: tmpl_list) {
+ if (tmpl.getHypervisorType() == HypervisorType.XenServer) {
+ return tmpl;
+ }
+ }
+ return null;
+ }
+
+ private ServiceOffering getServiceByName(String name) {
+ List<ServiceOfferingVO> service_list = _serviceOfferingDao.findPublicServiceOfferings();
+ for (ServiceOfferingVO service: service_list) {
+ if (service.getName().equals(name)) {
+ return service;
+ }
+ }
+ return null;
+ }
+
+ private UserVm createVM(String name, Network network) {
+ VMTemplateVO tmpl = getVMTemplate();
+ assertNotNull(tmpl);
+ ServiceOffering small = getServiceByName("Small Instance");
+ assertNotNull(small);
+
+ Answer<?> callback = new Answer<Object>() {
+ public Object answer(InvocationOnMock invocation) {
+ Object[] args = invocation.getArguments();
+ Commands cmds = (Commands) args[1];
+ if (cmds == null) {
+ return null;
+ }
+ PlugNicAnswer reply = new PlugNicAnswer(null, true, "PlugNic");
+ com.cloud.agent.api.Answer[] answers = { reply };
+ cmds.setAnswers(answers);
+ return null;
+ }
+ };
+ try {
+ Mockito.when(_agentMgr.send(Mockito.anyLong(), Mockito.any(Commands.class))).thenAnswer(callback);
+ } catch (AgentUnavailableException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (OperationTimedoutException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ long id = _userVmDao.getNextInSequence(Long.class, "id");
+ UserVmVO vm = new UserVmVO(id, name, name, tmpl.getId(), HypervisorType.XenServer, tmpl.getGuestOSId(),
+ false, false, _zone.getDomainId(), Account.ACCOUNT_ID_SYSTEM, small.getId(), null, name, null);
+ vm.setState(State.Running);
+ vm.setHostId(_host_id);
+ vm.setDataCenterId(network.getDataCenterId());
+ _userVmDao.persist(vm);
+
+ NicProfile profile = new NicProfile();
+ try {
+ _vmMgr.addVmToNetwork(vm, network, profile);
+ } catch (Exception ex) {
+ // TODO Auto-generated catch block
+ //ex.printStackTrace();
+ }
+ return vm;
+ }
+
+ private void deleteVM(UserVm vm, Network network) {
+ Answer<?> callback = new Answer<Object>() {
+ public Object answer(InvocationOnMock invocation) {
+ Object[] args = invocation.getArguments();
+ Commands cmds = (Commands) args[1];
+ if (cmds == null) {
+ return null;
+ }
+ UnPlugNicAnswer reply = new UnPlugNicAnswer(null, true, "PlugNic");
+ com.cloud.agent.api.Answer[] answers = { reply };
+ cmds.setAnswers(answers);
+ return null;
+ }
+ };
+
+ try {
+ Mockito.when(_agentMgr.send(Mockito.anyLong(), Mockito.any(Commands.class))).thenAnswer(callback);
+ } catch (AgentUnavailableException e) {
+ e.printStackTrace();
+ } catch (OperationTimedoutException e) {
+ e.printStackTrace();
+ }
+
+/*
+ try {
+ if (network == null) {
+ s_logger.debug("network is NULL");
+ } else {
+ s_logger.debug("network data center: " + network.getDataCenterId());
+ }
+ //_vmMgr.removeVmFromNetwork(vm, network, null);
+ } catch (ConcurrentOperationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ResourceUnavailableException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+*/
+ _userVmDao.remove(vm.getId());
+ }
+
+ @Test
+ public void testConnectivity() {
+ Network network = lookupTestNetwork("test");
+ if (network == null) {
+ network = createTestNetwork("test");
+ }
+ UserVm vm1 = createVM("x01", network);
+ UserVm vm2 = createVM("x02", network);
+
+ deleteVM(vm1, network);
+ deleteVM(vm2, network);
+ }
+
+ @Test
+ public void floatingIpTest() {
+ Network network = lookupTestNetwork("test-fip-net");
+ if (network == null) {
+ network = createTestNetwork("test-fip-net");
+ }
+ UserVm vm = createVM("test-fip-vm", network);
+ try {
+ IPAddressVO ip = createFloatingIp(network, vm);
+ deleteFloatingIp(ip);
+ } catch (Exception e) {
+ fail("unable to create/delete floating ip");
+ }
+ deleteVM(vm, network);
+ }
+
+ public void deleteFloatingIp(IPAddressVO ip) throws Exception{
+ BaseCmd cmd = new DisableStaticNatCmd();
+ BaseCmd proxy = ComponentContext.inject(cmd);
+ SetParameter(proxy, "ipAddressId", BaseCmd.CommandType.LONG, ip.getId());
+ try {
+ proxy.execute();
+ } catch (Exception e) {
+ s_logger.debug("DisableStaticNatCmd exception: " + e);
+ e.printStackTrace();
+ throw e;
+ }
+ }
+
+ public IPAddressVO createFloatingIp(Network network, UserVm vm) throws Exception {
+ BaseCmd cmd = new AssociateIPAddrCmd();
+ BaseCmd proxy = ComponentContext.inject(cmd);
+ Account system = _accountMgr.getSystemAccount();
+
+ SetParameter(proxy, "accountName", BaseCmd.CommandType.STRING, system.getAccountName());
+ SetParameter(proxy, "domainId", BaseCmd.CommandType.LONG, Domain.ROOT_DOMAIN);
+ SetParameter(proxy, "zoneId", BaseCmd.CommandType.LONG, _zone.getId());
+ SetParameter(proxy, "networkId", BaseCmd.CommandType.LONG, network.getId());
+ try {
+ ((AssociateIPAddrCmd)cmd).create();
+ ((AssociateIPAddrCmd)cmd).execute();
+ } catch (Exception e) {
+ s_logger.debug("AssociateIPAddrCmd exception: " + e);
+ e.printStackTrace();
+ throw e;
+ }
+
+ SearchBuilder<IPAddressVO> searchBuilder = _ipAddressDao.createSearchBuilder();
+ searchBuilder.and("sourceNat", searchBuilder.entity().isSourceNat(), Op.EQ);
+ searchBuilder.and("network", searchBuilder.entity().getAssociatedWithNetworkId(), Op.EQ);
+ searchBuilder.and("dataCenterId", searchBuilder.entity().getDataCenterId(), Op.EQ);
+ searchBuilder.and("associatedWithVmId", searchBuilder.entity().getAssociatedWithVmId(), Op.NULL);
+ SearchCriteria<IPAddressVO> sc = searchBuilder.create();
+ sc.setParameters("sourceNat", false);
+ sc.setParameters("network", network.getId());
+
+ List<IPAddressVO> publicIps = _ipAddressDao.search(sc, null);
+ assertNotNull(publicIps);
+
+ cmd = new EnableStaticNatCmd();
+ proxy = ComponentContext.inject(cmd);
+ SetParameter(proxy, "ipAddressId", BaseCmd.CommandType.LONG, publicIps.get(0).getId());
+ SetParameter(proxy, "networkId", BaseCmd.CommandType.LONG, network.getId());
+ SetParameter(proxy, "virtualMachineId", BaseCmd.CommandType.LONG, vm.getId());
+
+ try {
+ proxy.execute();
+ } catch (Exception e) {
+ s_logger.debug("EnableStaticNatCmd exception: " + e);
+ e.printStackTrace();
+ throw e;
+ }
+ return publicIps.get(0);
+ }
+
+ public void createProject(String name) {
+ BaseCmd cmd = new CreateProjectCmd();
+ BaseCmd proxy = ComponentContext.inject(cmd);
+ Account system = _accountMgr.getSystemAccount();
+
+ SetParameter(proxy, "accountName", BaseCmd.CommandType.STRING, system.getAccountName());
+ SetParameter(proxy, "domainId", BaseCmd.CommandType.LONG, Domain.ROOT_DOMAIN);
+ SetParameter(proxy, "name", BaseCmd.CommandType.STRING, name);
+ SetParameter(proxy, "displayText", BaseCmd.CommandType.STRING, name);
+ try {
+ ((CreateProjectCmd)proxy).create();
+ ((CreateProjectCmd)proxy).execute();
+ } catch (Exception e) {
+ s_logger.debug("CreateProjectCmd exception: " + e);
+ e.printStackTrace();
+ fail("create project cmd failed");
+ }
+ DomainVO domain = _domainDao.findById(Domain.ROOT_DOMAIN);
+ try {
+ net.juniper.contrail.api.types.Domain vncDomain = (net.juniper.contrail.api.types.Domain)
+ _api.findById(net.juniper.contrail.api.types.Domain.class, domain.getUuid());
+ if (_api.findByName(net.juniper.contrail.api.types.Project.class, vncDomain, name) == null) {
+ fail("create project failed in vnc");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Exception while creating a project in vnc");
+ }
+ }
+
+ public void deleteProject(String name) {
+ BaseCmd cmd = new DeleteProjectCmd();
+ BaseCmd proxy = ComponentContext.inject(cmd);
+
+ ProjectVO project = _projectDao.findByNameAndDomain(name, Domain.ROOT_DOMAIN);
+ try {
+ SetParameter(proxy, "id", BaseCmd.CommandType.LONG, project.getId());
+ ((DeleteProjectCmd)proxy).execute();
+ if (_api.findById(net.juniper.contrail.api.types.Project.class, project.getUuid()) != null) {
+ fail("unable to delete project in vnc");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Exception while deleting project");
+ }
+ }
+
+ @Test
+ public void testProject() {
+ createProject("test-project");
+ deleteProject("test-project");
+ }
+
+ @Test
+ public void dbSyncTest() {
+ Network network = lookupTestNetwork("test-db-only-net");
+ if (network == null) {
+ network = createTestNetwork("test-db-only-net");
+ }
+ UserVm vm = createVM("test-db-only-vm", network);
+ try {
+ createFloatingIp(network, vm);
+ } catch (Exception e) {
+ fail("unable to create floating ip");
+ }
+
+ /* reset ApiServer objects to default config only, so above created objects
+ * exists only in cludstack db but not in api server
+ */
+ ((ApiConnectorMock)_api).initConfig();
+ /* reset model cached objects */
+ _contrailMgr.getDatabase().initDb();
+
+ /* Create one object of each type directly in api-server - these objects does not exist in cloudstack */
+ net.juniper.contrail.api.types.Domain domain = new net.juniper.contrail.api.types.Domain();
+ domain.setName("test-vnc-only-domain--1");
+ domain.setUuid(UUID.randomUUID().toString());
+ try {
+ assertTrue(_api.create(domain));
+ } catch (IOException ex) {
+ fail(ex.getMessage());
+ }
+
+ Project project = new Project();
+ project.setName("test-vnc-only-project-1");
+ project.setUuid(UUID.randomUUID().toString());
+ project.setParent(domain);
+ try {
+ assertTrue(_api.create(project));
+ } catch (IOException ex) {
+ fail(ex.getMessage());
+ }
+
+ VirtualNetwork net = new VirtualNetwork();
+ net.setName("test-vnc-only-net-1");
+ net.setUuid(UUID.randomUUID().toString());
+ net.setParent(project);
+
+ NetworkIpam ipam = null;
+ try {
+ // Find default-network-ipam
+ String ipam_id = _api.findByName(NetworkIpam.class, null, "default-network-ipam");
+ assertNotNull(ipam_id);
+ ipam = (NetworkIpam) _api.findById(NetworkIpam.class, ipam_id);
+ assertNotNull(ipam);
+ } catch (IOException ex) {
+ fail(ex.getMessage());
+ }
+
+ VnSubnetsType subnet = new VnSubnetsType();
+ subnet.addIpamSubnets(new SubnetType("10.0.2.0", 24), "10.0.2.254");
+
+ net.addNetworkIpam(ipam, subnet);
+
+ VirtualMachine vncVm = new VirtualMachine();
+ vncVm.setName("test-vnc-only-vm-1");
+ try {
+ assertTrue(_api.create(vncVm));
+ } catch (IOException ex) {
+ fail(ex.getMessage());
+ }
+
+ VirtualMachineInterface vmi = new VirtualMachineInterface();
+ vmi.setParent(vncVm);
+ vmi.setName("test-vnc-only-vmi-1");
+
+ try {
+ assertTrue(_api.create(vmi));
+ assertTrue(_api.create(net));
+ } catch (IOException ex) {
+ fail(ex.getMessage());
+ }
+ InstanceIp ip_obj = new InstanceIp();
+ ip_obj.setName(net.getName() + ":0");
+ ip_obj.setVirtualNetwork(net);
+ ip_obj.setVirtualMachineInterface(vmi);
+ try {
+ assertTrue(_api.create(ip_obj));
+ // Must perform a GET in order to update the object contents.
+ assertTrue(_api.read(ip_obj));
+ assertNotNull(ip_obj.getAddress());
+
+ } catch (IOException ex) {
+ fail(ex.getMessage());
+ }
+
+ //now db sync
+ if (_dbSync.syncAll(DBSyncGeneric.SYNC_MODE_UPDATE) == ServerDBSync.SYNC_STATE_OUT_OF_SYNC) {
+ s_logger.info("# Cloudstack DB & VNC are out of sync - resync done");
+ }
+
+ if (_dbSync.syncAll(DBSyncGeneric.SYNC_MODE_CHECK) == ServerDBSync.SYNC_STATE_OUT_OF_SYNC) {
+ s_logger.info("# Cloudstack DB & VNC are still out of sync");
+ fail("DB Sync failed");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7099686b/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/TestConfiguration.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/TestConfiguration.java b/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/TestConfiguration.java
new file mode 100644
index 0000000..0f682d6
--- /dev/null
+++ b/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/TestConfiguration.java
@@ -0,0 +1,803 @@
+package net.juniper.contrail.management;
+
+import java.io.IOException;
+
+import javax.inject.Inject;
+
+import com.cloud.network.dao.IPAddressDao;
+import com.cloud.network.IpAddress;
+import org.apache.cloudstack.acl.APIChecker;
+import org.apache.cloudstack.acl.ControlledEntity;
+import org.apache.cloudstack.affinity.AffinityGroupService;
+import org.apache.cloudstack.affinity.AffinityGroupVO;
+import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
+import org.apache.cloudstack.affinity.dao.AffinityGroupDaoImpl;
+import org.apache.cloudstack.affinity.dao.AffinityGroupDomainMapDaoImpl;
+import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDaoImpl;
+import org.apache.cloudstack.api.IdentityService;
+import org.apache.cloudstack.engine.service.api.OrchestrationService;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
+import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
+import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
+import org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDaoImpl;
+import org.apache.cloudstack.query.QueryService;
+import org.apache.cloudstack.region.PortableIpDaoImpl;
+import org.apache.cloudstack.region.PortableIpRangeDaoImpl;
+import org.apache.cloudstack.region.RegionManager;
+import org.apache.cloudstack.region.dao.RegionDaoImpl;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDaoImpl;
+import org.apache.cloudstack.storage.image.db.ImageStoreDaoImpl;
+import org.apache.cloudstack.storage.image.db.TemplateDataStoreDaoImpl;
+import org.apache.cloudstack.usage.UsageService;
+import org.mockito.Mockito;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.ComponentScan.Filter;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.FilterType;
+import org.springframework.core.type.classreading.MetadataReader;
+import org.springframework.core.type.classreading.MetadataReaderFactory;
+import org.springframework.core.type.filter.TypeFilter;
+
+import com.cloud.acl.DomainChecker;
+import com.cloud.agent.AgentManager;
+import com.cloud.agent.manager.allocator.HostAllocator;
+import com.cloud.agent.manager.allocator.PodAllocator;
+import com.cloud.alert.AlertManager;
+import com.cloud.api.ApiDBUtils;
+import com.cloud.api.query.dao.AccountJoinDaoImpl;
+import com.cloud.api.query.dao.AffinityGroupJoinDaoImpl;
+import com.cloud.api.query.dao.AsyncJobJoinDaoImpl;
+import com.cloud.api.query.dao.DataCenterJoinDaoImpl;
+import com.cloud.api.query.dao.DiskOfferingJoinDaoImpl;
+import com.cloud.api.query.dao.DomainRouterJoinDaoImpl;
+import com.cloud.api.query.dao.HostJoinDaoImpl;
+import com.cloud.api.query.dao.ImageStoreJoinDaoImpl;
+import com.cloud.api.query.dao.InstanceGroupJoinDaoImpl;
+import com.cloud.api.query.dao.ProjectAccountJoinDaoImpl;
+import com.cloud.api.query.dao.ProjectInvitationJoinDaoImpl;
+import com.cloud.api.query.dao.ProjectJoinDaoImpl;
+import com.cloud.api.query.dao.ResourceTagJoinDaoImpl;
+import com.cloud.api.query.dao.SecurityGroupJoinDaoImpl;
+import com.cloud.api.query.dao.ServiceOfferingJoinDaoImpl;
+import com.cloud.api.query.dao.StoragePoolJoinDaoImpl;
+import com.cloud.api.query.dao.TemplateJoinDaoImpl;
+import com.cloud.api.query.dao.UserAccountJoinDaoImpl;
+import com.cloud.api.query.dao.UserVmJoinDaoImpl;
+import com.cloud.api.query.dao.VolumeJoinDaoImpl;
+import com.cloud.capacity.CapacityManager;
+import com.cloud.capacity.dao.CapacityDaoImpl;
+import com.cloud.cluster.ClusterManager;
+import com.cloud.cluster.agentlb.dao.HostTransferMapDaoImpl;
+import com.cloud.cluster.dao.ManagementServerHostDaoImpl;
+import com.cloud.configuration.ConfigurationManagerImpl;
+import org.apache.cloudstack.framework.config.dao.ConfigurationDaoImpl;
+import com.cloud.configuration.dao.ResourceCountDaoImpl;
+import com.cloud.configuration.dao.ResourceLimitDaoImpl;
+import com.cloud.consoleproxy.ConsoleProxyManager;
+import com.cloud.consoleproxy.ConsoleProxyService;
+import com.cloud.dc.ClusterDetailsDaoImpl;
+import com.cloud.dc.DataCenter;
+import com.cloud.dc.dao.AccountVlanMapDaoImpl;
+import com.cloud.dc.dao.ClusterDaoImpl;
+import com.cloud.dc.dao.DataCenterDaoImpl;
+import com.cloud.dc.dao.DataCenterIpAddressDaoImpl;
+import com.cloud.dc.dao.DataCenterLinkLocalIpAddressDaoImpl;
+import com.cloud.dc.dao.DataCenterVnetDaoImpl;
+import com.cloud.dc.dao.DcDetailsDaoImpl;
+import com.cloud.dc.dao.DedicatedResourceDaoImpl;
+import com.cloud.dc.dao.HostPodDaoImpl;
+import com.cloud.dc.dao.PodVlanDaoImpl;
+import com.cloud.dc.dao.PodVlanMapDaoImpl;
+import com.cloud.dc.dao.VlanDaoImpl;
+import com.cloud.deploy.DeploymentPlanner;
+import com.cloud.deploy.DeploymentPlanningManager;
+import com.cloud.deploy.dao.PlannerHostReservationDaoImpl;
+import com.cloud.domain.dao.DomainDaoImpl;
+import com.cloud.event.dao.EventDaoImpl;
+import com.cloud.event.dao.EventJoinDaoImpl;
+import com.cloud.event.dao.UsageEventDaoImpl;
+import com.cloud.ha.HighAvailabilityManager;
+import com.cloud.host.dao.HostDaoImpl;
+import com.cloud.host.dao.HostDetailsDaoImpl;
+import com.cloud.host.dao.HostTagsDaoImpl;
+import com.cloud.hypervisor.HypervisorGuruManagerImpl;
+import com.cloud.hypervisor.dao.HypervisorCapabilitiesDaoImpl;
+import com.cloud.network.ExternalDeviceUsageManager;
+import com.cloud.network.Ipv6AddressManagerImpl;
+import com.cloud.network.NetworkModelImpl;
+import com.cloud.network.NetworkServiceImpl;
+import com.cloud.network.NetworkUsageService;
+import com.cloud.network.StorageNetworkManager;
+import com.cloud.network.StorageNetworkService;
+import com.cloud.network.as.AutoScaleService;
+import com.cloud.network.as.dao.AutoScalePolicyConditionMapDaoImpl;
+import com.cloud.network.as.dao.AutoScalePolicyDaoImpl;
+import com.cloud.network.as.dao.AutoScaleVmGroupDaoImpl;
+import com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDaoImpl;
+import com.cloud.network.as.dao.AutoScaleVmProfileDaoImpl;
+import com.cloud.network.as.dao.ConditionDaoImpl;
+import com.cloud.network.as.dao.CounterDaoImpl;
+import com.cloud.network.dao.AccountGuestVlanMapDaoImpl;
+import com.cloud.network.dao.FirewallRulesCidrsDaoImpl;
+import com.cloud.network.dao.FirewallRulesDaoImpl;
+import com.cloud.network.dao.LBHealthCheckPolicyDaoImpl;
+import com.cloud.network.dao.LBStickinessPolicyDaoImpl;
+import com.cloud.network.dao.LoadBalancerDaoImpl;
+import com.cloud.network.dao.LoadBalancerVMMapDaoImpl;
+import com.cloud.network.dao.NetworkAccountDaoImpl;
+import com.cloud.network.dao.NetworkDaoImpl;
+import com.cloud.network.dao.NetworkDomainDaoImpl;
+import com.cloud.network.dao.NetworkOpDaoImpl;
+import com.cloud.network.dao.NetworkRuleConfigDaoImpl;
+import com.cloud.network.dao.NetworkServiceMapDaoImpl;
+import com.cloud.network.dao.PhysicalNetworkDaoImpl;
+import com.cloud.network.dao.PhysicalNetworkServiceProviderDaoImpl;
+import com.cloud.network.dao.PhysicalNetworkTrafficTypeDaoImpl;
+import com.cloud.network.dao.RemoteAccessVpnDaoImpl;
+import com.cloud.network.dao.RouterNetworkDaoImpl;
+import com.cloud.network.dao.Site2SiteCustomerGatewayDaoImpl;
+import com.cloud.network.dao.Site2SiteVpnConnectionDaoImpl;
+import com.cloud.network.dao.Site2SiteVpnGatewayDaoImpl;
+import com.cloud.network.dao.UserIpv6AddressDaoImpl;
+import com.cloud.network.dao.VirtualRouterProviderDaoImpl;
+import com.cloud.network.dao.VpnUserDaoImpl;
+import com.cloud.network.element.Site2SiteVpnServiceProvider;
+import com.cloud.network.firewall.FirewallManagerImpl;
+import com.cloud.network.lb.LoadBalancingRulesManagerImpl;
+import com.cloud.network.router.VpcVirtualNetworkApplianceManagerImpl;
+import com.cloud.network.rules.RulesManagerImpl;
+import com.cloud.network.rules.dao.PortForwardingRulesDaoImpl;
+import com.cloud.network.security.dao.SecurityGroupDaoImpl;
+import com.cloud.network.security.dao.SecurityGroupRuleDaoImpl;
+import com.cloud.network.security.dao.SecurityGroupRulesDaoImpl;
+import com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl;
+import com.cloud.network.security.dao.SecurityGroupWorkDaoImpl;
+import com.cloud.network.security.dao.VmRulesetLogDaoImpl;
+import com.cloud.network.vpc.NetworkACLManagerImpl;
+import com.cloud.network.vpc.NetworkACLService;
+import com.cloud.network.vpc.VpcManagerImpl;
+import com.cloud.network.vpc.dao.NetworkACLDaoImpl;
+import com.cloud.network.vpc.dao.NetworkACLItemDaoImpl;
+import com.cloud.network.vpc.dao.PrivateIpDaoImpl;
+import com.cloud.network.vpc.dao.StaticRouteDaoImpl;
+import com.cloud.network.vpc.dao.VpcDaoImpl;
+import com.cloud.network.vpc.dao.VpcGatewayDaoImpl;
+import com.cloud.network.vpc.dao.VpcOfferingDaoImpl;
+import com.cloud.network.vpc.dao.VpcOfferingServiceMapDaoImpl;
+import com.cloud.network.vpc.dao.VpcServiceMapDaoImpl;
+import com.cloud.network.vpn.RemoteAccessVpnService;
+import com.cloud.network.vpn.Site2SiteVpnManager;
+import com.cloud.projects.dao.ProjectInvitationDaoImpl;
+import com.cloud.dc.DataCenter;
+import com.cloud.dc.dao.DataCenterDao;
+import com.cloud.offerings.dao.NetworkOfferingDaoImpl;
+import com.cloud.offerings.dao.NetworkOfferingDao;
+import com.cloud.offering.NetworkOffering;
+import com.cloud.offerings.dao.NetworkOfferingDetailsDaoImpl;
+import com.cloud.offerings.dao.NetworkOfferingServiceMapDaoImpl;
+import com.cloud.projects.ProjectManager;
+import com.cloud.projects.dao.ProjectAccountDaoImpl;
+import com.cloud.projects.ProjectManagerImpl;
+import com.cloud.projects.dao.ProjectDaoImpl;
+import com.cloud.region.ha.GlobalLoadBalancingRulesService;
+import com.cloud.resource.ResourceManager;
+import com.cloud.server.ConfigurationServerImpl;
+import com.cloud.server.ManagementServer;
+import com.cloud.server.ResourceMetaDataService;
+import com.cloud.server.StatsCollector;
+import com.cloud.server.TaggedResourceService;
+import com.cloud.server.auth.UserAuthenticator;
+import com.cloud.service.dao.ServiceOfferingDaoImpl;
+import com.cloud.service.dao.ServiceOfferingDetailsDaoImpl;
+import com.cloud.storage.DataStoreProviderApiService;
+import com.cloud.storage.StorageManager;
+import com.cloud.storage.dao.DiskOfferingDaoImpl;
+import com.cloud.storage.dao.GuestOSCategoryDaoImpl;
+import com.cloud.storage.dao.GuestOSDaoImpl;
+import com.cloud.storage.dao.LaunchPermissionDao;
+import com.cloud.storage.dao.SnapshotDaoImpl;
+import com.cloud.storage.dao.SnapshotPolicyDaoImpl;
+import com.cloud.storage.dao.StoragePoolDetailsDaoImpl;
+import com.cloud.storage.dao.StoragePoolHostDaoImpl;
+import com.cloud.storage.dao.UploadDaoImpl;
+import com.cloud.storage.dao.VMTemplateDaoImpl;
+import com.cloud.storage.dao.VMTemplateDetailsDaoImpl;
+import com.cloud.storage.dao.VMTemplateHostDaoImpl;
+import com.cloud.storage.dao.VMTemplateZoneDaoImpl;
+import com.cloud.storage.dao.VolumeDaoImpl;
+import com.cloud.storage.dao.VolumeHostDaoImpl;
+import com.cloud.storage.secondary.SecondaryStorageVmManager;
+import com.cloud.storage.snapshot.SnapshotApiService;
+import com.cloud.storage.snapshot.SnapshotManager;
+import com.cloud.storage.VolumeApiService;
+import com.cloud.tags.dao.ResourceTagDao;
+import com.cloud.tags.dao.ResourceTagsDaoImpl;
+import com.cloud.template.TemplateApiService;
+import com.cloud.template.TemplateManager;
+import com.cloud.user.Account;
+import com.cloud.user.dao.AccountDao;
+import com.cloud.user.AccountManager;
+import com.cloud.user.User;
+import com.cloud.user.UserVO;
+import com.cloud.user.dao.UserDao;
+import com.cloud.user.AccountDetailsDaoImpl;
+import com.cloud.user.AccountVO;
+import com.cloud.user.DomainManagerImpl;
+import com.cloud.user.ResourceLimitService;
+import com.cloud.user.dao.AccountDaoImpl;
+import com.cloud.user.dao.SSHKeyPairDaoImpl;
+import com.cloud.user.dao.UserDaoImpl;
+import com.cloud.user.dao.UserStatisticsDaoImpl;
+import com.cloud.user.dao.UserStatsLogDaoImpl;
+import com.cloud.user.dao.VmDiskStatisticsDaoImpl;
+import com.cloud.utils.db.DB;
+import com.cloud.utils.db.Transaction;
+import com.cloud.uuididentity.dao.IdentityDaoImpl;
+import com.cloud.vm.ItWorkDaoImpl;
+import com.cloud.vm.dao.ConsoleProxyDaoImpl;
+import com.cloud.vm.dao.DomainRouterDaoImpl;
+import com.cloud.vm.dao.InstanceGroupDaoImpl;
+import com.cloud.vm.dao.InstanceGroupVMMapDaoImpl;
+import com.cloud.vm.dao.NicIpAliasDaoImpl;
+import com.cloud.vm.dao.NicSecondaryIpDaoImpl;
+import com.cloud.vm.dao.SecondaryStorageVmDaoImpl;
+import com.cloud.vm.dao.UserVmCloneSettingDaoImpl;
+import com.cloud.vm.dao.UserVmDaoImpl;
+import com.cloud.vm.dao.UserVmDetailsDaoImpl;
+import com.cloud.vm.dao.VMInstanceDaoImpl;
+import com.cloud.vm.snapshot.VMSnapshotManager;
+import com.cloud.vm.snapshot.dao.VMSnapshotDaoImpl;
+import org.apache.cloudstack.framework.jobs.impl.AsyncJobManagerImpl;
+import org.apache.cloudstack.framework.jobs.dao.AsyncJobDaoImpl;
+import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
+import com.cloud.network.IpAddressManagerImpl;
+import org.apache.cloudstack.framework.config.ConfigDepot;
+import org.apache.cloudstack.framework.jobs.dao.SyncQueueItemDaoImpl;
+import org.apache.cloudstack.framework.jobs.impl.SyncQueueManager;
+import org.apache.cloudstack.framework.jobs.dao.AsyncJobJournalDaoImpl;
+import org.apache.cloudstack.framework.jobs.dao.AsyncJobJoinMapDaoImpl;
+import org.apache.cloudstack.framework.jobs.AsyncJobDispatcher;
+import org.apache.cloudstack.framework.jobs.impl.AsyncJobMonitor;
+import org.apache.cloudstack.framework.config.ConfigDepotAdmin;
+import org.apache.cloudstack.network.lb.InternalLoadBalancerVMManager;
+import org.apache.cloudstack.network.lb.InternalLoadBalancerVMService;
+import org.apache.cloudstack.network.lb.ApplicationLoadBalancerService;
+import com.cloud.utils.db.EntityManager;
+import org.apache.cloudstack.context.CallContext;
+
+
+@ComponentScan(basePackageClasses={
+ AccountDaoImpl.class,
+ AccountDetailsDaoImpl.class,
+ AccountGuestVlanMapDaoImpl.class,
+ AccountJoinDaoImpl.class,
+ AccountVlanMapDaoImpl.class,
+ AffinityGroupDaoImpl.class,
+ AffinityGroupDomainMapDaoImpl.class,
+ AffinityGroupJoinDaoImpl.class,
+ AffinityGroupVMMapDaoImpl.class,
+ ApiDBUtils.class,
+ ApplicationLoadBalancerRuleDaoImpl.class,
+ AsyncJobDaoImpl.class,
+ AsyncJobJoinDaoImpl.class,
+ AsyncJobJoinMapDaoImpl.class,
+ AsyncJobJournalDaoImpl.class,
+ AsyncJobManagerImpl.class,
+ AutoScalePolicyConditionMapDaoImpl.class,
+ AutoScalePolicyDaoImpl.class,
+ AutoScaleVmGroupDaoImpl.class,
+ AutoScaleVmGroupPolicyMapDaoImpl.class,
+ AutoScaleVmProfileDaoImpl.class,
+ CapacityDaoImpl.class,
+ ClusterDaoImpl.class,
+ ClusterDetailsDaoImpl.class,
+ ConditionDaoImpl.class,
+ ConfigurationDaoImpl.class,
+ ConfigurationManagerImpl.class,
+ ConfigurationServerImpl.class,
+ ConsoleProxyDaoImpl.class,
+ ContrailElementImpl.class,
+ ContrailGuru.class,
+ ContrailManagerImpl.class,
+ CounterDaoImpl.class,
+ DataCenterDaoImpl.class,
+ DataCenterIpAddressDaoImpl.class,
+ DataCenterJoinDaoImpl.class,
+ DataCenterLinkLocalIpAddressDaoImpl.class,
+ DataCenterVnetDaoImpl.class,
+ DcDetailsDaoImpl.class,
+ DedicatedResourceDaoImpl.class,
+ DiskOfferingDaoImpl.class,
+ DiskOfferingJoinDaoImpl.class,
+ DomainDaoImpl.class,
+ DomainManagerImpl.class,
+ DomainRouterDaoImpl.class,
+ DomainRouterJoinDaoImpl.class,
+ EventDaoImpl.class,
+ EventJoinDaoImpl.class,
+ EventUtils.class,
+ EventUtils.class,
+ FirewallManagerImpl.class,
+ FirewallRulesCidrsDaoImpl.class,
+ FirewallRulesDaoImpl.class,
+ GuestOSCategoryDaoImpl.class,
+ GuestOSDaoImpl.class,
+ HostDaoImpl.class,
+ HostDetailsDaoImpl.class,
+ HostJoinDaoImpl.class,
+ HostPodDaoImpl.class,
+ HostTagsDaoImpl.class,
+ HostTransferMapDaoImpl.class,
+ HypervisorCapabilitiesDaoImpl.class,
+ HypervisorGuruManagerImpl.class,
+ IdentityDaoImpl.class,
+ ImageStoreDaoImpl.class,
+ ImageStoreJoinDaoImpl.class,
+ InstanceGroupDaoImpl.class,
+ InstanceGroupJoinDaoImpl.class,
+ InstanceGroupVMMapDaoImpl.class,
+ IpAddressManagerImpl.class,
+ Ipv6AddressManagerImpl.class,
+ ItWorkDaoImpl.class,
+ LBHealthCheckPolicyDaoImpl.class,
+ LBStickinessPolicyDaoImpl.class,
+ LaunchPermissionDao.class,
+ LoadBalancerDaoImpl.class,
+ LoadBalancerVMMapDaoImpl.class,
+ LoadBalancingRulesManagerImpl.class,
+ ManagementServerHostDaoImpl.class,
+ MockAccountManager.class,
+ NetworkACLDaoImpl.class,
+ NetworkACLItemDaoImpl.class,
+ NetworkACLManagerImpl.class,
+ NetworkAccountDaoImpl.class,
+ NetworkDaoImpl.class,
+ NetworkDomainDaoImpl.class,
+ NetworkModelImpl.class,
+ NetworkOfferingDaoImpl.class,
+ NetworkOfferingDetailsDaoImpl.class,
+ NetworkOfferingServiceMapDaoImpl.class,
+ NetworkOpDaoImpl.class,
+ NetworkRuleConfigDaoImpl.class,
+ NetworkServiceImpl.class,
+ NetworkServiceMapDaoImpl.class,
+ NicIpAliasDaoImpl.class,
+ NicSecondaryIpDaoImpl.class,
+ PhysicalNetworkDaoImpl.class,
+ PhysicalNetworkServiceProviderDaoImpl.class,
+ PhysicalNetworkTrafficTypeDaoImpl.class,
+ PlannerHostReservationDaoImpl.class,
+ PodVlanDaoImpl.class,
+ PodVlanMapDaoImpl.class,
+ PortForwardingRulesDaoImpl.class,
+ PortableIpDaoImpl.class,
+ PortableIpRangeDaoImpl.class,
+ PrimaryDataStoreDaoImpl.class,
+ PrivateIpDaoImpl.class,
+ ProjectAccountDaoImpl.class,
+ ProjectAccountJoinDaoImpl.class,
+ ProjectInvitationDaoImpl.class,
+ ProjectDaoImpl.class,
+ ProjectInvitationJoinDaoImpl.class,
+ ProjectJoinDaoImpl.class,
+ ProjectManagerImpl.class,
+ RegionDaoImpl.class,
+ RemoteAccessVpnDaoImpl.class,
+ ResourceCountDaoImpl.class,
+ ResourceLimitDaoImpl.class,
+ ResourceTagDao.class,
+ ResourceTagJoinDaoImpl.class,
+ ResourceTagsDaoImpl.class,
+ RouterNetworkDaoImpl.class,
+ RulesManagerImpl.class,
+ SSHKeyPairDaoImpl.class,
+ SecondaryStorageVmDaoImpl.class,
+ SecurityGroupDaoImpl.class,
+ SecurityGroupJoinDaoImpl.class,
+ SecurityGroupRuleDaoImpl.class,
+ SecurityGroupRulesDaoImpl.class,
+ SecurityGroupVMMapDaoImpl.class,
+ SecurityGroupWorkDaoImpl.class,
+ ServerEventHandlerImpl.class,
+ ServiceOfferingDaoImpl.class,
+ ServiceOfferingDetailsDaoImpl.class,
+ ServiceOfferingJoinDaoImpl.class,
+ Site2SiteCustomerGatewayDaoImpl.class,
+ Site2SiteVpnConnectionDaoImpl.class,
+ Site2SiteVpnGatewayDaoImpl.class,
+ SnapshotDaoImpl.class,
+ SnapshotPolicyDaoImpl.class,
+ StaticRouteDaoImpl.class,
+ StatsCollector.class,
+ StoragePoolDetailsDaoImpl.class,
+ StoragePoolHostDaoImpl.class,
+ StoragePoolJoinDaoImpl.class,
+ SyncQueueItemDaoImpl.class,
+ TemplateDataStoreDaoImpl.class,
+ TemplateJoinDaoImpl.class,
+ UploadDaoImpl.class,
+ UsageEventDaoImpl.class,
+ UserAccountJoinDaoImpl.class,
+ UserDaoImpl.class,
+ UserIpv6AddressDaoImpl.class,
+ UserStatisticsDaoImpl.class,
+ UserStatsLogDaoImpl.class,
+ UserVmCloneSettingDaoImpl.class,
+ UserVmDaoImpl.class,
+ UserVmDetailsDaoImpl.class,
+ UserVmJoinDaoImpl.class,
+ VMInstanceDaoImpl.class,
+ VMSnapshotDaoImpl.class,
+ VMTemplateDaoImpl.class,
+ VMTemplateDetailsDaoImpl.class,
+ VMTemplateHostDaoImpl.class,
+ VMTemplateZoneDaoImpl.class,
+ VirtualRouterProviderDaoImpl.class,
+ VlanDaoImpl.class,
+ VmDiskStatisticsDaoImpl.class,
+ VmRulesetLogDaoImpl.class,
+ VolumeDaoImpl.class,
+ VolumeHostDaoImpl.class,
+ VolumeJoinDaoImpl.class,
+ VpcDaoImpl.class,
+ VpcGatewayDaoImpl.class,
+ VpcManagerImpl.class,
+ VpcOfferingDaoImpl.class,
+ VpcOfferingServiceMapDaoImpl.class,
+ VpcServiceMapDaoImpl.class,
+ VpcVirtualNetworkApplianceManagerImpl.class,
+ VpnUserDaoImpl.class,
+},
+includeFilters={@Filter(value=TestConfiguration.ComponentFilter.class, type=FilterType.CUSTOM)},
+useDefaultFilters=false)
+
+@Configuration
+public class TestConfiguration {
+ public static class ComponentFilter implements TypeFilter {
+ @Override
+ public boolean match(MetadataReader mdr, MetadataReaderFactory arg1) throws IOException {
+ String clsname = mdr.getClassMetadata().getClassName();
+ ComponentScan cs = TestConfiguration.class.getAnnotation(ComponentScan.class);
+ return includedInBasePackageClasses(clsname, cs);
+ }
+ }
+
+ public static boolean includedInBasePackageClasses(String clazzName, ComponentScan cs) {
+ Class<?> clazzToCheck;
+ try {
+ clazzToCheck = Class.forName(clazzName);
+ } catch (ClassNotFoundException e) {
+ System.out.println("Unable to find " + clazzName);
+ return false;
+ }
+ Class<?>[] clazzes = cs.basePackageClasses();
+ for (Class<?> clazz : clazzes) {
+ if (clazzToCheck.isAssignableFrom(clazz)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Inject
+ AffinityGroupDao _affinityGroupDao;
+ @Inject AccountDao _accountDao;
+ @Inject UserDao _userDao;
+ @Inject NetworkOfferingDao _networkOfferingDao;
+ @Inject DataCenterDao _zoneDao;
+ @Inject IPAddressDao _ipAddressDao;
+
+
+ @Bean
+ public AffinityGroupService affinityGroupService() {
+ AffinityGroupService mock = Mockito.mock(AffinityGroupService.class);
+ try {
+ AffinityGroupVO gmock = new AffinityGroupVO("grp1", "grp-type", "affinity group", 1, AccountVO.ACCOUNT_ID_SYSTEM, ControlledEntity.ACLType.Account);
+ Transaction.open(Transaction.CLOUD_DB);
+ Transaction txn = Transaction.currentTxn();
+ txn.start();
+ _affinityGroupDao.persist(gmock);
+ txn.commit();
+
+ Mockito.when(mock.createAffinityGroupInternal(Mockito.any(String.class), Mockito.any(Long.class), Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class))).thenReturn(gmock);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return mock;
+ }
+
+ @Bean
+ public AgentManager agentManager() {
+ return Mockito.mock(AgentManager.class);
+ }
+
+ @Bean
+ public AlertManager alertManager() {
+ return Mockito.mock(AlertManager.class);
+ }
+
+ @Bean
+ public APIChecker apiChecker() {
+ return Mockito.mock(APIChecker.class);
+ }
+
+ @Bean
+ public AsyncJobDispatcher asyncJobDispatcher() {
+ return Mockito.mock(AsyncJobDispatcher.class);
+ }
+ @Bean
+ public AsyncJobMonitor asyncJobMonitor() {
+ return Mockito.mock(AsyncJobMonitor.class);
+ }
+
+ @Bean
+ public AutoScaleService autoScaleService() {
+ return Mockito.mock(AutoScaleService.class);
+ }
+ @Bean
+ public CapacityManager capacityManager() {
+ return Mockito.mock(CapacityManager.class);
+ }
+ @Bean
+ public ClusterManager clusterManager() {
+ return Mockito.mock(ClusterManager.class);
+ }
+ @Bean
+ public ConfigDepot configDepot() {
+ return Mockito.mock(ConfigDepot.class);
+ }
+ @Bean
+ public ConfigDepotAdmin configDepotAdmin() {
+ return Mockito.mock(ConfigDepotAdmin.class);
+ }
+ @Bean
+ public ConsoleProxyManager consoleProxyManager() {
+ return Mockito.mock(ConsoleProxyManager.class);
+ }
+ @Bean
+ public ConsoleProxyService consoleProxyService() {
+ return Mockito.mock(ConsoleProxyService.class);
+ }
+ @Bean
+ public DataStoreManager dataStoreManager() {
+ return Mockito.mock(DataStoreManager.class);
+ }
+ @Bean
+ public DataStoreProviderApiService dataStoreProviderApiService() {
+ return Mockito.mock(DataStoreProviderApiService.class);
+ }
+ @Bean
+ public DeploymentPlanner deploymentPlanner() {
+ return Mockito.mock(DeploymentPlanner.class);
+ }
+ @Bean
+ public DeploymentPlanningManager deploymentPlanningManager() {
+ return Mockito.mock(DeploymentPlanningManager.class);
+ }
+ @Bean
+ public DomainChecker domainChecker() {
+ DomainChecker mock = Mockito.mock(DomainChecker.class);
+ try {
+ Mockito.when(mock.checkAccess(Mockito.any(Account.class), Mockito.any(DataCenter.class))).thenReturn(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return mock;
+ }
+ @Bean
+ public EndPointSelector endPointSelector() {
+ return Mockito.mock(EndPointSelector.class);
+ }
+ @Bean
+ public EntityManager entityManager() {
+ EntityManager mock = Mockito.mock(EntityManager.class);
+ try {
+ Mockito.when(mock.findById(Mockito.same(Account.class), Mockito.anyLong())).thenReturn(_accountDao.findById(AccountVO.ACCOUNT_ID_SYSTEM));
+ Mockito.when(mock.findById(Mockito.same(User.class), Mockito.anyLong())).thenReturn(_userDao.findById(UserVO.UID_SYSTEM));
+ Mockito.when(mock.findById(Mockito.same(NetworkOffering.class), Mockito.any(Long.class))).thenAnswer(
+ new Answer<NetworkOffering>()
+ {
+ @Override
+ public NetworkOffering answer(final InvocationOnMock invocation) throws Throwable
+ {
+ Long id = (Long) invocation.getArguments()[1];
+ return _networkOfferingDao.findById(id);
+ }
+ }
+ );
+ Mockito.when(mock.findById(Mockito.same(IpAddress.class), Mockito.any(Long.class))).thenAnswer(
+ new Answer<IpAddress>()
+ {
+ @Override
+ public IpAddress answer(final InvocationOnMock invocation) throws Throwable
+ {
+ Long id = (Long) invocation.getArguments()[1];
+ return _ipAddressDao.findById(id);
+ }
+ }
+ );
+ Mockito.when(mock.findById(Mockito.same(DataCenter.class), Mockito.any(Long.class))).thenAnswer(
+ new Answer<DataCenter>()
+ {
+ @Override
+ public DataCenter answer(final InvocationOnMock invocation) throws Throwable
+ {
+ Long id = (Long) invocation.getArguments()[1];
+ return _zoneDao.findById(id);
+ }
+ }
+ );
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ CallContext.init(mock);
+ return mock;
+ }
+ @Bean
+ public ExternalDeviceUsageManager externalDeviceUsageManager() {
+ return Mockito.mock(ExternalDeviceUsageManager.class);
+ }
+ @Bean
+ public GlobalLoadBalancingRulesService globalLoadBalancingRulesService() {
+ return Mockito.mock(GlobalLoadBalancingRulesService.class);
+ }
+ @Bean
+ public HighAvailabilityManager highAvailabilityManager() {
+ return Mockito.mock(HighAvailabilityManager.class);
+ }
+ @Bean
+ public HostAllocator hostAllocator() {
+ return Mockito.mock(HostAllocator.class);
+ }
+ @Bean
+ public IdentityService identityService() {
+ return Mockito.mock(IdentityService.class);
+ }
+ @Bean
+ public InternalLoadBalancerVMManager internalLoadBalancerVMManager() {
+ return Mockito.mock(InternalLoadBalancerVMManager.class);
+ }
+ @Bean
+ public InternalLoadBalancerVMService internalLoadBalancerVMService() {
+ return Mockito.mock(InternalLoadBalancerVMService.class);
+ }
+ @Bean
+ public ApplicationLoadBalancerService applicationLoadBalancerService() {
+ return Mockito.mock(ApplicationLoadBalancerService.class);
+ }
+ @Bean
+ public ManagementServer managementServer() {
+ return Mockito.mock(ManagementServer.class);
+ }
+ @Bean
+ public NetworkACLService networkACLService() {
+ return Mockito.mock(NetworkACLService.class);
+ }
+ @Bean
+ public NetworkUsageService networkUsageService() {
+ return Mockito.mock(NetworkUsageService.class);
+ }
+ @Bean
+ public OrchestrationService orchSrvc() {
+ return Mockito.mock(OrchestrationService.class);
+ }
+ @Bean
+ public PodAllocator podAllocator() {
+ return Mockito.mock(PodAllocator.class);
+ }
+ @Bean
+ public QueryService queryService() {
+ return Mockito.mock(QueryService.class);
+ }
+ @Bean
+ public RegionManager regionManager() {
+ return Mockito.mock(RegionManager.class);
+ }
+ @Bean
+ public RemoteAccessVpnService remoteAccessVpnService() {
+ return Mockito.mock(RemoteAccessVpnService.class);
+ }
+ @Bean
+ public ResourceLimitService resourceLimitService() {
+ return Mockito.mock(ResourceLimitService.class);
+ }
+ @Bean
+ public ResourceManager resourceManager() {
+ return Mockito.mock(ResourceManager.class);
+ }
+ @Bean
+ public ResourceMetaDataService resourceMetaDataService() {
+ return Mockito.mock(ResourceMetaDataService.class);
+ }
+ @Bean
+ public SecondaryStorageVmManager secondaryStorageVmManager() {
+ return Mockito.mock(SecondaryStorageVmManager.class);
+ }
+ @Bean
+ public Site2SiteVpnManager site2SiteVpnManager() {
+ return Mockito.mock(Site2SiteVpnManager.class);
+ }
+ @Bean
+ public Site2SiteVpnServiceProvider site2SiteVpnServiceProvider() {
+ return Mockito.mock(Site2SiteVpnServiceProvider.class);
+ }
+ @Bean
+ public SnapshotApiService snapshotApiService() {
+ return Mockito.mock(SnapshotApiService.class);
+ }
+ @Bean
+ public SnapshotManager snapshotManager() {
+ return Mockito.mock(SnapshotManager.class);
+ }
+ @Bean
+ public StorageManager storageManager() {
+ return Mockito.mock(StorageManager.class);
+ }
+ @Bean
+ public StorageNetworkManager storageNetworkManager() {
+ return Mockito.mock(StorageNetworkManager.class);
+ }
+ @Bean
+ public StorageNetworkService storageNetworkService() {
+ return Mockito.mock(StorageNetworkService.class);
+ }
+ @Bean
+ public StoragePoolAllocator storagePoolAllocator() {
+ return Mockito.mock(StoragePoolAllocator.class);
+ }
+ @Bean
+ public SyncQueueManager syncQueueManager() {
+ return Mockito.mock(SyncQueueManager.class);
+ }
+ @Bean
+ public TaggedResourceService taggedResourceService() {
+ return Mockito.mock(TaggedResourceService.class);
+ }
+ @Bean
+ public TemplateDataFactory templateDataFactory() {
+ return Mockito.mock(TemplateDataFactory.class);
+ }
+ @Bean
+ public TemplateApiService templateApiService() {
+ return Mockito.mock(TemplateApiService.class);
+ }
+ @Bean
+ public TemplateManager templateManager() {
+ return Mockito.mock(TemplateManager.class);
+ }
+ @Bean
+ public TemplateService templateService() {
+ return Mockito.mock(TemplateService.class);
+ }
+ @Bean
+ public UsageService usageService() {
+ return Mockito.mock(UsageService.class);
+ }
+ @Bean
+ public UserAuthenticator userAuthenticator() {
+ return Mockito.mock(UserAuthenticator.class);
+ }
+ @Bean
+ public VMSnapshotManager vMSnapshotManager() {
+ return Mockito.mock(VMSnapshotManager.class);
+ }
+ @Bean
+ public VolumeApiService volumeApiService() {
+ return Mockito.mock(VolumeApiService.class);
+ }
+ @Bean
+ public VolumeDataFactory volumeDataFactory() {
+ return Mockito.mock(VolumeDataFactory.class);
+ }
+ @Bean
+ public VolumeOrchestrationService volumeOrchestrationService() {
+ return Mockito.mock(VolumeOrchestrationService.class);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7099686b/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/TestDbSetup.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/TestDbSetup.java b/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/TestDbSetup.java
new file mode 100644
index 0000000..8d48163
--- /dev/null
+++ b/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/TestDbSetup.java
@@ -0,0 +1,141 @@
+package net.juniper.contrail.management;
+
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.io.IOException;
+import java.io.File;
+import java.io.*;
+import java.util.Properties;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import java.nio.file.Paths;
+
+import org.apache.log4j.Logger;
+
+public class TestDbSetup {
+
+ public static int findFreePort() throws Exception {
+
+ int port;
+ ServerSocket socket= new ServerSocket(0);
+ port = socket.getLocalPort();
+ socket.close();
+
+ return port;
+ }
+
+ public static void startMysqlServer(int port, String startMysqlScript) throws Exception {
+
+ try {
+
+ String cwd = Paths.get(".").toAbsolutePath().toString();
+ Runtime r = Runtime.getRuntime();
+ String script = startMysqlScript;
+ if (script == null) {
+ script = "test/resources/mysql_db_start.sh " + port;
+ }
+ Process mysql_server_process = r.exec("sh " + cwd + "/" + script);
+ System.out.println("new sql server instance launched on port: " + port);
+ /* sleep 5 seconds for server to get started */
+ Thread.sleep(5000);
+ } catch (Exception e) {
+
+ String cause = e.getMessage();
+ if (cause.equals("sh: not found"))
+ System.out.println("No sh interpreter found.");
+ throw e;
+ }
+ }
+
+ public static void stopMysqlServer(int port, String stopMysqlScript) throws Exception {
+
+ try {
+ Runtime r = Runtime.getRuntime();
+ String script = stopMysqlScript;
+ if (script == null) {
+ script = "test/resources/mysql_db_stop.sh " + port;
+ }
+ Process mysql_server_process = r.exec("sh " + script);
+ System.out.println("sql server instance running at port " + port + " stopped");
+ /* sleep 3 seconds for server to get started */
+ Thread.sleep(3000);
+ } catch (Exception e) {
+
+ String cause = e.getMessage();
+ if (cause.equals("sh: not found"))
+ System.out.println("No sh interpreter found.");
+ throw e;
+ }
+ }
+
+ /* this is required for deploying db with new set of sql server parameters */
+ public static void copyDbPropertiesFile() throws Exception {
+ Runtime.getRuntime().exec("cp ../../../utils/conf/db.properties ../../../utils/conf/db.properties.override");
+ }
+
+ public static void updateSqlPort(int port, String propertyFileOverride) throws Exception {
+
+ PropertiesConfiguration config = new PropertiesConfiguration(propertyFileOverride);
+ System.out.println("File: " + propertyFileOverride + "; old: db.properties port: " +
+ config.getProperty("db.cloud.port") + ", new port: " + port);
+ config.setProperty("db.cloud.port", "" + port);
+ config.setProperty("db.cloud.username", System.getProperty("user.name"));
+ config.setProperty("db.cloud.password", "");
+
+ config.setProperty("db.usage.port", "" + port);
+ config.setProperty("db.usage.username", System.getProperty("user.name"));
+ config.setProperty("db.usage.password", "");
+
+ config.setProperty("db.awsapi.port", "" + port);
+ config.setProperty("db.awsapi.username", System.getProperty("user.name"));
+ config.setProperty("db.awsapi.password", "");
+
+ config.setProperty("db.simulator.port", "" + port);
+ config.setProperty("db.simulator.username", System.getProperty("user.name"));
+ config.setProperty("db.simulator.password", "");
+
+ config.save();
+ }
+
+ public static void initCloudstackDb() throws Exception {
+ try {
+ File dir = new File("../../../");
+ Runtime r = Runtime.getRuntime();
+ Process mysql_server_process = r.exec("mvn -P developer -pl developer -Ddeploydb ", null, dir);
+ dumpProcessOutput(mysql_server_process);
+ /* sleep 3 seconds for server to get started */
+ Thread.sleep(3000);
+ } catch (Exception e) {
+ String cause = e.getMessage();
+ System.out.println("e: " + cause);
+ throw e;
+ }
+
+ }
+
+
+ public static void dumpProcessOutput(Process p) throws Exception {
+
+ BufferedReader istream = null;
+ istream = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ String line = null;
+ while ((line = istream.readLine()) != null) {
+ System.out.println(line);
+ }
+ }
+
+ public static int init(String startScript) throws Exception {
+ int port = TestDbSetup.findFreePort();
+ TestDbSetup.startMysqlServer(port, startScript);
+ copyDbPropertiesFile();
+ /* both of these files needs to have mysql port, username password details */
+ TestDbSetup.updateSqlPort(port, "db.properties"); /* for cloudstack runtime */
+ TestDbSetup.updateSqlPort(port, "../../../utils/conf/db.properties.override"); /* for deploying db */
+ TestDbSetup.initCloudstackDb();
+ return port;
+ }
+
+ public static void destroy(int port, String stopScript) throws Exception {
+ TestDbSetup.stopMysqlServer(port, stopScript);
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7099686b/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/VirtualNetworkModelTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/VirtualNetworkModelTest.java b/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/VirtualNetworkModelTest.java
new file mode 100644
index 0000000..dccd0ff
--- /dev/null
+++ b/plugins/network-elements/juniper-contrail/test/net/juniper/contrail/management/VirtualNetworkModelTest.java
@@ -0,0 +1,44 @@
+package net.juniper.contrail.management;
+
+import java.util.UUID;
+
+import net.juniper.contrail.model.VirtualNetworkModel;
+
+import org.apache.log4j.Logger;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import com.cloud.network.Networks.TrafficType;
+import com.cloud.network.dao.NetworkVO;
+
+import junit.framework.TestCase;
+
+public class VirtualNetworkModelTest extends TestCase {
+ private static final Logger s_logger =
+ Logger.getLogger(VirtualNetworkModelTest.class);
+
+ @Test
+ public void testDBLookup() {
+ ModelDatabase db = new ModelDatabase();
+ NetworkVO network = Mockito.mock(NetworkVO.class);
+ VirtualNetworkModel storageModel = new VirtualNetworkModel(network, null, ContrailManager.managementNetworkName,
+ TrafficType.Storage);
+ db.getVirtualNetworks().add(storageModel);
+ VirtualNetworkModel mgmtModel = new VirtualNetworkModel(network, null, ContrailManager.managementNetworkName,
+ TrafficType.Management);
+ db.getVirtualNetworks().add(mgmtModel);
+ VirtualNetworkModel guestModel1 = new VirtualNetworkModel(network, UUID.randomUUID().toString(), "test",
+ TrafficType.Guest);
+ db.getVirtualNetworks().add(guestModel1);
+ VirtualNetworkModel guestModel2 = new VirtualNetworkModel(network, UUID.randomUUID().toString(), "test",
+ TrafficType.Guest);
+ db.getVirtualNetworks().add(guestModel2);
+ s_logger.debug("networks: " + db.getVirtualNetworks().size());
+ assertEquals(4, db.getVirtualNetworks().size());
+ assertSame(storageModel, db.lookupVirtualNetwork(null, storageModel.getName(), TrafficType.Storage));
+ assertSame(mgmtModel, db.lookupVirtualNetwork(null, mgmtModel.getName(), TrafficType.Management));
+ assertSame(guestModel1, db.lookupVirtualNetwork(guestModel1.getUuid(), null, TrafficType.Guest));
+ assertSame(guestModel2, db.lookupVirtualNetwork(guestModel2.getUuid(), null, TrafficType.Guest));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7099686b/plugins/network-elements/juniper-contrail/test/resources/contrail.properties
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/test/resources/contrail.properties b/plugins/network-elements/juniper-contrail/test/resources/contrail.properties
new file mode 100644
index 0000000..2769c9f
--- /dev/null
+++ b/plugins/network-elements/juniper-contrail/test/resources/contrail.properties
@@ -0,0 +1,2 @@
+api.hostname =
+api.port =
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7099686b/plugins/network-elements/juniper-contrail/test/resources/db.properties
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/test/resources/db.properties b/plugins/network-elements/juniper-contrail/test/resources/db.properties
new file mode 100644
index 0000000..04a7175
--- /dev/null
+++ b/plugins/network-elements/juniper-contrail/test/resources/db.properties
@@ -0,0 +1,50 @@
+
+cluster.servlet.port=9090
+
+# CloudStack database settings
+db.cloud.username=cloud
+db.cloud.password=cloud
+db.root.password=
+db.cloud.host=localhost
+db.cloud.port=3306
+db.cloud.name=cloud
+
+# CloudStack database tuning parameters
+db.cloud.maxActive=250
+db.cloud.maxIdle=30
+db.cloud.maxWait=10000
+db.cloud.autoReconnect=true
+db.cloud.validationQuery=SELECT 1
+db.cloud.testOnBorrow=true
+db.cloud.testWhileIdle=true
+db.cloud.timeBetweenEvictionRunsMillis=40000
+db.cloud.minEvictableIdleTimeMillis=240000
+db.cloud.poolPreparedStatements=false
+db.cloud.url.params=prepStmtCacheSize=517&cachePrepStmts=true&prepStmtCacheSqlLimit=4096
+
+# usage database settings
+db.usage.username=cloud
+db.usage.password=cloud
+db.usage.host=localhost
+db.usage.port=3306
+db.usage.name=cloud_usage
+
+# usage database tuning parameters
+db.usage.maxActive=100
+db.usage.maxIdle=30
+db.usage.maxWait=10000
+db.usage.autoReconnect=true
+
+# awsapi database settings
+db.awsapi.name=cloudbridge
+
+# Simulator database settings
+db.simulator.username=cloud
+db.simulator.password=cloud
+db.simulator.host=localhost
+db.simulator.port=3306
+db.simulator.name=simulator
+db.simulator.maxActive=250
+db.simulator.maxIdle=30
+db.simulator.maxWait=10000
+db.simulator.autoReconnect=true
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7099686b/plugins/network-elements/juniper-contrail/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/test/resources/log4j.properties b/plugins/network-elements/juniper-contrail/test/resources/log4j.properties
new file mode 100644
index 0000000..a482e6f
--- /dev/null
+++ b/plugins/network-elements/juniper-contrail/test/resources/log4j.properties
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
+log4j.appender.stdout.threshold=INFO
+log4j.rootLogger=INFO, stdout, rolling
+log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
+log4j.appender.rolling.layout.ConversionPattern=%d %-5p [%c{3}] (%t:%x) %m%n
+log4j.appender.rolling.file.threshold=DEBUG
+log4j.appender.rolling.File=./logs/testclient.log
+log4j.appender.rolling.DatePattern='.'yyy-MM-dd
+log4j.appender.rolling.file.append=false
+log4j.category.org.apache=INFO, rolling, stdout
+#log4j.category.com.cloud.utils.db.Transaction=ALL
+log4j.category.net.juniper.contrail=ALL
+log4j.category.com.cloud.network=ALL
+
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7099686b/plugins/network-elements/juniper-contrail/test/resources/mysql_db_start.sh
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/test/resources/mysql_db_start.sh b/plugins/network-elements/juniper-contrail/test/resources/mysql_db_start.sh
new file mode 100644
index 0000000..cf033a6
--- /dev/null
+++ b/plugins/network-elements/juniper-contrail/test/resources/mysql_db_start.sh
@@ -0,0 +1,23 @@
+if [ "$#" -ne 1 ] ; then
+ echo "Usage: $0 <port>" >&2
+ exit 1
+fi
+
+echo "starting mysql on port: "$1
+
+echo "creating temporary mysql db directories /tmp/mysql"$1
+mkdir /tmp/mysql$1
+mkdir /tmp/mysql$1/data
+
+echo "install db";
+
+mysql_install_db --user=$USER --datadir=/tmp/mysql$1/data
+mysqld_safe --datadir=/tmp/mysql$1/data --socket=/tmp/mysql$1/mysqld.sock --port=$1 --log-error=/tmp/mysql$1/mysql.log --pid-file=/tmp/mysql$1/mysql.pid --user=$USER &
+
+echo "new mysql server is started on port "$1
+
+sleep 3
+
+echo "commands ...."
+echo "to connect(from local host): mysql -h 127.0.0.1 -P "$1
+echo "to stop: mysqladmin -S /tmp/mysql"$1"/mysqld.sock shutdown -u root"
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7099686b/plugins/network-elements/juniper-contrail/test/resources/mysql_db_stop.sh
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/test/resources/mysql_db_stop.sh b/plugins/network-elements/juniper-contrail/test/resources/mysql_db_stop.sh
new file mode 100644
index 0000000..90aa07d
--- /dev/null
+++ b/plugins/network-elements/juniper-contrail/test/resources/mysql_db_stop.sh
@@ -0,0 +1,14 @@
+if [ "$#" -ne 1 ] ; then
+ echo "Usage: $0 <port>" >&2
+ exit 1
+fi
+
+echo "Stopping mysql server on port "$1
+
+mysqladmin -S /tmp/mysql$1/mysqld.sock shutdown -u root
+
+rm -rf /tmp/mysql$1
+
+echo "Deleting db directories"
+
+