/**
* 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());
}
}