/** * 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.handlers; import static com.abiquo.api.common.UriTestResolver.resolveVirtualApplianceURI; import static com.abiquo.api.common.UriTestResolver.resolveVirtualDatacenterURI; import static com.abiquo.api.common.UriTestResolver.resolveVirtualDatacentersURI; import static com.abiquo.api.common.UriTestResolver.resolveVirtualMachinesURI; import static com.abiquo.server.core.common.EnvironmentGenerator.SYSADMIN; import static org.testng.Assert.assertEquals; import java.util.ArrayList; import java.util.List; import javax.ws.rs.core.Response.Status; import org.apache.wink.client.ClientResponse; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.abiquo.api.resources.AbstractJpaGeneratorIT; import com.abiquo.model.enumerator.Privileges; import com.abiquo.server.core.cloud.VirtualAppliance; import com.abiquo.server.core.cloud.VirtualApplianceDto; import com.abiquo.server.core.cloud.VirtualDatacenter; import com.abiquo.server.core.cloud.VirtualDatacenterDto; import com.abiquo.server.core.cloud.VirtualDatacentersDto; import com.abiquo.server.core.cloud.VirtualMachine; import com.abiquo.server.core.cloud.VirtualMachineDto; import com.abiquo.server.core.common.EnvironmentGenerator; import com.abiquo.server.core.enterprise.Enterprise; import com.abiquo.server.core.enterprise.Role; import com.abiquo.server.core.enterprise.User; import com.abiquo.server.core.infrastructure.Datacenter; import com.abiquo.testng.TestConfig; @Test(groups = {TestConfig.SECURITY_HANDLERS_INTEGRATION_TESTS}) public class CloudEnterpriseSecurityIT extends AbstractJpaGeneratorIT { private final String USER = "simpleuser"; private EnvironmentGenerator sysadminEnvironment; private EnvironmentGenerator userEnvironment; private Enterprise sysadminEnt; private VirtualDatacenter sysadminVdc; private VirtualDatacenter userVdc; private VirtualAppliance sysadminVapp; private VirtualAppliance userVapp; private VirtualMachine sysadminVM; private VirtualMachine userVM; @BeforeMethod public void setupSyasdminEnvironment() { // Generate the environment sysadminEnvironment = new EnvironmentGenerator(seed); sysadminEnvironment.generateEnterprise(); sysadminEnvironment.generateInfrastructure(); sysadminEnvironment.generateVirtualDatacenter(); sysadminEnvironment.generateNotAllocatedVirtualMachine(); setup(sysadminEnvironment.getEnvironment().toArray()); // Get the entities we'll need from the environment sysadminEnt = sysadminEnvironment.get(Enterprise.class); sysadminVdc = sysadminEnvironment.get(VirtualDatacenter.class); sysadminVapp = sysadminEnvironment.get(VirtualAppliance.class); sysadminVM = sysadminEnvironment.get(VirtualMachine.class); } @BeforeMethod(dependsOnMethods = "setupSyasdminEnvironment") public void setupUserEnvironment() { Role role = roleGenerator.createInstance(Privileges.simpleRole()); // user enterprise will be generated by userEnvironment.generateEnterprise() method User user = userGenerator.createInstance(null, role, USER, USER); // Generate the environment userEnvironment = new EnvironmentGenerator(seed); userEnvironment.generateEnterprise(user); userEnvironment.generateInfrastructure(); userEnvironment.generateVirtualDatacenter(); userEnvironment.generateNotAllocatedVirtualMachine(); // Get the entities we'll need from the environment Datacenter userDc = userEnvironment.get(Datacenter.class); userVdc = userEnvironment.get(VirtualDatacenter.class); userVapp = userEnvironment.get(VirtualAppliance.class); userVM = userEnvironment.get(VirtualMachine.class); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.addAll(userEnvironment.getEnvironment()); entitiesToSetup.add(datacenterLimitsGenerator.createInstance(sysadminEnt, userDc)); setup(entitiesToSetup.toArray()); } // ----------------------- // // VIRTUALDATACENTERS LIST // // ----------------------- // @Test(groups = {TestConfig.SECURITY_HANDLERS_INTEGRATION_TESTS}) public void sysadminGetsVirtualDatacenters() { ClientResponse response = get(resolveVirtualDatacentersURI(), SYSADMIN, SYSADMIN, VirtualDatacentersDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); VirtualDatacentersDto vdcs = response.getEntity(VirtualDatacentersDto.class); assertEquals(vdcs.getCollection().size(), 1); assertEquals(sysadminVdc.getId(), vdcs.getCollection().get(0).getId()); } @Test(groups = {TestConfig.SECURITY_HANDLERS_INTEGRATION_TESTS}) public void userGetsVirtualDatacenters() { ClientResponse response = get(resolveVirtualDatacentersURI(), USER, USER, VirtualDatacentersDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); VirtualDatacentersDto vdcs = response.getEntity(VirtualDatacentersDto.class); assertEquals(vdcs.getCollection().size(), 1); assertEquals(userVdc.getId(), vdcs.getCollection().get(0).getId()); } // ----------------- // // VIRTUALDATACENTER // ----------------- // @Test(groups = {TestConfig.SECURITY_HANDLERS_INTEGRATION_TESTS}) public void sysadminGetsVirtualDatacenterOtherEnterprise() { ClientResponse response = get(resolveVirtualDatacenterURI(userVdc.getId()), SYSADMIN, SYSADMIN, VirtualDatacenterDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); assertEquals(response.getEntity(VirtualDatacenterDto.class).getId(), userVdc.getId()); } @Test(groups = {TestConfig.SECURITY_HANDLERS_INTEGRATION_TESTS}) public void userGetsVirtualDatacenterOtherEnterprise() { ClientResponse response = get(resolveVirtualDatacenterURI(sysadminVdc.getId()), USER, USER, VirtualDatacenterDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); } @Test(groups = {TestConfig.SECURITY_HANDLERS_INTEGRATION_TESTS}) public void sysadminGetsVirtualDatacenterNOTExists() { ClientResponse response = get(resolveVirtualDatacenterURI(userVdc.getId() + sysadminVdc.getId() + 1), SYSADMIN, SYSADMIN, VirtualDatacenterDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); } @Test(groups = {TestConfig.SECURITY_HANDLERS_INTEGRATION_TESTS}) public void userGetsVirtualDatacenterNOTExists() { ClientResponse response = get(resolveVirtualDatacenterURI(userVdc.getId() + sysadminVdc.getId() + 1), SYSADMIN, SYSADMIN, VirtualDatacenterDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); } // ----------------- // // VIRTUAL APPLIANCE // ----------------- // @Test(groups = {TestConfig.SECURITY_HANDLERS_INTEGRATION_TESTS}) public void sysadminGetsVirtualApplianceOtherEnterprise() { ClientResponse response = get(resolveVirtualApplianceURI(userVdc.getId(), userVapp.getId()), SYSADMIN, SYSADMIN, VirtualApplianceDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); assertEquals(response.getEntity(VirtualApplianceDto.class).getId(), userVapp.getId()); } @Test(groups = {TestConfig.SECURITY_HANDLERS_INTEGRATION_TESTS}) public void userGetsVirtualApplianceOwnEnterprise() { ClientResponse response = get(resolveVirtualApplianceURI(userVdc.getId(), userVapp.getId()), USER, USER, VirtualApplianceDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); assertEquals(response.getEntity(VirtualApplianceDto.class).getId(), userVapp.getId()); } @Test(groups = {TestConfig.SECURITY_HANDLERS_INTEGRATION_TESTS}) public void userGetsVirtualApplianceOtherEnterprise() { ClientResponse response = get(resolveVirtualApplianceURI(sysadminVdc.getId(), sysadminVapp.getId()), USER, USER, VirtualApplianceDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); } // ----------------- // // VIRTUAL MACHINE // ----------------- // @Test(groups = {TestConfig.SECURITY_HANDLERS_INTEGRATION_TESTS}) public void sysadminGetsVirtualMachineOtherEnterprise() { ClientResponse response = get(resolveVirtualMachinesURI(userVdc.getId(), userVapp.getId()).concat("/").concat( userVM.getId().toString()), SYSADMIN, SYSADMIN, VirtualMachineDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); assertEquals(response.getEntity(VirtualMachineDto.class).getId(), userVM.getId()); } @Test(groups = {TestConfig.SECURITY_HANDLERS_INTEGRATION_TESTS}) public void userGetsVirtualMachineOwnEnterprise() { ClientResponse response = get(resolveVirtualMachinesURI(userVdc.getId(), userVapp.getId()).concat("/").concat( userVM.getId().toString()), USER, USER, VirtualMachineDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); assertEquals(response.getEntity(VirtualMachineDto.class).getId(), userVM.getId()); } @Test(groups = {TestConfig.SECURITY_HANDLERS_INTEGRATION_TESTS}) public void userGetsVirtualMachineOtherEnterprise() { ClientResponse response = get(resolveVirtualMachinesURI(sysadminVdc.getId(), sysadminVapp.getId()).concat("/") .concat(sysadminVM.getId().toString()), USER, USER, VirtualMachineDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.NOT_FOUND.getStatusCode()); } }