/**
* 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;
import static com.abiquo.api.common.Assert.assertNotEmpty;
import static com.abiquo.api.common.UriTestResolver.resolveDatacentersURI;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
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.model.enumerator.RemoteServiceType;
import com.abiquo.server.core.enterprise.DatacenterLimits;
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.DatacenterDto;
import com.abiquo.server.core.infrastructure.DatacentersDto;
import com.abiquo.server.core.infrastructure.RemoteServiceDto;
import com.abiquo.server.core.infrastructure.RemoteServicesDto;
public class DatacentersResourceIT extends AbstractJpaGeneratorIT
{
Enterprise e1;
String SYSADMIN = "SYSADMIN";
@BeforeMethod
public void setupSysadmin()
{
e1 = enterpriseGenerator.createUniqueInstance();
Role r = roleGenerator.createInstanceSysAdmin();
r.setEnterprise(e1);
User u = userGenerator.createInstance(e1, r, SYSADMIN, SYSADMIN);
List<Object> entitiesToSetup = new ArrayList<Object>();
entitiesToSetup.add(e1);
for (Privilege p : r.getPrivileges())
{
entitiesToSetup.add(p);
}
entitiesToSetup.add(r);
entitiesToSetup.add(u);
setup(entitiesToSetup.toArray());
}
@Test
public void getDatacentersList() throws Exception
{
DatacenterDto d = new DatacenterDto();
d.setName("datacenter_test");
d.setLocation("situation_datacenter_test");
ClientResponse response = post(resolveDatacentersURI(), d, SYSADMIN, SYSADMIN);
assertEquals(response.getStatusCode(), Status.CREATED.getStatusCode());
DatacenterDto entityPost = response.getEntity(DatacenterDto.class);
assertNotNull(entityPost);
assertEquals(d.getName(), entityPost.getName());
response = get(resolveDatacentersURI(), DatacentersDto.MEDIA_TYPE);
assertEquals(200, response.getStatusCode());
DatacentersDto entity = response.getEntity(DatacentersDto.class);
assertNotNull(entity);
assertNotEmpty(entity.getCollection());
}
@Test
public void getDatacentersListbyEnt() throws Exception
{
Enterprise e2 = enterpriseGenerator.createUniqueInstance();
Datacenter d1 = datacenterGenerator.createUniqueInstance();
Datacenter d2 = datacenterGenerator.createUniqueInstance();
Datacenter d3 = datacenterGenerator.createUniqueInstance();
DatacenterLimits dl1 = datacenterLimitsGenerator.createInstance(e1, d1);
DatacenterLimits dl2 = datacenterLimitsGenerator.createInstance(e1, d2);
DatacenterLimits dl3 = datacenterLimitsGenerator.createInstance(e2, d3);
List<Object> entitiesToSetup = new ArrayList<Object>();
entitiesToSetup.add(e2);
entitiesToSetup.add(d1);
entitiesToSetup.add(d2);
entitiesToSetup.add(d3);
entitiesToSetup.add(dl1);
entitiesToSetup.add(dl2);
entitiesToSetup.add(dl3);
setup(entitiesToSetup.toArray());
ClientResponse response =
get(resolveDatacentersURI() + "?idEnterprise=" + e1.getId(), SYSADMIN, SYSADMIN, DatacentersDto.MEDIA_TYPE);
assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
DatacentersDto entity = response.getEntity(DatacentersDto.class);
assertNotNull(entity);
assertNotEmpty(entity.getCollection());
assertEquals(entity.getCollection().size(), 2);
}
/**
* Test the creation of the datacenter with remote services in the same call.
*
* @throws Exception like any test
*/
@Test
public void createDatacenterWithRemotServicesTest() throws Exception
{
// Create the two remote services for the datacenters
// Remote services conection mustn't be checked
RemoteServiceDto rsAm = new RemoteServiceDto();
rsAm.setType(RemoteServiceType.DHCP_SERVICE);
rsAm.setUri("http://example.com/dhcp");
RemoteServiceDto rsSSM = new RemoteServiceDto();
rsSSM.setType(RemoteServiceType.BPM_SERVICE);
rsSSM.setUri("http://example.com/bpm");
RemoteServicesDto rsList = new RemoteServicesDto();
rsList.add(rsAm);
rsList.add(rsSSM);
DatacenterDto d = new DatacenterDto();
d.setName("datacenter_test");
d.setLocation("situation_datacenter_test");
d.setUuid("uuid_datacenter_test");
d.setRemoteServices(rsList);
// Assert creation
ClientResponse response = post(resolveDatacentersURI(), d, SYSADMIN, SYSADMIN);
// System.out.println(response.getStatusCode() + ' ' + response.getMessage());
assertEquals(response.getStatusCode(), Status.CREATED.getStatusCode());
// Assert there is a Datacenter and it has two Remote Services
response = get(resolveDatacentersURI(), DatacentersDto.MEDIA_TYPE);
assertEquals(200, response.getStatusCode());
DatacentersDto entities = response.getEntity(DatacentersDto.class);
assertEquals(entities.getCollection().size(), 1);
}
@Test
public void testDatacentersAsCollection() throws Exception
{
Datacenter datacenter0 = datacenterGenerator.createUniqueInstance();
Datacenter datacenter1 = datacenterGenerator.createUniqueInstance();
setup(datacenter0, datacenter1);
ClientResponse response = get(resolveDatacentersURI(), DatacentersDto.MEDIA_TYPE);
assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
assertEquals(response.getEntity(DatacentersDto.class).getCollection().isEmpty(), false);
}
}