/**
* 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.cloud;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import org.hibernate.Session;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.abiquo.server.core.appslibrary.VirtualMachineTemplate;
import com.abiquo.server.core.common.persistence.DefaultDAOTestBase;
import com.softwarementors.bzngine.entities.test.PersistentInstanceTester;
@Test
public class VirtualMachineDAOTest extends DefaultDAOTestBase<VirtualMachineDAO, VirtualMachine>
{
@Override
@BeforeMethod
protected void methodSetUp()
{
super.methodSetUp();
}
@Override
protected VirtualMachineDAO createDao(final EntityManager entityManager)
{
return new VirtualMachineDAO(entityManager);
}
@Override
protected PersistentInstanceTester<VirtualMachine> createEntityInstanceGenerator()
{
return new VirtualMachineGenerator(getSeed());
}
@Override
public VirtualMachineGenerator eg()
{
return (VirtualMachineGenerator) super.eg();
}
/**
* Create five machines, three with the temporal value set, and two without the temporal values
* set. Check the default behaviour (check {@link VirtualMachine} entity filters) is to return
* only the ones without the temporal values.
*/
@Test
public void findAllWithNotTemporalFilters()
{
createFiveMachinesWithTemporalAndNotTemporalValueSetAndPersistThem();
VirtualMachineDAO dao = createDaoForRollbackTransaction();
List<VirtualMachine> all = dao.findAll();
assertEquals(all.size(), 2);
}
/**
* Create five machines with same Virtual Machine Template and retrieve the list of Virtual
* Machines using the Virtual Machine Template related. Check if the size list value is correct.
*/
@Test
public void findAllByVirtualMachineTemplate()
{
Integer virtualMachineTemplateId =
createFiveMachinesWithSameVirtualMachineTemplateAndPersistThem();
VirtualMachineDAO dao = createDaoForRollbackTransaction();
List<VirtualMachine> all = dao.findByVirtualMachineTemplate(virtualMachineTemplateId);
assertEquals(all.size(), 5);
}
/**
* Create five machines with same Virtual Machine Template and check if true value is retrieved
* when querying if this Virtual Machine Template has any Virtual Machine using it.
*/
@Test
public void checkIfVirtualMachineTemplateIsBeingUsedByVirtualMachines()
{
Integer virtualMachineTemplateId =
createFiveMachinesWithSameVirtualMachineTemplateAndPersistThem();
VirtualMachineDAO dao = createDaoForRollbackTransaction();
boolean result = dao.hasVirtualMachineTemplate(virtualMachineTemplateId);
assertEquals(result, true);
}
/**
* Create five machines, three with the temporal value set, and two without the temporal values
* set. Disable the filter {@VirtualMachine.NOT_TEMP}. Check the
* behaviour (check {@link VirtualMachine} entity filters) is to return all the machines.
* Whatever happens, enable the filter
*/
@Test
public void findAllWithoutFilters()
{
createFiveMachinesWithTemporalAndNotTemporalValueSetAndPersistThem();
VirtualMachineDAO dao = createDaoForRollbackTransaction();
try
{
((Session) dao.getEntityManager().getDelegate()).disableFilter(VirtualMachine.NOT_TEMP);
List<VirtualMachine> all = dao.findAll();
assertEquals(all.size(), 5);
}
finally
{
((Session) dao.getEntityManager().getDelegate()).enableFilter(VirtualMachine.NOT_TEMP);
}
}
/**
* Create five machines, three with the temporal value set, and two without the temporal values
* set. Disable the filter {@VirtualMachine.NOT_TEMP} and enable the
* {@VirtualMachine.ONLY_TEMP} one. Check the behaviour (check
* {@link VirtualMachine} entity filters) is to return only the ones with the temporal values.
* Whatever happens, enable the filter
*/
@Test
public void findAllOnlyTempFilters()
{
createFiveMachinesWithTemporalAndNotTemporalValueSetAndPersistThem();
VirtualMachineDAO dao = createDaoForRollbackTransaction();
try
{
((Session) dao.getEntityManager().getDelegate()).disableFilter(VirtualMachine.NOT_TEMP);
((Session) dao.getEntityManager().getDelegate()).enableFilter(VirtualMachine.ONLY_TEMP);
List<VirtualMachine> all = dao.findAll();
assertEquals(all.size(), 3);
}
finally
{
((Session) dao.getEntityManager().getDelegate()).enableFilter(VirtualMachine.NOT_TEMP);
((Session) dao.getEntityManager().getDelegate())
.disableFilter(VirtualMachine.ONLY_TEMP);
}
}
@Test
public void findVirtualMachinesNotAllocatedCompatibleHypervisor()
{
VirtualMachine vm = eg().createUniqueInstance();
// used for posterior search
Hypervisor hyp = vm.getHypervisor();
vm.setHypervisor(null);
vm.setState(VirtualMachineState.NOT_ALLOCATED);
List<Object> vmlist = new ArrayList<Object>();
eg().addAuxiliaryEntitiesToPersist(vm, vmlist);
vmlist.add(vm);
ds().persistAll(vmlist.toArray());
VirtualMachineDAO dao = createDaoForRollbackTransaction();
List<VirtualMachine> vms = dao.findVirtualMachinesNotAllocatedCompatibleHypervisor(hyp);
assertEquals(vms.size(), 1);
}
/**
* Create five machines, three with the temporal value set, and two without the temporal values
* set.
*/
private void createFiveMachinesWithTemporalAndNotTemporalValueSetAndPersistThem()
{
VirtualMachine vm1 = eg().createUniqueInstance();
vm1.setTemporal(23);
List<Object> vmlist = new ArrayList<Object>();
eg().addAuxiliaryEntitiesToPersist(vm1, vmlist);
VirtualMachine vm2 = eg().createUniqueInstance();
vm2.setTemporal(24);
eg().addAuxiliaryEntitiesToPersist(vm2, vmlist);
VirtualMachine vm3 = eg().createUniqueInstance();
vm3.setTemporal(35);
eg().addAuxiliaryEntitiesToPersist(vm3, vmlist);
VirtualMachine vm4 = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(vm4, vmlist);
VirtualMachine vm5 = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(vm5, vmlist);
persistAll(ds(), vmlist, vm1, vm2, vm3, vm4, vm5);
}
private Integer createFiveMachinesWithSameVirtualMachineTemplateAndPersistThem()
{
List<Object> vmlist = new ArrayList<Object>();
VirtualMachine vm1 = eg().createUniqueInstance();
eg().addAuxiliaryEntitiesToPersist(vm1, vmlist);
VirtualMachineTemplate vmt = vm1.getVirtualMachineTemplate();
VirtualMachine vm2 = eg().createUniqueInstance();
vm2.setVirtualMachineTemplate(vmt);
eg().addAuxiliaryEntitiesToPersist(vm2, vmlist);
VirtualMachine vm3 = eg().createUniqueInstance();
vm3.setVirtualMachineTemplate(vmt);
eg().addAuxiliaryEntitiesToPersist(vm3, vmlist);
VirtualMachine vm4 = eg().createUniqueInstance();
vm4.setVirtualMachineTemplate(vmt);
eg().addAuxiliaryEntitiesToPersist(vm4, vmlist);
VirtualMachine vm5 = eg().createUniqueInstance();
vm5.setVirtualMachineTemplate(vmt);
eg().addAuxiliaryEntitiesToPersist(vm5, vmlist);
persistAll(ds(), vmlist, vm1, vm2, vm3, vm4, vm5);
return vmt.getId();
}
}