/**
* 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.server.core.infrastructure.network;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.abiquo.server.core.cloud.VirtualDatacenter;
import com.abiquo.server.core.cloud.VirtualDatacenterGenerator;
import com.abiquo.server.core.common.persistence.DefaultDAOTestBase;
import com.abiquo.server.core.common.persistence.TestDataAccessManager;
import com.softwarementors.bzngine.engines.jpa.test.configuration.EntityManagerFactoryForTesting;
import com.softwarementors.bzngine.entities.test.PersistentInstanceTester;
public class IpPoolManagementDAOTest extends
DefaultDAOTestBase<IpPoolManagementDAO, IpPoolManagement>
{
private VirtualDatacenterGenerator virtualDatacenterGenerator;
private VLANNetworkGenerator vlanNetworkGenerator;
@Override
@BeforeMethod
protected void methodSetUp()
{
super.methodSetUp();
this.virtualDatacenterGenerator = new VirtualDatacenterGenerator(getSeed());
this.vlanNetworkGenerator = new VLANNetworkGenerator(getSeed());
}
@Override
protected IpPoolManagementDAO createDao(final EntityManager entityManager)
{
return new IpPoolManagementDAO(entityManager);
}
@Override
protected PersistentInstanceTester<IpPoolManagement> createEntityInstanceGenerator()
{
return new IpPoolManagementGenerator(getSeed());
}
@Override
protected EntityManagerFactoryForTesting getFactory()
{
return TestDataAccessManager.getFactory();
}
@Override
public IpPoolManagementGenerator eg()
{
return (IpPoolManagementGenerator) super.eg();
}
@Test
public void findNextIpByPrivateVLANAvailableSuccess()
{
List<Object> entities = new ArrayList<Object>();
IpPoolManagement ipPoolManagement = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(ipPoolManagement, entities);
IpPoolManagement excludedIpPoolManagement = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(excludedIpPoolManagement, entities);
persistAll(ds(), entities, ipPoolManagement, excludedIpPoolManagement);
IpPoolManagementDAO dao = createDaoForRollbackTransaction();
IpPoolManagement available =
dao.findNextIpAvailable(ipPoolManagement.getVlanNetwork().getId(),
excludedIpPoolManagement.getIp());
assertFalse(excludedIpPoolManagement.equals(available));
}
@Test
public void findNextIpByPrivateVLANExcludeMultiple()
{
List<Object> entities = new ArrayList<Object>();
IpPoolManagement ipPoolManagement = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(ipPoolManagement, entities);
IpPoolManagement excludedIpPoolManagement1 = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(excludedIpPoolManagement1, entities);
IpPoolManagement excludedIpPoolManagement2 = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(excludedIpPoolManagement2, entities);
IpPoolManagement excludedIpPoolManagement3 = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(excludedIpPoolManagement3, entities);
persistAll(ds(), entities, ipPoolManagement, excludedIpPoolManagement1,
excludedIpPoolManagement2, excludedIpPoolManagement3);
IpPoolManagementDAO dao = createDaoForRollbackTransaction();
IpPoolManagement available =
dao.findNextIpAvailable(excludedIpPoolManagement1.getVlanNetwork().getId(),
excludedIpPoolManagement1.getIp(), excludedIpPoolManagement2.getIp(),
excludedIpPoolManagement3.getIp());
assertFalse(excludedIpPoolManagement1.equals(available)
|| excludedIpPoolManagement2.equals(available)
|| excludedIpPoolManagement3.equals(available));
}
@Test
public void findNextIpByPrivateVLANExcludeMultipleNotAvailable()
{
List<Object> entities = new ArrayList<Object>();
IpPoolManagement ipPoolManagement = eg().createUniqueInstance();
ipPoolManagement.setAvailable(Boolean.FALSE);
eg().addAuxiliaryEntitiesToPersist(ipPoolManagement, entities);
IpPoolManagement excludedIpPoolManagement1 = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(excludedIpPoolManagement1, entities);
IpPoolManagement excludedIpPoolManagement2 = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(excludedIpPoolManagement2, entities);
IpPoolManagement excludedIpPoolManagement3 = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(excludedIpPoolManagement3, entities);
persistAll(ds(), entities, ipPoolManagement, excludedIpPoolManagement1,
excludedIpPoolManagement2, excludedIpPoolManagement3);
IpPoolManagementDAO dao = createDaoForRollbackTransaction();
IpPoolManagement available =
dao.findNextIpAvailable(excludedIpPoolManagement1.getVlanNetwork().getId(),
excludedIpPoolManagement1.getIp(), excludedIpPoolManagement2.getIp(),
excludedIpPoolManagement3.getIp());
Assert.assertNull(available);
}
@Test
public void findNextIpByPrivateVLANNotIp()
{
List<Object> entities = new ArrayList<Object>();
IpPoolManagement excludedIpPoolManagement = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(excludedIpPoolManagement, entities);
persistAll(ds(), entities, excludedIpPoolManagement);
IpPoolManagementDAO dao = createDaoForRollbackTransaction();
IpPoolManagement available =
dao.findNextIpAvailable(excludedIpPoolManagement.getVlanNetwork().getId(),
excludedIpPoolManagement.getIp());
Assert.assertNull(available);
}
@Test
public void findNextIpByPrivateVLANExcludeMultipleNotIp()
{
List<Object> entities = new ArrayList<Object>();
IpPoolManagement excludedIpPoolManagement1 = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(excludedIpPoolManagement1, entities);
IpPoolManagement excludedIpPoolManagement2 = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(excludedIpPoolManagement2, entities);
IpPoolManagement excludedIpPoolManagement3 = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(excludedIpPoolManagement3, entities);
persistAll(ds(), entities, excludedIpPoolManagement1, excludedIpPoolManagement2,
excludedIpPoolManagement3);
IpPoolManagementDAO dao = createDaoForRollbackTransaction();
IpPoolManagement available =
dao.findNextIpAvailable(excludedIpPoolManagement1.getVlanNetwork().getId(),
excludedIpPoolManagement1.getIp(), excludedIpPoolManagement2.getIp(),
excludedIpPoolManagement3.getIp());
Assert.assertNull(available);
}
@Test
public void findNextIpByPrivateVLANAvailableAnotherVdc()
{
List<Object> entities = new ArrayList<Object>();
IpPoolManagement ipPoolManagement1 = eg().createUniqueInstance();
ipPoolManagement1.setAvailable(Boolean.FALSE);
VirtualDatacenter vdc1 = virtualDatacenterGenerator.createUniqueInstance();
ipPoolManagement1.setVirtualDatacenter(vdc1);
virtualDatacenterGenerator.addAuxiliaryEntitiesToPersist(vdc1, entities);
eg().addAuxiliaryEntitiesToPersist(ipPoolManagement1, entities);
IpPoolManagement ipPoolManagement2 = eg().createUniqueInstance();
ipPoolManagement2.setAvailable(Boolean.TRUE);
VirtualDatacenter vdc2 = virtualDatacenterGenerator.createUniqueInstance();
ipPoolManagement2.setVirtualDatacenter(vdc2);
virtualDatacenterGenerator.addAuxiliaryEntitiesToPersist(vdc2, entities);
eg().addAuxiliaryEntitiesToPersist(ipPoolManagement2, entities);
persistAll(ds(), entities, vdc1, vdc2, ipPoolManagement1, ipPoolManagement2);
IpPoolManagementDAO dao = createDaoForRollbackTransaction();
IpPoolManagement available =
dao.findNextIpAvailable(ipPoolManagement1.getVlanNetwork().getId());
Assert.assertNull(available);
}
@Test
public void findNextIpByPrivateVLANNotIpAvailableAnotherVdc()
{
List<Object> entities = new ArrayList<Object>();
IpPoolManagement ipPoolManagement1 = eg().createUniqueInstance();
ipPoolManagement1.setAvailable(Boolean.FALSE);
VirtualDatacenter vdc1 = virtualDatacenterGenerator.createUniqueInstance();
ipPoolManagement1.setVirtualDatacenter(vdc1);
virtualDatacenterGenerator.addAuxiliaryEntitiesToPersist(vdc1, entities);
eg().addAuxiliaryEntitiesToPersist(ipPoolManagement1, entities);
IpPoolManagement ipPoolManagement2 = eg().createUniqueInstance();
ipPoolManagement2.setAvailable(Boolean.FALSE);
VirtualDatacenter vdc2 = virtualDatacenterGenerator.createUniqueInstance();
ipPoolManagement2.setVirtualDatacenter(vdc2);
virtualDatacenterGenerator.addAuxiliaryEntitiesToPersist(vdc2, entities);
eg().addAuxiliaryEntitiesToPersist(ipPoolManagement2, entities);
persistAll(ds(), entities, vdc1, vdc2, ipPoolManagement1, ipPoolManagement2);
IpPoolManagementDAO dao = createDaoForRollbackTransaction();
IpPoolManagement available =
dao.findNextIpAvailable(ipPoolManagement1.getVlanNetwork()
.getId());
Assert.assertNull(available);
}
@Test
public void findNextIpByPrivateVLANIpAvailableAnotherVlanNetwork()
{
List<Object> entities = new ArrayList<Object>();
IpPoolManagement ipPoolManagement1 = eg().createUniqueInstance();
ipPoolManagement1.setAvailable(Boolean.FALSE);
VLANNetwork vlan1 = vlanNetworkGenerator.createUniqueInstance();
ipPoolManagement1.setVlanNetwork(vlan1);
vlanNetworkGenerator.addAuxiliaryEntitiesToPersist(vlan1, entities);
eg().addAuxiliaryEntitiesToPersist(ipPoolManagement1, entities);
IpPoolManagement ipPoolManagement2 = eg().createUniqueInstance();
ipPoolManagement2.setAvailable(Boolean.TRUE);
VLANNetwork vlan2 = vlanNetworkGenerator.createUniqueInstance();
ipPoolManagement1.setVlanNetwork(vlan2);
vlanNetworkGenerator.addAuxiliaryEntitiesToPersist(vlan2, entities);
eg().addAuxiliaryEntitiesToPersist(ipPoolManagement2, entities);
persistAll(ds(), entities, vlan1, vlan2, ipPoolManagement1, ipPoolManagement2);
IpPoolManagementDAO dao = createDaoForRollbackTransaction();
IpPoolManagement available =
dao.findNextIpAvailable(vlan1.getId());
Assert.assertNull(available);
}
@Test
public void findNextIpByPrivateVLANNotIpAvailableAnotherVlanNetwork()
{
List<Object> entities = new ArrayList<Object>();
IpPoolManagement ipPoolManagement1 = eg().createUniqueInstance();
ipPoolManagement1.setAvailable(Boolean.FALSE);
VLANNetwork vlan1 = vlanNetworkGenerator.createUniqueInstance();
ipPoolManagement1.setVlanNetwork(vlan1);
vlanNetworkGenerator.addAuxiliaryEntitiesToPersist(vlan1, entities);
eg().addAuxiliaryEntitiesToPersist(ipPoolManagement1, entities);
IpPoolManagement ipPoolManagement2 = eg().createUniqueInstance();
ipPoolManagement2.setAvailable(Boolean.FALSE);
VLANNetwork vlan2 = vlanNetworkGenerator.createUniqueInstance();
ipPoolManagement1.setVlanNetwork(vlan2);
vlanNetworkGenerator.addAuxiliaryEntitiesToPersist(vlan2, entities);
eg().addAuxiliaryEntitiesToPersist(ipPoolManagement2, entities);
persistAll(ds(), entities, vlan1, vlan2, ipPoolManagement1, ipPoolManagement2);
IpPoolManagementDAO dao = createDaoForRollbackTransaction();
IpPoolManagement available =
dao.findNextIpAvailable(vlan1.getId());
Assert.assertNull(available);
}
}