/** * 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.assertErrors; import static com.abiquo.api.common.UriTestResolver.resolveEnterprisesURI; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response.Status; import org.apache.wink.client.ClientResponse; import org.apache.wink.client.Resource; import org.apache.wink.common.internal.utils.UriHelper; import org.testng.annotations.Test; import com.abiquo.api.common.Assert; import com.abiquo.api.exceptions.APIError; import com.abiquo.server.core.enterprise.Enterprise; import com.abiquo.server.core.enterprise.EnterpriseDto; import com.abiquo.server.core.enterprise.EnterprisesDto; 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.pricing.PricingTemplate; public class EnterprisesResourceIT extends AbstractJpaGeneratorIT { private String enterprisesURI = resolveEnterprisesURI(); @Test public void getEnterpriseList() { Enterprise e1 = enterpriseGenerator.createUniqueInstance(); Enterprise e2 = enterpriseGenerator.createUniqueInstance(); Role r1 = roleGenerator.createInstanceSysAdmin(); Role r2 = roleGenerator.createInstanceEnterpriseAdmin(); User u1 = userGenerator.createInstance(e1, r1, "foo"); User u2 = userGenerator.createInstance(e2, r2, "bar"); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(e1); entitiesToSetup.add(e2); for (Privilege p : r1.getPrivileges()) { entitiesToSetup.add(p); } for (Privilege p : r2.getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(r1); entitiesToSetup.add(r2); entitiesToSetup.add(u1); entitiesToSetup.add(u2); setup(entitiesToSetup.toArray()); ClientResponse response = get(enterprisesURI, u1.getNick(), "foo", EnterprisesDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), 200); EnterprisesDto entity = response.getEntity(EnterprisesDto.class); Assert.assertSize(entity.getCollection(), 2); response = get(enterprisesURI, u2.getNick(), "bar", EnterprisesDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), 200); entity = response.getEntity(EnterprisesDto.class); Assert.assertSize(entity.getCollection(), 1); } @Test public void getEnterpriseListFilteredByName() { Enterprise e1 = enterpriseGenerator.createInstance("enterprise_foo_enterprise"); Enterprise e2 = enterpriseGenerator.createInstance("enterprise_bar_enterprise"); Role r1 = roleGenerator.createInstance(); User u1 = userGenerator.createInstance(e1, r1, "foo"); setup(e1, e2, r1, u1); Map<String, String[]> queryParams = new HashMap<String, String[]>(); queryParams.put("filter", new String[] {"bar"}); String uri = UriHelper.appendQueryParamsToPath(enterprisesURI, queryParams, false); ClientResponse response = get(uri, u1.getNick(), "foo", EnterprisesDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), 200); EnterprisesDto entity = response.getEntity(EnterprisesDto.class); Assert.assertSize(entity.getCollection(), 1); } @Test public void getEnterpriseWithPricingTemplate() throws Exception { Enterprise e1 = enterpriseGenerator.createUniqueInstance(); Enterprise e2 = enterpriseGenerator.createUniqueInstance(); Enterprise e3 = enterpriseGenerator.createUniqueInstance(); Enterprise e4 = enterpriseGenerator.createUniqueInstance(); Enterprise e5 = enterpriseGenerator.createUniqueInstance(); PricingTemplate pt = pricingTemplateGenerator.createUniqueInstance(); PricingTemplate pt1 = pricingTemplateGenerator.createUniqueInstance(); e1.setPricingTemplate(pt); e2.setPricingTemplate(pt1); e3.setPricingTemplate(pt); e4.setPricingTemplate(pt); Role r1 = roleGenerator.createInstanceSysAdmin(); User u1 = userGenerator.createInstance(e1, r1, "foo"); List<Object> entitiesToSetup = new ArrayList<Object>(); entitiesToSetup.add(pt.getCurrency()); entitiesToSetup.add(pt1.getCurrency()); entitiesToSetup.add(pt); entitiesToSetup.add(pt1); entitiesToSetup.add(e1); entitiesToSetup.add(e2); entitiesToSetup.add(e3); entitiesToSetup.add(e4); entitiesToSetup.add(e5); for (Privilege p : r1.getPrivileges()) { entitiesToSetup.add(p); } entitiesToSetup.add(r1); entitiesToSetup.add(u1); setup(entitiesToSetup.toArray()); // Enterprise associated to the pricing template Map<String, String[]> queryParams = new HashMap<String, String[]>(); queryParams.put("idPricingTemplate", new String[] {Integer.toString(pt.getId())}); queryParams.put("included", new String[] {"true"}); String uri = UriHelper.appendQueryParamsToPath(enterprisesURI, queryParams, false); ClientResponse response = get(uri, u1.getNick(), "foo", EnterprisesDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); EnterprisesDto entity = response.getEntity(EnterprisesDto.class); Assert.assertSize(entity.getCollection(), 3); // Enterprise not associated to the pricing template Map<String, String[]> queryParams2 = new HashMap<String, String[]>(); queryParams2.put("idPricingTemplate", new String[] {Integer.toString(pt.getId())}); queryParams2.put("included", new String[] {"false"}); uri = UriHelper.appendQueryParamsToPath(enterprisesURI, queryParams2, false); response = get(uri, u1.getNick(), "foo", EnterprisesDto.MEDIA_TYPE); assertEquals(response.getStatusCode(), Status.OK.getStatusCode()); entity = response.getEntity(EnterprisesDto.class); Assert.assertSize(entity.getCollection(), 2); } @Test public void createNewEnterprise() throws Exception { EnterpriseDto e = validEnterprise(); ClientResponse response = post(enterprisesURI, e); assertEquals(response.getStatusCode(), Status.CREATED.getStatusCode()); EnterpriseDto entityPost = response.getEntity(EnterpriseDto.class); assertNotNull(entityPost); assertEquals(e.getName(), entityPost.getName()); assertEquals(e.getCpuCountHardLimit(), entityPost.getCpuCountHardLimit()); assertEquals(e.getCpuCountSoftLimit(), entityPost.getCpuCountSoftLimit()); assertEquals(e.getHdHardLimitInMb(), entityPost.getHdHardLimitInMb()); assertEquals(e.getHdSoftLimitInMb(), entityPost.getHdSoftLimitInMb()); assertEquals(e.getRamHardLimitInMb(), entityPost.getRamHardLimitInMb()); assertEquals(e.getRamSoftLimitInMb(), entityPost.getRamSoftLimitInMb()); } @Test public void postWithDuplicatedName() { EnterpriseDto e = validEnterprise(); ClientResponse response = post(enterprisesURI, e); assertEquals(response.getStatusCode(), Status.CREATED.getStatusCode()); response = post(enterprisesURI, e); assertErrors(response, Status.CONFLICT.getStatusCode(), APIError.ENTERPRISE_DUPLICATED_NAME.getCode()); } @Test public void postEnterpriseWithInvalidRepositoryLimits() { EnterpriseDto e = validEnterprise(); e.setRepositoryLimits(0, 1); ClientResponse response = post(enterprisesURI, e); assertEquals(response.getStatusCode(), Status.BAD_REQUEST.getStatusCode()); } @Test public void postEnterpriseWithInvalidVlansLimits() { EnterpriseDto e = validEnterprise(); e.setVlansLimits(0, 1); ClientResponse response = post(enterprisesURI, e); assertEquals(response.getStatusCode(), Status.BAD_REQUEST.getStatusCode()); } @Test public void postWithInvalidCpuRange() { EnterpriseDto e = validEnterprise(); e.setCpuCountSoftLimit(-1); ClientResponse response = post(enterprisesURI, e); assertEquals(response.getStatusCode(), Status.BAD_REQUEST.getStatusCode()); } @Test public void postWithInvalidHdRange() { EnterpriseDto e = validEnterprise(); e.setHdHardLimitInMb(-1); ClientResponse response = post(enterprisesURI, e); assertEquals(response.getStatusCode(), Status.BAD_REQUEST.getStatusCode()); } @Test public void postWithInvalidRamRange() { EnterpriseDto e = validEnterprise(); e.setRamHardLimitInMb(-1); ClientResponse response = post(enterprisesURI, e); assertEquals(response.getStatusCode(), Status.BAD_REQUEST.getStatusCode()); } private EnterpriseDto validEnterprise() { EnterpriseDto e = new EnterpriseDto(); e.setName("enterprise_4"); e.setCpuCountSoftLimit(1); e.setCpuCountHardLimit(2); e.setHdSoftLimitInMb(1); e.setHdHardLimitInMb(2); e.setRamSoftLimitInMb(1); e.setRamHardLimitInMb(2); return e; } }