/**
* 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.appslibrary;
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.model.enumerator.DiskFormatType;
import com.abiquo.server.core.cloud.Hypervisor;
import com.abiquo.server.core.cloud.HypervisorGenerator;
import com.abiquo.server.core.cloud.VirtualImageConversionGenerator;
import com.abiquo.server.core.cloud.VirtualMachine;
import com.abiquo.server.core.cloud.VirtualMachineGenerator;
import com.abiquo.server.core.common.persistence.DefaultDAOTestBase;
import com.abiquo.server.core.common.persistence.TestDataAccessManager;
import com.abiquo.server.core.enterprise.Enterprise;
import com.abiquo.server.core.enterprise.EnterpriseGenerator;
import com.abiquo.server.core.enterprise.Role;
import com.abiquo.server.core.enterprise.RoleGenerator;
import com.abiquo.server.core.enterprise.User;
import com.abiquo.server.core.enterprise.UserGenerator;
import com.abiquo.server.core.infrastructure.Datacenter;
import com.abiquo.server.core.infrastructure.DatacenterGenerator;
import com.abiquo.server.core.infrastructure.Machine;
import com.abiquo.server.core.infrastructure.MachineGenerator;
import com.softwarementors.bzngine.engines.jpa.test.configuration.EntityManagerFactoryForTesting;
import com.softwarementors.bzngine.entities.test.PersistentInstanceTester;
public class VirtualImageConversionDAOTest extends
DefaultDAOTestBase<VirtualImageConversionDAO, VirtualImageConversion>
{
private VirtualMachineTemplateGenerator virtualImageGenerator;
private EnterpriseGenerator enterpriseGenerator;
private VirtualMachineGenerator virtualMachineGenerator;
private HypervisorGenerator hypervisorGenerator;
private MachineGenerator machineGenerator;
private DatacenterGenerator datacenterGenerator;
private UserGenerator userGenerator;
private RoleGenerator roleGenerator;
@Override
@BeforeMethod
protected void methodSetUp()
{
super.methodSetUp();
userGenerator = new UserGenerator(getSeed());
virtualImageGenerator = new VirtualMachineTemplateGenerator(getSeed());
enterpriseGenerator = new EnterpriseGenerator(getSeed());
virtualMachineGenerator = new VirtualMachineGenerator(getSeed());
hypervisorGenerator = new HypervisorGenerator(getSeed());
machineGenerator = new MachineGenerator(getSeed());
datacenterGenerator = new DatacenterGenerator(getSeed());
roleGenerator = new RoleGenerator(getSeed());
}
@Override
protected VirtualImageConversionDAO createDao(final EntityManager entityManager)
{
return new VirtualImageConversionDAO(entityManager);
}
@Override
protected PersistentInstanceTester<VirtualImageConversion> createEntityInstanceGenerator()
{
return new VirtualImageConversionGenerator(getSeed());
}
@Override
protected EntityManagerFactoryForTesting getFactory()
{
return TestDataAccessManager.getFactory();
}
@Override
public VirtualImageConversionGenerator eg()
{
return (VirtualImageConversionGenerator) super.eg();
}
@Test(enabled = false)
public void getUnbundledConversionTest()
{
Datacenter datacenter = datacenterGenerator.createUniqueInstance();
Machine machine = machineGenerator.createMachine(datacenter);
Enterprise enterprise = enterpriseGenerator.createUniqueInstance();
Role role = roleGenerator.createInstanceSysAdmin();
User user = userGenerator.createInstance(enterprise, role);
VirtualMachineTemplate image =
virtualImageGenerator.createVirtualMachineTemplateWithConversions(enterprise);
Hypervisor hypervisor = hypervisorGenerator.createInstance(machine);
VirtualMachine virtualMachine =
virtualMachineGenerator.createInstance(image, enterprise, hypervisor, user, "name");
VirtualImageConversion imageConversion =
eg().createInstance(image, DiskFormatType.VDI_SPARSE);
List<Object> entitiesToSetup = new ArrayList<Object>();
entitiesToSetup.add(datacenter);
entitiesToSetup.add(enterprise);
entitiesToSetup.add(role);
entitiesToSetup.add(user);
entitiesToSetup.add(machine);
entitiesToSetup.add(hypervisor);
entitiesToSetup.add(image);
entitiesToSetup.add(virtualMachine);
entitiesToSetup.add(imageConversion);
ds().persistAll(entitiesToSetup.toArray());
VirtualImageConversionDAO dao = createDaoForReadWriteTransaction();
dao.getUnbundledConversion(image, virtualMachine.getHypervisor().getType().baseFormat);
Assert.assertEquals(DiskFormatType.VDI_SPARSE, virtualMachine.getVirtualMachineTemplate()
.getDiskFormatType());
}
@Test
public void testIsConverted()
{
VirtualImageConversion imageConversion = eg().createUniqueInstance();
List<Object> entitiesToPersist = new ArrayList<Object>();
eg().addAuxiliaryEntitiesToPersist(imageConversion, entitiesToPersist);
persistAll(ds(), entitiesToPersist, imageConversion);
VirtualImageConversionDAO dao = createDaoForRollbackTransaction();
assertTrue(dao.isConverted(imageConversion.getVirtualMachineTemplate(),
imageConversion.getTargetType()));
}
@Test
public void testIsNotConverted()
{
VirtualImageConversion imageConversion = eg().createUniqueInstance();
List<Object> entitiesToPersist = new ArrayList<Object>();
eg().addAuxiliaryEntitiesToPersist(imageConversion, entitiesToPersist);
persistAll(ds(), entitiesToPersist);
VirtualImageConversionDAO dao = createDaoForRollbackTransaction();
assertFalse(dao.isConverted(imageConversion.getVirtualMachineTemplate(),
imageConversion.getTargetType()));
}
@Test
public void testExistsDuplicatedConversions()
{
VirtualMachineTemplate template = virtualImageGenerator.createUniqueInstance();
VirtualImageConversion imageConversion =
eg().createInstance(template, DiskFormatType.VHD_FLAT, DiskFormatType.VMDK_FLAT);
List<Object> entitiesToPersist = new ArrayList<Object>();
eg().addAuxiliaryEntitiesToPersist(imageConversion, entitiesToPersist);
entitiesToPersist.add(imageConversion);
ds().persistAll(entitiesToPersist.toArray());
VirtualImageConversionDAO dao = createDaoForRollbackTransaction();
assertTrue(dao.existDuplicatedConversion(imageConversion));
}
@Test
public void testNotExistsDuplicatedConversionsDiferentTemplate()
{
VirtualMachineTemplate template = virtualImageGenerator.createUniqueInstance();
VirtualMachineTemplate template2 = virtualImageGenerator.createUniqueInstance();
VirtualImageConversion imageConversion =
eg().createInstance(template, DiskFormatType.VHD_FLAT, DiskFormatType.VMDK_FLAT);
// same format diferents template
VirtualImageConversion imageConversionNotDuplicated =
eg().createInstance(template2, DiskFormatType.VHD_FLAT, DiskFormatType.VMDK_FLAT);
List<Object> entitiesToPersist = new ArrayList<Object>();
eg().addAuxiliaryEntitiesToPersist(imageConversion, entitiesToPersist);
eg().addAuxiliaryEntitiesToPersist(imageConversionNotDuplicated, entitiesToPersist);
entitiesToPersist.add(imageConversion);
ds().persistAll(entitiesToPersist.toArray());
VirtualImageConversionDAO dao = createDaoForRollbackTransaction();
assertFalse(dao.existDuplicatedConversion(imageConversionNotDuplicated));
}
@Test
public void testNotExistsDuplicatedConversionsDiferentFormat()
{
VirtualMachineTemplate template = virtualImageGenerator.createUniqueInstance();
VirtualImageConversion imageConversion =
eg().createInstance(template, DiskFormatType.VHD_FLAT, DiskFormatType.VMDK_FLAT);
// same format diferents template
VirtualImageConversion imageConversionNotDuplicated =
eg().createInstance(template, DiskFormatType.VDI_FLAT, DiskFormatType.VMDK_FLAT);
List<Object> entitiesToPersist = new ArrayList<Object>();
eg().addAuxiliaryEntitiesToPersist(imageConversion, entitiesToPersist);
entitiesToPersist.add(imageConversion);
ds().persistAll(entitiesToPersist.toArray());
VirtualImageConversionDAO dao = createDaoForRollbackTransaction();
assertFalse(dao.existDuplicatedConversion(imageConversionNotDuplicated));
}
}