/**
* 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.assertErrors;
import static com.abiquo.api.common.Assert.assertLinkExist;
import static com.abiquo.api.common.Assert.assertNonEmptyErrors;
import static com.abiquo.api.common.UriTestResolver.resolveDatacenterURI;
import static com.abiquo.api.common.UriTestResolver.resolveEnterpriseURI;
import static com.abiquo.api.common.UriTestResolver.resolvePrivateNetworksURI;
import static com.abiquo.api.common.UriTestResolver.resolveVirtualAppliancesURI;
import static com.abiquo.api.common.UriTestResolver.resolveVirtualDatacenterActionGetDHCPInfoURI;
import static com.abiquo.api.common.UriTestResolver.resolveVirtualDatacenterActionGetIPsURI;
import static com.abiquo.api.common.UriTestResolver.resolveVirtualDatacenterURI;
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.MediaType;
import javax.ws.rs.core.Response.Status;
import org.apache.wink.client.ClientResponse;
import org.apache.wink.client.ClientWebException;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.abiquo.api.exceptions.APIError;
import com.abiquo.api.resources.AbstractJpaGeneratorIT;
import com.abiquo.api.resources.AbstractResource;
import com.abiquo.model.enumerator.RemoteServiceType;
import com.abiquo.model.transport.error.ErrorsDto;
import com.abiquo.server.core.cloud.VirtualAppliance;
import com.abiquo.server.core.cloud.VirtualDatacenter;
import com.abiquo.server.core.cloud.VirtualDatacenterDto;
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.RemoteService;
import com.abiquo.server.core.infrastructure.network.IpPoolManagement;
import com.abiquo.server.core.infrastructure.network.IpsPoolManagementDto;
import com.abiquo.server.core.infrastructure.network.VLANNetwork;
import com.abiquo.server.core.infrastructure.storage.VolumeManagement;
import com.abiquo.server.core.util.network.IPAddress;
import com.abiquo.server.core.util.network.IPNetworkRang;
public class VirtualDatacenterResourceIT extends AbstractJpaGeneratorIT
{
private static final String SYSADMIN = "sysadmin";
@BeforeMethod(groups = {BASIC_INTEGRATION_TESTS, NETWORK_INTEGRATION_TESTS})
public void setupSysadmin()
{
Enterprise e = enterpriseGenerator.createUniqueInstance();
Role r = roleGenerator.createInstanceSysAdmin("sysRole");
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());
}
@Override
@AfterMethod(groups = {BASIC_INTEGRATION_TESTS, NETWORK_INTEGRATION_TESTS})
public void tearDown()
{
super.tearDown();
}
@Test
public void getVirtualDatacenterDoesntExist() throws ClientWebException
{
ClientResponse response =
get(resolveVirtualDatacenterURI(12345), SYSADMIN, SYSADMIN,
VirtualDatacenterDto.MEDIA_TYPE);
assertEquals(404, response.getStatusCode());
ErrorsDto errors = response.getEntity(ErrorsDto.class);
assertNonEmptyErrors(errors);
}
@Test
public void getVirtualDatacenter() throws Exception
{
VirtualDatacenter vdc = vdcGenerator.createUniqueInstance();
RemoteService rs =
remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE,
vdc.getDatacenter());
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
vdc.setDefaultVlan(vlan);
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(),
vlan.getConfiguration(), vlan, vdc);
VirtualDatacenterDto dto = getValidVdc(vdc);
assertNotNull(dto);
assertLinkExist(dto, resolveDatacenterURI(vdc.getDatacenter().getId()), "datacenter");
assertLinkExist(dto, resolveEnterpriseURI(vdc.getEnterprise().getId()), "enterprise");
assertLinkExist(dto, resolvePrivateNetworksURI(vdc.getId()),
PrivateNetworksResource.PRIVATE_NETWORKS_PATH);
assertLinkExist(dto, resolveVirtualDatacenterURI(vdc.getId()), "edit");
assertLinkExist(dto, resolveVirtualAppliancesURI(vdc.getId()),
VirtualAppliancesResource.VIRTUAL_APPLIANCES_PATH);
assertLinkExist(dto, resolveVirtualDatacenterActionGetIPsURI(vdc.getId()),
IpAddressesResource.IP_ADDRESSES);
}
private VirtualDatacenterDto getValidVdc(final VirtualDatacenter vdc)
{
// ClientResponse response = get(resolveVirtualDatacenterURI(vdc.getId()), SYSADMIN,
// SYSADMIN);
ClientResponse response =
get(resolveVirtualDatacenterURI(vdc.getId()), SYSADMIN, SYSADMIN,
VirtualDatacenterDto.MEDIA_TYPE);
assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
VirtualDatacenterDto dto = response.getEntity(VirtualDatacenterDto.class);
return dto;
}
@Test
public void updateVirtualDatacenter()
{
VirtualDatacenter vdc = vdcGenerator.createUniqueInstance();
RemoteService rs =
remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE,
vdc.getDatacenter());
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
vdc.setDefaultVlan(vlan);
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(),
vlan.getConfiguration(), vlan, vdc);
VirtualDatacenterDto dto = getValidVdc(vdc);
dto.setName("vdc_name_updated");
ClientResponse response =
put(resolveVirtualDatacenterURI(vdc.getId()), dto, SYSADMIN, SYSADMIN);
assertEquals(response.getStatusCode(), 200);
VirtualDatacenterDto responseDto = response.getEntity(VirtualDatacenterDto.class);
assertEquals(responseDto.getName(), dto.getName());
}
@Test
public void updateVirtualDatacenterModifyLimits()
{
VirtualDatacenter vdc = vdcGenerator.createUniqueInstance();
RemoteService rs =
remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE,
vdc.getDatacenter());
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
vdc.setDefaultVlan(vlan);
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(),
vlan.getConfiguration(), vlan, vdc);
VirtualDatacenterDto dto = getValidVdc(vdc);
dto.setCpuCountLimits(1000, 1001);
ClientResponse response =
put(resolveVirtualDatacenterURI(vdc.getId()), dto, SYSADMIN, SYSADMIN);
assertEquals(response.getStatusCode(), 200);
VirtualDatacenterDto dto2 = getValidVdc(vdc);
assertEquals(dto2.getCpuCountSoftLimit(), dto.getCpuCountSoftLimit());
assertEquals(dto2.getCpuCountHardLimit(), dto.getCpuCountHardLimit());
}
@Test
public void deleteVirtualDatacenter()
{
VirtualDatacenter vdc = vdcGenerator.createUniqueInstance();
// VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork());
// vdc.setDefaultVlan(vlan);
setup(vdc.getNetwork(), vdc.getDatacenter(), vdc.getEnterprise(), vdc);
ClientResponse response =
delete(resolveVirtualDatacenterURI(vdc.getId()), SYSADMIN, SYSADMIN);
assertEquals(response.getStatusCode(), 204);
}
@Test
public void deleteVirtualDatacenterFailsWhenContainsVirtualAppliances()
{
VirtualAppliance vapp = virtualApplianceGenerator.createUniqueInstance();
VirtualDatacenter vdc = vapp.getVirtualDatacenter();
setup(vdc.getNetwork(), vdc.getDatacenter(), vdc.getEnterprise(), vdc, vapp);
ClientResponse response =
delete(resolveVirtualDatacenterURI(vdc.getId()), SYSADMIN, SYSADMIN);
assertErrors(response, 409, APIError.VIRTUAL_DATACENTER_CONTAINS_VIRTUAL_APPLIANCES);
}
@Test
public void deleteVirtualDatacenterFailsWhenHasVolumesAttached()
{
VolumeManagement volume = volumeManagementGenerator.createUniqueInstance();
VirtualDatacenter vdc = volume.getVirtualDatacenter();
List<Object> entitiesToPersist = new ArrayList<Object>();
volumeManagementGenerator.addAuxiliaryEntitiesToPersist(volume, entitiesToPersist);
entitiesToPersist.add(volume);
setup(entitiesToPersist.toArray());
ClientResponse response =
delete(resolveVirtualDatacenterURI(vdc.getId()), SYSADMIN, SYSADMIN);
assertErrors(response, 409, APIError.VIRTUAL_DATACENTER_CONTAINS_RESOURCES);
}
// TESTS refered to the action of GET IPs by VDC
/**
* Create a VirtualDatacenter without IPs and check the 'HTTP Conflict' error
*/
@Test
public void getVirtualDatacenterEmptyListWhenHasVLANsWithoutIPs()
{
RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE);
VirtualDatacenter vdc = vdcGenerator.createInstance(rs.getDatacenter());
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(), vdc);
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs);
setup(vlan.getConfiguration(), vlan);
String validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
ClientResponse response =
get(validURI, SYSADMIN, SYSADMIN, IpsPoolManagementDto.MEDIA_TYPE);
assertEquals(200, response.getStatusCode());
}
/**
* Check if the link of the action when GET a VDC exists
*/
@Test(groups = {NETWORK_INTEGRATION_TESTS})
public void getPrivateNetworkIPsByVirtualDatacenter()
{
RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE);
VirtualDatacenter vdc = vdcGenerator.createInstance(rs.getDatacenter());
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(), vdc);
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
setup(vlan.getConfiguration(), vlan);
IPAddress ip = IPAddress.newIPAddress(vlan.getConfiguration().getAddress()).nextIPAddress();
IPAddress lastIP =
IPNetworkRang.lastIPAddressWithNumNodes(
IPAddress.newIPAddress(vlan.getConfiguration().getAddress()),
IPNetworkRang.masktoNumberOfNodes(vlan.getConfiguration().getMask()));
persistIP(ip, lastIP, vdc, vlan);
VLANNetwork vlan2 = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
setup(vlan2.getConfiguration(), vlan2);
IPAddress ip2 =
IPAddress.newIPAddress(vlan2.getConfiguration().getAddress()).nextIPAddress();
IPAddress lastIP2 =
IPNetworkRang.lastIPAddressWithNumNodes(
IPAddress.newIPAddress(vlan2.getConfiguration().getAddress()),
IPNetworkRang.masktoNumberOfNodes(vlan2.getConfiguration().getMask()));
persistIP(ip2, lastIP2, vdc, vlan2);
String validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
ClientResponse response =
get(validURI, SYSADMIN, SYSADMIN, IpsPoolManagementDto.MEDIA_TYPE);
assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
}
/**
* Check if the request 'action/ips' of the virtualdatacenter resource allows the 'by=ip' query
* param
*/
@Test(groups = {NETWORK_INTEGRATION_TESTS})
public void getPrivateNetworkIPsByVirtualDatacenterOrderByIp()
{
RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE);
VirtualDatacenter vdc = vdcGenerator.createInstance(rs.getDatacenter());
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(), vdc);
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
setup(vlan.getConfiguration(), vlan);
IPAddress ip = IPAddress.newIPAddress(vlan.getConfiguration().getAddress()).nextIPAddress();
IPAddress lastIP =
IPNetworkRang.lastIPAddressWithNumNodes(
IPAddress.newIPAddress(vlan.getConfiguration().getAddress()),
IPNetworkRang.masktoNumberOfNodes(vlan.getConfiguration().getMask()));
persistIP(ip, lastIP, vdc, vlan);
String validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
validURI = validURI + "?by=ip";
ClientResponse response =
get(validURI, SYSADMIN, SYSADMIN, IpsPoolManagementDto.MEDIA_TYPE);
assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
}
/**
* Check if the request 'action/ips' of the virtualdatacenter resource allows the
* 'by=quarantine' query param
*/
@Test(groups = {NETWORK_INTEGRATION_TESTS})
public void getPrivateNetworkIPsByVirtualDatacenterOrderByQuarantine()
{
RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE);
VirtualDatacenter vdc = vdcGenerator.createInstance(rs.getDatacenter());
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(), vdc);
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
setup(vlan.getConfiguration(), vlan);
IPAddress ip = IPAddress.newIPAddress(vlan.getConfiguration().getAddress()).nextIPAddress();
IPAddress lastIP =
IPNetworkRang.lastIPAddressWithNumNodes(
IPAddress.newIPAddress(vlan.getConfiguration().getAddress()),
IPNetworkRang.masktoNumberOfNodes(vlan.getConfiguration().getMask()));
persistIP(ip, lastIP, vdc, vlan);
String validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
validURI = validURI + "?by=quarantine";
ClientResponse response =
get(validURI, SYSADMIN, SYSADMIN, IpsPoolManagementDto.MEDIA_TYPE);
assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
}
/**
* Check if the request 'action/ips' of the virtualdatacenter resource allows the 'by=mac' query
* param
*/
@Test(groups = {NETWORK_INTEGRATION_TESTS})
public void getPrivateNetworkIPsByVirtualDatacenterOrderByMAC()
{
RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE);
VirtualDatacenter vdc = vdcGenerator.createInstance(rs.getDatacenter());
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(), vdc);
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
setup(vlan.getConfiguration(), vlan);
IPAddress ip = IPAddress.newIPAddress(vlan.getConfiguration().getAddress()).nextIPAddress();
IPAddress lastIP =
IPNetworkRang.lastIPAddressWithNumNodes(
IPAddress.newIPAddress(vlan.getConfiguration().getAddress()),
IPNetworkRang.masktoNumberOfNodes(vlan.getConfiguration().getMask()));
persistIP(ip, lastIP, vdc, vlan);
String validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
validURI = validURI + "?by=mac";
ClientResponse response =
get(validURI, SYSADMIN, SYSADMIN, IpsPoolManagementDto.BASE_MEDIA_TYPE);
assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
}
/**
* Check if the request 'action/ips' of the virtualdatacenter resource allows the 'by=lease'
* query param
*/
@Test(groups = {NETWORK_INTEGRATION_TESTS})
public void getPrivateNetworkIPsByVirtualDatacenterOrderByLease()
{
RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE);
VirtualDatacenter vdc = vdcGenerator.createInstance(rs.getDatacenter());
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(), vdc);
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
setup(vlan.getConfiguration(), vlan);
IPAddress ip = IPAddress.newIPAddress(vlan.getConfiguration().getAddress()).nextIPAddress();
IPAddress lastIP =
IPNetworkRang.lastIPAddressWithNumNodes(
IPAddress.newIPAddress(vlan.getConfiguration().getAddress()),
IPNetworkRang.masktoNumberOfNodes(vlan.getConfiguration().getMask()));
persistIP(ip, lastIP, vdc, vlan);
String validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
validURI = validURI + "?by=lease";
ClientResponse response =
get(validURI, SYSADMIN, SYSADMIN, IpsPoolManagementDto.MEDIA_TYPE);
assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
}
/**
* Check if the request 'action/ips' of the virtualdatacenter resource allows the 'by=vlan'
* query param
*/
@Test(groups = {NETWORK_INTEGRATION_TESTS})
public void getPrivateNetworkIPsByVirtualDatacenterOrderByVlan()
{
RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE);
VirtualDatacenter vdc = vdcGenerator.createInstance(rs.getDatacenter());
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(), vdc);
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
setup(vlan.getConfiguration(), vlan);
IPAddress ip = IPAddress.newIPAddress(vlan.getConfiguration().getAddress()).nextIPAddress();
IPAddress lastIP =
IPNetworkRang.lastIPAddressWithNumNodes(
IPAddress.newIPAddress(vlan.getConfiguration().getAddress()),
IPNetworkRang.masktoNumberOfNodes(vlan.getConfiguration().getMask()));
persistIP(ip, lastIP, vdc, vlan);
String validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
validURI = validURI + "?by=vlan";
ClientResponse response =
get(validURI, SYSADMIN, SYSADMIN, IpsPoolManagementDto.MEDIA_TYPE);
assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
}
/**
* Check if the request 'action/ips' of the virtualdatacenter resource allows the
* 'by=virtualdatacenter' query param
*/
@Test(groups = {NETWORK_INTEGRATION_TESTS})
public void getPrivateNetworkIPsByVirtualDatacenterOrderByVirtualDatacenter()
{
RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE);
VirtualDatacenter vdc = vdcGenerator.createInstance(rs.getDatacenter());
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(), vdc);
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
setup(vlan.getConfiguration(), vlan);
IPAddress ip = IPAddress.newIPAddress(vlan.getConfiguration().getAddress()).nextIPAddress();
IPAddress lastIP =
IPNetworkRang.lastIPAddressWithNumNodes(
IPAddress.newIPAddress(vlan.getConfiguration().getAddress()),
IPNetworkRang.masktoNumberOfNodes(vlan.getConfiguration().getMask()));
persistIP(ip, lastIP, vdc, vlan);
String validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
validURI = validURI + "?by=virtualdatacenter";
ClientResponse response =
get(validURI, SYSADMIN, SYSADMIN, IpsPoolManagementDto.MEDIA_TYPE);
assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
}
/**
* Check if the request 'action/ips' of the virtualdatacenter resource allows the
* 'by=virtualmachine' query param
*/
@Test(groups = {NETWORK_INTEGRATION_TESTS})
public void getPrivateNetworkIPsByVirtualDatacenterOrderByVirtualMachine()
{
RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE);
VirtualDatacenter vdc = vdcGenerator.createInstance(rs.getDatacenter());
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(), vdc);
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
setup(vlan.getConfiguration(), vlan);
IPAddress ip = IPAddress.newIPAddress(vlan.getConfiguration().getAddress()).nextIPAddress();
IPAddress lastIP =
IPNetworkRang.lastIPAddressWithNumNodes(
IPAddress.newIPAddress(vlan.getConfiguration().getAddress()),
IPNetworkRang.masktoNumberOfNodes(vlan.getConfiguration().getMask()));
persistIP(ip, lastIP, vdc, vlan);
String validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
validURI = validURI + "?by=virtualmachine";
ClientResponse response =
get(validURI, SYSADMIN, SYSADMIN, IpsPoolManagementDto.MEDIA_TYPE);
assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
}
/**
* Check if the request 'action/ips' of the virtualdatacenter resource allows the
* 'by=virtualappliance' query param
*/
@Test(groups = {NETWORK_INTEGRATION_TESTS})
public void getPrivateNetworkIPsByVirtualDatacenterOrderByVirtualAppliance()
{
RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE);
VirtualDatacenter vdc = vdcGenerator.createInstance(rs.getDatacenter());
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(), vdc);
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
setup(vlan.getConfiguration(), vlan);
IPAddress ip = IPAddress.newIPAddress(vlan.getConfiguration().getAddress()).nextIPAddress();
IPAddress lastIP =
IPNetworkRang.lastIPAddressWithNumNodes(
IPAddress.newIPAddress(vlan.getConfiguration().getAddress()),
IPNetworkRang.masktoNumberOfNodes(vlan.getConfiguration().getMask()));
persistIP(ip, lastIP, vdc, vlan);
String validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
validURI = validURI + "?by=virtualappliance";
ClientResponse response =
get(validURI, SYSADMIN, SYSADMIN, IpsPoolManagementDto.MEDIA_TYPE);
assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
}
/**
* Check if the request 'action/ips' of the virtualdatacenter resource allows the
* 'by=virtualappliance' query param
*/
@Test(enabled = false)
public void getPrivateNetworkIPsByVirtualDatacenterTestLimit()
{
RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE);
VirtualDatacenter vdc = vdcGenerator.createInstance(rs.getDatacenter());
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(), vdc);
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
setup(vlan.getConfiguration(), vlan);
IPAddress ip = IPAddress.newIPAddress(vlan.getConfiguration().getAddress()).nextIPAddress();
IPAddress lastIP =
IPNetworkRang.lastIPAddressWithNumNodes(
IPAddress.newIPAddress(vlan.getConfiguration().getAddress()),
IPNetworkRang.masktoNumberOfNodes(vlan.getConfiguration().getMask()));
persistIP(ip, lastIP, vdc, vlan);
// Test Default
String validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
ClientResponse response =
get(validURI, SYSADMIN, SYSADMIN, IpsPoolManagementDto.MEDIA_TYPE);
IpsPoolManagementDto entity = response.getEntity(IpsPoolManagementDto.class);
assertEquals(200, response.getStatusCode());
assertNotNull(entity);
assertNotNull(entity.getCollection());
assertEquals(Integer.valueOf(entity.getCollection().size()),
AbstractResource.DEFAULT_PAGE_LENGTH);
// Test 30
validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
validURI = validURI + "?limit=30";
response = get(validURI, IpsPoolManagementDto.MEDIA_TYPE);
assertEquals(200, response.getStatusCode());
assertNotNull(entity);
assertNotNull(entity.getCollection());
assertEquals(entity.getCollection().size(), 30);
// Test 120
validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
validURI = validURI + "?limit=120";
response = get(validURI, IpsPoolManagementDto.MEDIA_TYPE);
assertEquals(200, response.getStatusCode());
assertNotNull(entity);
assertNotNull(entity.getCollection());
assertEquals(entity.getCollection().size(), 120);
}
/**
* Check if the request 'action/ips' of the virtualdatacenter resource doesnt allow a
* 'by={randomvalue}' query param
*/
@Test(groups = {NETWORK_INTEGRATION_TESTS})
public void getPrivateNetworkIPsByVirtualDatacenterRaises400WhenOrderByRandomParameter()
{
RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE);
VirtualDatacenter vdc = vdcGenerator.createInstance(rs.getDatacenter());
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(), vdc);
VLANNetwork vlan = vlanGenerator.createInstance(vdc.getNetwork(), rs, "255.255.255.0");
setup(vlan.getConfiguration(), vlan);
IPAddress ip = IPAddress.newIPAddress(vlan.getConfiguration().getAddress()).nextIPAddress();
IPAddress lastIP =
IPNetworkRang.lastIPAddressWithNumNodes(
IPAddress.newIPAddress(vlan.getConfiguration().getAddress()),
IPNetworkRang.masktoNumberOfNodes(vlan.getConfiguration().getMask()));
persistIP(ip, lastIP, vdc, vlan);
String validURI = resolveVirtualDatacenterActionGetIPsURI(vdc.getId());
validURI = validURI + "?by=" + Integer.valueOf(new Random().nextInt());
ClientResponse response =
get(validURI, SYSADMIN, SYSADMIN, IpsPoolManagementDto.MEDIA_TYPE);
assertEquals(response.getStatusCode(), Status.BAD_REQUEST.getStatusCode());
}
// TESTS refered to the action of GET dhcpinfo by VDC
@Test(groups = {NETWORK_INTEGRATION_TESTS})
public void getdhcpInfoByVirtualDatacenter()
{
RemoteService rs = remoteServiceGenerator.createInstance(RemoteServiceType.DHCP_SERVICE);
VirtualDatacenter vdc = vdcGenerator.createInstance(rs.getDatacenter());
setup(vdc.getDatacenter(), rs, vdc.getEnterprise(), vdc.getNetwork(), vdc);
String URI = resolveVirtualDatacenterActionGetDHCPInfoURI(vdc.getId());
ClientResponse response = get(URI, SYSADMIN, SYSADMIN, MediaType.TEXT_PLAIN);
assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
String entity = response.getEntity(String.class);
assertNotNull(entity);
}
private void persistIP(IPAddress ip, final IPAddress lastIP, final VirtualDatacenter vdc,
final VLANNetwork vlan)
{
List<Object> lists = new ArrayList<Object>();
while (!ip.equals(lastIP))
{
IpPoolManagement ippool = ipGenerator.createInstance(vdc, vlan, ip.toString());
lists.add(ippool.getRasd());
lists.add(ippool);
ip = ip.nextIPAddress();
}
setup(lists.toArray());
}
}