/** * Abiquo community edition * cloud management application for hybrid clouds * Copyright (C) 2008-2010 - Abiquo Holdings S.L. * * This application is free software; you can redistribute it and/or * modify it under the terms of the GNU LESSER GENERAL PUBLIC * LICENSE as published by the Free Software Foundation under * version 3 of the License * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * LESSER GENERAL PUBLIC LICENSE v.3 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ package com.abiquo.api.resources.cloud; import static com.abiquo.api.common.Assert.assertLinkExist; import static com.abiquo.api.common.UriTestResolver.resolveVirtualMachineActionGetIPsURI; import static com.abiquo.api.common.UriTestResolver.resolveVirtualMachineStateURI; import static com.abiquo.api.common.UriTestResolver.resolveVirtualMachineTemplateURI; import static com.abiquo.api.common.UriTestResolver.resolveVirtualMachineURI; import static com.abiquo.testng.TestConfig.BASIC_INTEGRATION_TESTS; import static com.abiquo.testng.TestConfig.NETWORK_INTEGRATION_TESTS; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.ws.rs.core.Response.Status; import org.apache.activemq.broker.BrokerService; import org.apache.wink.client.ClientConfig; import org.apache.wink.client.ClientResponse; import org.apache.wink.client.RestClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import com.abiquo.api.resources.AbstractJpaGeneratorIT; import com.abiquo.api.resources.TaskResourceUtils; import com.abiquo.api.resources.appslibrary.VirtualMachineTemplateResource; import com.abiquo.api.services.TaskService; import com.abiquo.model.enumerator.RemoteServiceType; import com.abiquo.model.rest.RESTLink; import com.abiquo.server.core.appslibrary.VirtualMachineTemplate; import com.abiquo.server.core.cloud.NodeVirtualImage; import com.abiquo.server.core.cloud.VirtualAppliance; import com.abiquo.server.core.cloud.VirtualDatacenter; import com.abiquo.server.core.cloud.VirtualMachine; import com.abiquo.server.core.cloud.VirtualMachineDAO; import com.abiquo.server.core.cloud.VirtualMachineDto; import com.abiquo.server.core.cloud.VirtualMachineState; import com.abiquo.server.core.cloud.VirtualMachineStateDto; import com.abiquo.server.core.cloud.VirtualMachineWithNodeDto; import com.abiquo.server.core.enterprise.Enterprise; import com.abiquo.server.core.enterprise.Privilege; import com.abiquo.server.core.enterprise.Role; import com.abiquo.server.core.enterprise.User; import com.abiquo.server.core.infrastructure.Datacenter; import com.abiquo.server.core.infrastructure.Datastore; import com.abiquo.server.core.infrastructure.Machine; import com.abiquo.server.core.infrastructure.RemoteService; import com.abiquo.server.core.infrastructure.network.NicsDto; import com.abiquo.server.core.task.Job; import com.abiquo.server.core.task.Job.JobType; import com.abiquo.server.core.task.JobGenerator; import com.abiquo.server.core.task.Task; import com.abiquo.server.core.task.TaskDto; import com.abiquo.server.core.task.TaskGenerator; import com.abiquo.server.core.task.TasksDto; import com.abiquo.server.core.task.enums.TaskType; import com.abiquo.tracer.Constants; public class VirtualMachineResourceIT extends AbstractJpaGeneratorIT { protected Enterprise ent; protected Datacenter datacenter; protected VirtualDatacenter vdc; protected VirtualAppliance vapp; protected Role r; protected User u; protected Enterprise e; private static final int CLIENT_TIMEOUT = 1000000000; // DEBUG private static final String SYSADMIN = "sysadmin"; static RestClient client; final static Logger LOGGER = LoggerFactory.getLogger(VirtualMachineResourceIT.class); @Autowired VirtualMachineDAO vmachineDao; @Autowired protected TaskService taskService; @Autowired protected JedisPool jedisPool; @BeforeClass public static void setUpServer() throws Exception { ClientConfig conf = new ClientConfig(); conf.readTimeout(CLIENT_TIMEOUT); client = new RestClient(conf); initTraceProcessor(); } @AfterClass public static void tearDownServer() throws Exception { destroyTraceProcessor(); } @BeforeMethod public void setupSysadmin() { Enterprise e = enterpriseGenerator.createUniqueInstance(); Role r = roleGenerator.createInstanceSysAdmin(); User u = userGenerator.createInstance(e, r, SYSADMIN, SYSADMIN); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(e); for (Privilege p : r.getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(r); entitiesToSetup.add(u); setup(entitiesToSetup.toArray()); } @BeforeMethod public void setUp() { ent = enterpriseGenerator.createUniqueInstance(); datacenter = datacenterGenerator.createUniqueInstance(); vdc = vdcGenerator.createInstance(datacenter, ent); vapp = vappGenerator.createInstance(vdc); } @AfterTest public void clearRedis() { Jedis jedis = jedisPool.getResource(); jedis.flushDB(); jedisPool.returnResource(jedis); } @Override @AfterMethod(groups = {BASIC_INTEGRATION_TESTS, NETWORK_INTEGRATION_TESTS}) public void tearDown() { super.tearDown(); } @Test(groups = "redisaccess") public void test_redisBackedTasks() { // Create a virtual machine VirtualMachine vm = vmGenerator.createInstance(ent); vm.getVirtualMachineTemplate().getRepository().setDatacenter(datacenter); Machine machine = vm.getHypervisor().getMachine(); machine.setDatacenter(vdc.getDatacenter()); machine.setRack(null); // Associate it to the created virtual appliance NodeVirtualImage nvi = nodeVirtualImageGenerator.createInstance(vapp, vm); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(ent); entitiesToSetup.add(datacenter); entitiesToSetup.add(vdc); entitiesToSetup.add(vapp); for (Privilege p : vm.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm.getUser().getRole()); entitiesToSetup.add(vm.getUser()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getRepository()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getCategory()); entitiesToSetup.add(vm.getVirtualMachineTemplate()); entitiesToSetup.add(machine); entitiesToSetup.add(vm.getHypervisor()); entitiesToSetup.add(vm); entitiesToSetup.add(nvi); setup(entitiesToSetup.toArray()); // Persist redis data TaskGenerator taskGenerator = new TaskGenerator(); JobGenerator jobGenerator = new JobGenerator(); Job configure = jobGenerator.createUniqueInstance(); configure.setType(JobType.CONFIGURE); Job poweron = jobGenerator.createUniqueInstance(); poweron.setType(JobType.POWER_ON); Task deploy = taskGenerator.createUniqueInstance(); deploy.setType(TaskType.DEPLOY); deploy.setOwnerId(vm.getId().toString()); deploy.setUserId(vm.getUser().getId().toString()); deploy.getJobs().add(configure); deploy.getJobs().add(poweron); taskService.addTask(deploy); // Test happy path TASKS String vmURI = resolveVirtualMachineURI(vdc.getId(), vapp.getId(), vm.getId()); String tasksURI = vmURI.concat(TaskResourceUtils.TASKS_PATH); ClientResponse response = get(tasksURI, SYSADMIN, SYSADMIN, TasksDto.MEDIA_TYPE); TasksDto tasks = response.getEntity(TasksDto.class); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); assertNotNull(tasks); assertEquals(tasks.getCollection().size(), 1); RESTLink parent = tasks.searchLink("parent"); RESTLink self = tasks.searchLink("self"); assertNotNull(parent); assertNotNull(self); assertEquals(parent.getHref(), vmURI); assertEquals(self.getHref(), tasksURI); // Test happy path TASK vmURI = resolveVirtualMachineURI(vdc.getId(), vapp.getId(), vm.getId()); tasksURI = vmURI.concat(TaskResourceUtils.TASKS_PATH); String taskURI = tasksURI.concat("/").concat(deploy.getTaskId()); response = get(taskURI, SYSADMIN, SYSADMIN, TaskDto.MEDIA_TYPE); TaskDto task = response.getEntity(TaskDto.class); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); assertNotNull(task); parent = task.searchLink("parent"); self = task.searchLink("self"); assertNotNull(parent); assertNotNull(self); assertEquals(parent.getHref(), tasksURI); assertEquals(self.getHref(), taskURI); // NOT FOUND when invalid VDC vmURI = resolveVirtualMachineURI(vdc.getId() + 1, vapp.getId(), vm.getId()); tasksURI = vmURI.concat(TaskResourceUtils.TASKS_PATH); taskURI = tasksURI.concat("/").concat(deploy.getTaskId()); response = get(taskURI, SYSADMIN, SYSADMIN, TaskDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); // NOT FOUND when invalid VAPP vmURI = resolveVirtualMachineURI(vdc.getId(), vapp.getId() + 1, vm.getId()); tasksURI = vmURI.concat(TaskResourceUtils.TASKS_PATH); taskURI = tasksURI.concat("/").concat(deploy.getTaskId()); response = get(taskURI, SYSADMIN, SYSADMIN, TaskDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); // NOT FOUND when invalid VM vmURI = resolveVirtualMachineURI(vdc.getId(), vapp.getId(), vm.getId() + 1); tasksURI = vmURI.concat(TaskResourceUtils.TASKS_PATH); taskURI = tasksURI.concat("/").concat(deploy.getTaskId()); response = get(taskURI, SYSADMIN, SYSADMIN, TaskDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); } /** * Create two virtual machines into a virtual appliance. Check the resources are addressable. */ // @Test public void getVirtualMachineTest() { // Create a virtual machine VirtualMachine vm = vmGenerator.createInstance(ent); VirtualMachine vm2 = vmGenerator.createInstance(ent); vm.getVirtualMachineTemplate().getRepository().setDatacenter(datacenter); vm2.getVirtualMachineTemplate().getRepository().setDatacenter(datacenter); Machine machine = vm.getHypervisor().getMachine(); machine.setDatacenter(vdc.getDatacenter()); machine.setRack(null); Machine machine2 = vm2.getHypervisor().getMachine(); machine2.setDatacenter(vdc.getDatacenter()); machine2.setRack(null); // Asociate it to the created virtual appliance NodeVirtualImage nvi = nodeVirtualImageGenerator.createInstance(vapp, vm); NodeVirtualImage nvi2 = nodeVirtualImageGenerator.createInstance(vapp, vm2); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(ent); entitiesToSetup.add(datacenter); entitiesToSetup.add(vdc); entitiesToSetup.add(vapp); for (Privilege p : vm.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm.getUser().getRole()); entitiesToSetup.add(vm.getUser()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getRepository()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getCategory()); entitiesToSetup.add(vm.getVirtualMachineTemplate()); entitiesToSetup.add(machine); entitiesToSetup.add(vm.getHypervisor()); entitiesToSetup.add(vm); entitiesToSetup.add(nvi); for (Privilege p : vm2.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm2.getUser().getRole()); entitiesToSetup.add(vm2.getUser()); entitiesToSetup.add(vm2.getVirtualMachineTemplate().getRepository()); entitiesToSetup.add(vm2.getVirtualMachineTemplate().getCategory()); entitiesToSetup.add(vm2.getVirtualMachineTemplate()); entitiesToSetup.add(machine2); entitiesToSetup.add(vm2.getHypervisor()); entitiesToSetup.add(vm2); entitiesToSetup.add(nvi2); setup(entitiesToSetup.toArray()); // Check for vm ClientResponse response = get(resolveVirtualMachineURI(vdc.getId(), vapp.getId(), vm.getId()), SYSADMIN, SYSADMIN, VirtualMachineDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); response.toString(); VirtualMachineDto vmDto = response.getEntity(VirtualMachineDto.class); assertLinkExist(vmDto, resolveVirtualMachineActionGetIPsURI(vdc.getId(), vapp.getId(), vm.getId()), VirtualMachineNetworkConfigurationResource.NICS_PATH); assertLinkExist(vmDto, resolveVirtualMachineURI(vdc.getId(), vapp.getId(), vm.getId()), "edit"); assertLinkExist( vmDto, resolveVirtualMachineTemplateURI( vm.getVirtualMachineTemplate().getEnterprise().getId(), vm .getVirtualMachineTemplate().getRepository().getDatacenter().getId(), vm .getVirtualMachineTemplate().getId()), VirtualMachineTemplateResource.VIRTUAL_MACHINE_TEMPLATE); assertNotNull(vmDto); // Check for vm2 response = get(resolveVirtualMachineURI(vdc.getId(), vapp.getId(), vm2.getId()), SYSADMIN, SYSADMIN, VirtualMachineDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); vmDto = response.getEntity(VirtualMachineDto.class); resolveVirtualMachineActionGetIPsURI(vdc.getId(), vapp.getId(), vm2.getId()); assertLinkExist(vmDto, resolveVirtualMachineURI(vdc.getId(), vapp.getId(), vm2.getId()), "edit"); assertLinkExist( vmDto, resolveVirtualMachineTemplateURI(vm2.getVirtualMachineTemplate().getEnterprise() .getId(), vm2.getVirtualMachineTemplate().getRepository().getDatacenter().getId(), vm2.getVirtualMachineTemplate().getId()), VirtualMachineTemplateResource.VIRTUAL_MACHINE_TEMPLATE); assertNotNull(vmDto); } /** * Check an invalid virtual machine id Server response should return a 404 NOT FOUND status code */ // @Test public void getVirtualMachineRaises404WhenInvalidVirtualMachineId() { setup(ent, datacenter, vdc, vapp); // Check a randomly value ClientResponse response = get(resolveVirtualMachineURI(vdc.getId(), vapp.getId(), new Random().nextInt(1000)), SYSADMIN, SYSADMIN, VirtualMachineDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); } /** * Check an invalid virtual appliance value for a valid virtual machine id Server response * should return a 404 NOT FOUND status code */ // @Test public void getVirtualMachineRaises404WhenInvalidVirtualApplianceId() { VirtualMachine vm = vmGenerator.createInstance(ent); NodeVirtualImage nvi = nodeVirtualImageGenerator.createInstance(vapp, vm); vm.getVirtualMachineTemplate().getRepository().setDatacenter(datacenter); Machine machine = vm.getHypervisor().getMachine(); machine.setDatacenter(vdc.getDatacenter()); machine.setRack(null); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(ent); entitiesToSetup.add(datacenter); entitiesToSetup.add(vdc); entitiesToSetup.add(vapp); for (Privilege p : vm.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm.getUser().getRole()); entitiesToSetup.add(vm.getUser()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getRepository()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getCategory()); entitiesToSetup.add(vm.getVirtualMachineTemplate()); entitiesToSetup.add(machine); entitiesToSetup.add(vm.getHypervisor()); entitiesToSetup.add(vm); entitiesToSetup.add(nvi); setup(entitiesToSetup.toArray()); // Check the vm has been succesfully created ClientResponse response = get(resolveVirtualMachineURI(vdc.getId(), vapp.getId(), vm.getId()), SYSADMIN, SYSADMIN, VirtualMachineDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); VirtualMachineDto vmDto = response.getEntity(VirtualMachineDto.class); assertNotNull(vmDto); // Check again the valid value of vm Id but with an invalid vapp Id response = get(resolveVirtualMachineURI(vdc.getId(), vapp.getId() + 1, vm.getId()), SYSADMIN, SYSADMIN, VirtualMachineDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); } /** * Check the virtual machine object of an invalid virtualdatacenter id Server response should * return a 404 NOT FOUND status code */ // @Test public void getVirtualMachineRaises404WhenInvalidVirtualDatacenterId() { VirtualMachine vm = vmGenerator.createInstance(ent); NodeVirtualImage nvi = nodeVirtualImageGenerator.createInstance(vapp, vm); vm.getVirtualMachineTemplate().getRepository().setDatacenter(datacenter); Machine machine = vm.getHypervisor().getMachine(); machine.setDatacenter(vdc.getDatacenter()); machine.setRack(null); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(ent); entitiesToSetup.add(datacenter); entitiesToSetup.add(vdc); entitiesToSetup.add(vapp); for (Privilege p : vm.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm.getUser().getRole()); entitiesToSetup.add(vm.getUser()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getRepository()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getCategory()); entitiesToSetup.add(vm.getVirtualMachineTemplate()); entitiesToSetup.add(machine); entitiesToSetup.add(vm.getHypervisor()); entitiesToSetup.add(vm); entitiesToSetup.add(nvi); setup(entitiesToSetup.toArray()); // Check the vm has been succesfully created ClientResponse response = get(resolveVirtualMachineURI(vdc.getId(), vapp.getId(), vm.getId()), SYSADMIN, SYSADMIN, VirtualMachineDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); VirtualMachineDto vmDto = response.getEntity(VirtualMachineDto.class); assertNotNull(vmDto); // Check again the valid value of vm Id but with an invalid vdc Id response = get(resolveVirtualMachineURI(new Random().nextInt(1000), vapp.getId(), vm.getId()), SYSADMIN, SYSADMIN, VirtualMachineDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); } // TODO: Create a test to return a non-empty list of IPs. /** * Create a virtual machine. Check the action resource returns an empty list */ // @Test(groups = {NETWORK_INTEGRATION_TESTS}) public void getVirtualMachineActionIPsEmptyList() { VirtualMachine vm = vmGenerator.createInstance(ent); NodeVirtualImage nvi = nodeVirtualImageGenerator.createInstance(vapp, vm); Machine machine = vm.getHypervisor().getMachine(); machine.setDatacenter(vdc.getDatacenter()); machine.setRack(null); vm.getVirtualMachineTemplate().getRepository() .setDatacenter(vm.getHypervisor().getMachine().getDatacenter()); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(ent); entitiesToSetup.add(datacenter); entitiesToSetup.add(vdc); entitiesToSetup.add(vapp); for (Privilege p : vm.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm.getUser().getRole()); entitiesToSetup.add(vm.getUser()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getRepository()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getCategory()); entitiesToSetup.add(vm.getVirtualMachineTemplate()); entitiesToSetup.add(machine); entitiesToSetup.add(vm.getHypervisor().getMachine()); entitiesToSetup.add(vm.getHypervisor()); entitiesToSetup.add(vm); entitiesToSetup.add(nvi); setup(entitiesToSetup.toArray()); ClientResponse response = get(resolveVirtualMachineActionGetIPsURI(vdc.getId(), vapp.getId(), vm.getId()), SYSADMIN, SYSADMIN, NicsDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); NicsDto entity = response.getEntity(NicsDto.class); assertNotNull(entity); assertNotNull(entity.getCollection()); assertEquals(entity.getCollection().size(), 0); } /** * Create a virtual machine. Ask the IPs for an invalid virtual machine identifier value. */ // @Test(groups = {NETWORK_INTEGRATION_TESTS}) public void getVirtualMachineActionIPsRaises404WhenVmIsARandomValue() { setup(ent, datacenter, vdc, vapp); ClientResponse response = get(resolveVirtualMachineActionGetIPsURI(vdc.getId(), vapp.getId(), new Random().nextInt(1000)), SYSADMIN, SYSADMIN, NicsDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); } /** * Create a virtual machine. Ask the IPs for a valid virtual appliance but invalid virtual * datacenter. */ // @Test(groups = {NETWORK_INTEGRATION_TESTS}) public void getVirtualMachineActionIPsRaises404WhenVappNotBelongsToVDC() { VirtualMachine vm = vmGenerator.createInstance(ent); NodeVirtualImage nvi = nodeVirtualImageGenerator.createInstance(vapp, vm); vm.getVirtualMachineTemplate().getRepository().setDatacenter(datacenter); Machine machine = vm.getHypervisor().getMachine(); machine.setDatacenter(vdc.getDatacenter()); machine.setRack(null); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(ent); entitiesToSetup.add(datacenter); entitiesToSetup.add(vdc); entitiesToSetup.add(vapp); for (Privilege p : vm.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm.getUser().getRole()); entitiesToSetup.add(vm.getUser()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getRepository()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getCategory()); entitiesToSetup.add(vm.getVirtualMachineTemplate()); entitiesToSetup.add(machine); entitiesToSetup.add(vm.getHypervisor()); entitiesToSetup.add(vm); entitiesToSetup.add(nvi); setup(entitiesToSetup.toArray()); ClientResponse response = get(resolveVirtualMachineActionGetIPsURI(vdc.getId() + 1, vapp.getId(), vm.getId()), SYSADMIN, SYSADMIN, NicsDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); } /** * Create a virtual machine. Ask the IPs for a valid virtual machine but invalid virtual * appliance. */ // @Test public void getVirtualMachineActionIPsRaises404WhenVMNotBelongsToVapp() { VirtualMachine vm = vmGenerator.createInstance(ent); NodeVirtualImage nvi = nodeVirtualImageGenerator.createInstance(vapp, vm); vm.getVirtualMachineTemplate().getRepository().setDatacenter(datacenter); Machine machine = vm.getHypervisor().getMachine(); machine.setDatacenter(vdc.getDatacenter()); machine.setRack(null); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(ent); entitiesToSetup.add(datacenter); entitiesToSetup.add(vdc); entitiesToSetup.add(vapp); for (Privilege p : vm.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm.getUser().getRole()); entitiesToSetup.add(vm.getUser()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getRepository()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getCategory()); entitiesToSetup.add(vm.getVirtualMachineTemplate()); entitiesToSetup.add(machine); entitiesToSetup.add(vm.getHypervisor()); entitiesToSetup.add(vm); entitiesToSetup.add(nvi); setup(entitiesToSetup.toArray()); ClientResponse response = get(resolveVirtualMachineActionGetIPsURI(vdc.getId(), vapp.getId() + 1, vm.getId()), SYSADMIN, SYSADMIN, NicsDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); } /** * Trace related */ static private BrokerService broker; static private String brokerUrl; /** * API use the tracer in order to write the Soft/Hard limits exceeded */ static private void initTraceProcessor() { System.setProperty(Constants.ABICLOUD_TRACER_BROKER_URL, "tcp://localhost:6996"); broker = new BrokerService(); // configure the broker try { brokerUrl = System.getProperty(Constants.ABICLOUD_TRACER_BROKER_URL, Constants.BROKER_URL); broker.addConnector(brokerUrl); broker.setPersistent(false); broker.start(); } catch (Exception e) { Assert.fail("Can't configure the trace borker", e); } } static private void destroyTraceProcessor() throws Exception { broker.stop(); } /** * Create a virtual machines and retrieve its state. */ @Test(enabled = false) public void getVirtualMachineStateTest() { VirtualMachineTemplate vi = virtualMachineTemplateGenerator.createInstance(ent, datacenter); VirtualMachine vm = vmGenerator.createInstance(vi); vm.setState(VirtualMachineState.OFF); Machine machine = vm.getHypervisor().getMachine(); machine.setDatacenter(vdc.getDatacenter()); machine.setRack(null); // Asociate it to the created virtual appliance NodeVirtualImage nvi = nodeVirtualImageGenerator.createInstance(vapp, vm); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(ent); entitiesToSetup.add(datacenter); entitiesToSetup.add(vi.getCategory()); entitiesToSetup.add(vi.getRepository()); entitiesToSetup.add(vi); entitiesToSetup.add(vdc); entitiesToSetup.add(vapp); for (Privilege p : vm.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm.getUser().getEnterprise()); entitiesToSetup.add(vm.getUser().getRole()); entitiesToSetup.add(vm.getUser()); entitiesToSetup.add(vm.getVirtualMachineTemplate()); entitiesToSetup.add(machine); entitiesToSetup.add(vm.getHypervisor()); entitiesToSetup.add(vm); entitiesToSetup.add(nvi); setup(entitiesToSetup.toArray()); // Check for vm state ClientResponse response = get(resolveVirtualMachineStateURI(vdc.getId(), vapp.getId(), vm.getId()), "sysadmin", "sysadmin"); VirtualMachineStateDto vmDto = response.getEntity(VirtualMachineStateDto.class); assertEquals(vmDto.getState().name(), VirtualMachineState.OFF.name()); } /** * Create a virtual machines and retrieve its state. */ // @Test public void getVirtualMachineStateLinkTest() { // Create a virtual machine VirtualMachineTemplate vi = virtualMachineTemplateGenerator.createInstance(ent, datacenter); VirtualMachine vm = vmGenerator.createInstance(vi); vm.setState(VirtualMachineState.OFF); Machine machine = vm.getHypervisor().getMachine(); machine.setDatacenter(vdc.getDatacenter()); machine.setRack(null); // Asociate it to the created virtual appliance NodeVirtualImage nvi = nodeVirtualImageGenerator.createInstance(vapp, vm); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(ent); entitiesToSetup.add(datacenter); entitiesToSetup.add(vi.getCategory()); entitiesToSetup.add(vi.getRepository()); entitiesToSetup.add(vi); entitiesToSetup.add(vdc); entitiesToSetup.add(vapp); for (Privilege p : vm.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm.getUser().getEnterprise()); entitiesToSetup.add(vm.getUser().getRole()); entitiesToSetup.add(vm.getUser()); entitiesToSetup.add(vm.getVirtualMachineTemplate()); entitiesToSetup.add(machine); entitiesToSetup.add(vm.getHypervisor()); entitiesToSetup.add(vm); entitiesToSetup.add(nvi); setup(entitiesToSetup.toArray()); // Check for vm state ClientResponse response = get(resolveVirtualMachineURI(vdc.getId(), vapp.getId(), vm.getId()), "sysadmin", "sysadmin", VirtualMachineDto.MEDIA_TYPE); VirtualMachineDto vmDto = response.getEntity(VirtualMachineDto.class); assertLinkExist(vmDto, resolveVirtualMachineStateURI(vdc.getId(), vapp.getId(), vm.getId()), "state"); } /** * Create a virtual machines and retrieve its state. */ @Test(enabled = false) public void getVirtualMachineSetStateTest() { // Create a virtual machine VirtualMachine vm = vmGenerator.createInstance(ent); vm.setState(VirtualMachineState.ON); Machine machine = vm.getHypervisor().getMachine(); machine.setDatacenter(vdc.getDatacenter()); machine.setRack(null); Datastore datastore = datastoreGenerator.createInstance(machine); vm.setDatastore(datastore); // Asociate it to the created virtual appliance NodeVirtualImage nvi = nodeVirtualImageGenerator.createInstance(vapp, vm); RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.VIRTUAL_FACTORY, datacenter); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(datacenter); entitiesToSetup.add(ent); entitiesToSetup.add(rs); entitiesToSetup.add(vdc); entitiesToSetup.add(vapp); entitiesToSetup.add(datastore); for (Privilege p : vm.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm.getUser().getRole()); entitiesToSetup.add(vm.getUser()); entitiesToSetup.add(vm.getVirtualMachineTemplate()); entitiesToSetup.add(machine); entitiesToSetup.add(vm.getHypervisor()); entitiesToSetup.add(vm); entitiesToSetup.add(nvi); setup(entitiesToSetup.toArray()); VirtualMachineStateDto dto = new VirtualMachineStateDto(); dto.setState(VirtualMachineState.OFF); // Check for vm state ClientResponse response = put(resolveVirtualMachineStateURI(vdc.getId(), vapp.getId(), vm.getId()), dto, "sysadmin", "sysadmin"); VirtualMachineStateDto vmDto = response.getEntity(VirtualMachineStateDto.class); assertEquals(VirtualMachineState.OFF, vmDto.getState()); } /** * Delete a virtual machines state. */ public void deleteVirtualMachineTest() { // Create a virtual machine VirtualMachineTemplate vi = virtualMachineTemplateGenerator.createInstance(ent, datacenter); VirtualMachine vm = vmGenerator.createInstance(vi); vm.setState(VirtualMachineState.NOT_ALLOCATED); Machine machine = vm.getHypervisor().getMachine(); machine.setDatacenter(vdc.getDatacenter()); machine.setRack(null); // Asociate it to the created virtual appliance NodeVirtualImage nvi = nodeVirtualImageGenerator.createInstance(vapp, vm); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(ent); entitiesToSetup.add(datacenter); entitiesToSetup.add(vi.getCategory()); entitiesToSetup.add(vi.getRepository()); entitiesToSetup.add(vi); entitiesToSetup.add(vdc); entitiesToSetup.add(vapp); for (Privilege p : vm.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm.getUser().getRole()); entitiesToSetup.add(vm.getUser().getEnterprise()); entitiesToSetup.add(vm.getUser()); entitiesToSetup.add(machine); entitiesToSetup.add(vm.getHypervisor()); entitiesToSetup.add(vm); entitiesToSetup.add(nvi); setup(entitiesToSetup.toArray()); // Check for vm state ClientResponse response = delete(resolveVirtualMachineURI(vdc.getId(), vapp.getId(), vm.getId()), "sysadmin", "sysadmin"); assertEquals(response.getStatusCode(), Status.NO_CONTENT.getStatusCode()); } /** * Delete a virtual machines fail its state. */ @Test(enabled = false) public void deleteVirtualMachineInvalidTest() { // Create a virtual machine VirtualMachineTemplate vi = virtualMachineTemplateGenerator.createInstance(ent, datacenter); VirtualMachine vm = vmGenerator.createInstance(vi); vm.setState(VirtualMachineState.ON); Machine machine = vm.getHypervisor().getMachine(); machine.setDatacenter(vdc.getDatacenter()); machine.setRack(null); // Asociate it to the created virtual appliance NodeVirtualImage nvi = nodeVirtualImageGenerator.createInstance(vapp, vm); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(ent); entitiesToSetup.add(datacenter); entitiesToSetup.add(vi.getCategory()); entitiesToSetup.add(vi.getRepository()); entitiesToSetup.add(vi); entitiesToSetup.add(vdc); entitiesToSetup.add(vapp); for (Privilege p : vm.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm.getUser().getEnterprise()); entitiesToSetup.add(vm.getUser().getRole()); entitiesToSetup.add(vm.getUser()); entitiesToSetup.add(vm.getVirtualMachineTemplate()); entitiesToSetup.add(machine); entitiesToSetup.add(vm.getHypervisor()); entitiesToSetup.add(vm); entitiesToSetup.add(nvi); setup(entitiesToSetup.toArray()); // Check for vm state ClientResponse response = delete(resolveVirtualMachineURI(vdc.getId(), vapp.getId(), vm.getId()), "sysadmin", "sysadmin"); assertEquals(Status.CONFLICT.getStatusCode(), response.getStatusCode()); } /** * Create two virtual machines into a virtual appliance. Check the resources are addressable. */ // @Test public void getVirtualMachineWithNodeTest() { // Create a virtual machine VirtualMachine vm = vmGenerator.createInstance(ent); vm.getVirtualMachineTemplate().getRepository().setDatacenter(datacenter); Machine machine = vm.getHypervisor().getMachine(); machine.setDatacenter(vdc.getDatacenter()); machine.setRack(null); // Asociate it to the created virtual appliance NodeVirtualImage nvi = nodeVirtualImageGenerator.createInstance(vapp, vm); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(ent); entitiesToSetup.add(datacenter); entitiesToSetup.add(vdc); entitiesToSetup.add(vapp); for (Privilege p : vm.getUser().getRole().getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(vm.getUser().getRole()); entitiesToSetup.add(vm.getUser()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getRepository()); entitiesToSetup.add(vm.getVirtualMachineTemplate().getCategory()); entitiesToSetup.add(vm.getVirtualMachineTemplate()); entitiesToSetup.add(machine); entitiesToSetup.add(vm.getHypervisor()); entitiesToSetup.add(vm); entitiesToSetup.add(nvi); setup(entitiesToSetup.toArray()); // Check for vm ClientResponse response = get(resolveVirtualMachineURI(vdc.getId(), vapp.getId(), vm.getId()), "sysadmin", "sysadmin", VirtualMachineWithNodeDto.MEDIA_TYPE); VirtualMachineWithNodeDto vmDto = response.getEntity(VirtualMachineWithNodeDto.class); assertNotNull(vmDto); } }