/**
* 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 junit.framework.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.abiquo.server.core.appslibrary.Category;
import com.abiquo.server.core.appslibrary.CategoryGenerator;
import com.abiquo.server.core.appslibrary.VirtualMachineTemplate;
import com.abiquo.server.core.appslibrary.VirtualMachineTemplateGenerator;
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.Privilege;
import com.softwarementors.bzngine.engines.jpa.test.configuration.EntityManagerFactoryForTesting;
import com.softwarementors.bzngine.entities.test.PersistentInstanceTester;
public class NodeVirtualImageDAOTest extends
DefaultDAOTestBase<NodeVirtualImageDAO, NodeVirtualImage>
{
private VirtualMachineGenerator virtualMachineGenerator;
private VirtualApplianceGenerator virtualApplianceGenerator;
private VirtualAppliance vapp;
private VirtualMachine vmachine;
private VirtualMachineTemplateGenerator virtualImageGenerator;
private VirtualMachineTemplate vimage;
private CategoryGenerator categoryGenerator;
@Override
@BeforeMethod
protected void methodSetUp()
{
super.methodSetUp();
virtualMachineGenerator = new VirtualMachineGenerator(getSeed());
virtualApplianceGenerator = new VirtualApplianceGenerator(getSeed());
virtualImageGenerator = new VirtualMachineTemplateGenerator(getSeed());
categoryGenerator = new CategoryGenerator(getSeed());
vimage = virtualImageGenerator.createUniqueInstance();
vapp = virtualApplianceGenerator.createUniqueInstance();
vmachine = virtualMachineGenerator.createInstance(vimage);
saveVirtualAppliance(vapp);
// List<Object> entitiesToSetup = new ArrayList<Object>();
//
// entitiesToSetup.add(vimage.getCategory());
// entitiesToSetup.add(vimage);
// entitiesToSetup.add(vmachine);
// ds().persistAll(entitiesToSetup.toArray());
// saveVirtualImage(vimage);
saveVirtualMachine(vmachine);
}
@Override
protected NodeVirtualImageDAO createDao(final EntityManager entityManager)
{
return new NodeVirtualImageDAO(entityManager);
}
@Override
protected PersistentInstanceTester<NodeVirtualImage> createEntityInstanceGenerator()
{
return new NodeVirtualImageGenerator(getSeed());
}
@Override
protected EntityManagerFactoryForTesting getFactory()
{
return TestDataAccessManager.getFactory();
}
@Override
public NodeVirtualImageGenerator eg()
{
return (NodeVirtualImageGenerator) super.eg();
}
@Test
public void findByEnterprise()
{
EnterpriseGenerator enterpriseGenerator = new EnterpriseGenerator(getSeed());
Enterprise enterprise = enterpriseGenerator.createUniqueInstance();
Enterprise enterprise2 = enterpriseGenerator.createUniqueInstance();
VirtualMachineGenerator vMachineGenerator = new VirtualMachineGenerator(getSeed());
VirtualMachine vm1 = vMachineGenerator.createInstance(enterprise);
VirtualMachine vm2 = vMachineGenerator.createInstance(enterprise);
VirtualMachine vm3 = vMachineGenerator.createInstance(enterprise2);
VirtualDatacenterGenerator vdcGenerator = new VirtualDatacenterGenerator(getSeed());
VirtualDatacenter vdc = vdcGenerator.createInstance(enterprise);
VirtualDatacenter vdc2 = vdcGenerator.createInstance(enterprise2);
VirtualApplianceGenerator vApplianceGenerator = new VirtualApplianceGenerator(getSeed());
VirtualAppliance vAppliance = vApplianceGenerator.createInstance(vdc);
VirtualAppliance vAppliance2 = vApplianceGenerator.createInstance(vdc2);
NodeVirtualImageGenerator nodeVImageGenerator = new NodeVirtualImageGenerator(getSeed());
NodeVirtualImage nvi = nodeVImageGenerator.createInstance(vAppliance, vm1);
NodeVirtualImage nvi2 = nodeVImageGenerator.createInstance(vAppliance, vm2);
NodeVirtualImage nvi3 = nodeVImageGenerator.createInstance(vAppliance2, vm3);
vm1.getVirtualMachineTemplate().getRepository()
.setDatacenter(vm1.getHypervisor().getMachine().getRack().getDatacenter());
vm2.getVirtualMachineTemplate().getRepository()
.setDatacenter(vm2.getHypervisor().getMachine().getRack().getDatacenter());
vm3.getVirtualMachineTemplate().getRepository()
.setDatacenter(vm3.getHypervisor().getMachine().getRack().getDatacenter());
// ds().persistAll(enterprise, enterprise2, vm1.getUser().getRole(), vm1.getUser(),
// vm1.getHypervisor().getMachine().getDatacenter(),
// vm1.getHypervisor().getMachine().getRack().getDatacenter(),
// vm1.getHypervisor().getMachine().getRack(), vm1.getHypervisor().getMachine(),
// vm1.getHypervisor(), vm1.getVirtualImage(), vm1, vm2.getUser().getRole(),
// vm2.getUser(), vm2.getHypervisor().getMachine().getRack().getDatacenter(),
// vm2.getHypervisor().getMachine().getRack(),
// vm2.getHypervisor().getMachine().getDatacenter(), vm2.getHypervisor().getMachine(),
// vm2.getHypervisor(), vm2.getVirtualImage(), vm2, vm3.getUser().getRole(),
// vm3.getUser(), vm3.getHypervisor().getMachine().getRack().getDatacenter(),
// vm3.getHypervisor().getMachine().getRack(),
// vm3.getHypervisor().getMachine().getDatacenter(), vm3.getHypervisor().getMachine(),
// vm3.getHypervisor(), vm3.getVirtualImage(), vm3, vdc.getNetwork(), vdc.getDatacenter(),
// vdc, vdc2.getNetwork(), vdc2.getDatacenter(), vdc2, vAppliance, vAppliance2, nvi, nvi2,
// nvi3);
List<Object> entitiesToSetup = new ArrayList<Object>();
entitiesToSetup.add(enterprise);
entitiesToSetup.add(enterprise2);
entitiesToSetup.add(vdc.getNetwork());
entitiesToSetup.add(vdc.getDatacenter());
entitiesToSetup.add(vdc);
entitiesToSetup.add(vdc2.getNetwork());
entitiesToSetup.add(vdc2.getDatacenter());
entitiesToSetup.add(vdc2);
entitiesToSetup.add(vAppliance);
entitiesToSetup.add(vAppliance2);
for (Privilege p : vm1.getUser().getRole().getPrivileges())
{
entitiesToSetup.add(p);
}
entitiesToSetup.add(vm1.getUser().getRole());
entitiesToSetup.add(vm1.getUser());
entitiesToSetup.add(vm1.getHypervisor().getMachine().getRack().getDatacenter());
entitiesToSetup.add(vm1.getHypervisor().getMachine().getRack());
entitiesToSetup.add(vm1.getHypervisor().getMachine());
entitiesToSetup.add(vm1.getHypervisor());
entitiesToSetup.add(vm1.getVirtualMachineTemplate().getRepository());
entitiesToSetup.add(vm1.getVirtualMachineTemplate().getCategory());
entitiesToSetup.add(vm1.getVirtualMachineTemplate());
entitiesToSetup.add(vm1);
entitiesToSetup.add(nvi);
for (Privilege p : vm2.getUser().getRole().getPrivileges())
{
entitiesToSetup.add(p);
}
entitiesToSetup.add(vm2.getUser().getRole());
entitiesToSetup.add(vm2.getUser());
entitiesToSetup.add(vm2.getHypervisor().getMachine().getRack().getDatacenter());
entitiesToSetup.add(vm2.getHypervisor().getMachine().getRack());
entitiesToSetup.add(vm2.getHypervisor().getMachine());
entitiesToSetup.add(vm2.getHypervisor());
entitiesToSetup.add(vm2.getVirtualMachineTemplate().getRepository());
entitiesToSetup.add(vm2.getVirtualMachineTemplate().getCategory());
entitiesToSetup.add(vm2.getVirtualMachineTemplate());
entitiesToSetup.add(vm2);
entitiesToSetup.add(nvi2);
for (Privilege p : vm3.getUser().getRole().getPrivileges())
{
entitiesToSetup.add(p);
}
entitiesToSetup.add(vm3.getUser().getRole());
entitiesToSetup.add(vm3.getUser());
entitiesToSetup.add(vm3.getHypervisor().getMachine().getRack().getDatacenter());
entitiesToSetup.add(vm3.getHypervisor().getMachine().getRack());
entitiesToSetup.add(vm3.getHypervisor().getMachine());
entitiesToSetup.add(vm3.getHypervisor());
entitiesToSetup.add(vm3.getVirtualMachineTemplate().getRepository());
entitiesToSetup.add(vm3.getVirtualMachineTemplate().getCategory());
entitiesToSetup.add(vm3.getVirtualMachineTemplate());
entitiesToSetup.add(vm3);
entitiesToSetup.add(nvi3);
ds().persistAll(entitiesToSetup.toArray());
NodeVirtualImageDAO dao = createDaoForRollbackTransaction();
List<NodeVirtualImage> list = dao.findByEnterprise(enterprise);
Assert.assertEquals(list.size(), 2);
}
public void testFindVirtualAppliance()
{
NodeVirtualImage nodeVirtualImage = eg().createInstance(vapp, vmachine);
ds().persistAll(nodeVirtualImage);
NodeVirtualImageDAO nodeVirtualImageDAO = createDaoForRollbackTransaction();
VirtualAppliance result = nodeVirtualImageDAO.findVirtualAppliance(vmachine);
assertNotNull(result);
virtualApplianceGenerator.assertAllPropertiesEqual(result, vapp);
}
@Test
public void testFindVirtualApplianceWithUnexistentVirtualMachine()
{
NodeVirtualImage nodeVirtualImage = eg().createInstance(vapp, vmachine);
ds().persistAll(nodeVirtualImage);
NodeVirtualImageDAO nodeVirtualImageDAO = createDaoForRollbackTransaction();
VirtualMachine vmachineUnexisting = virtualMachineGenerator.createUniqueInstance();
VirtualAppliance result = nodeVirtualImageDAO.findVirtualAppliance(vmachineUnexisting);
assertNull(result);
}
@Test
public void testFindByVirtualMachine()
{
NodeVirtualImage nodeVirtualImage = eg().createInstance(vapp, vmachine, vimage);
ds().persistAll(nodeVirtualImage);
NodeVirtualImageDAO nodeVirtualImageDAO = createDaoForRollbackTransaction();
NodeVirtualImage result = nodeVirtualImageDAO.findByVirtualMachine(vmachine);
assertNotNull(result);
assertEquals(result.getId(), nodeVirtualImage.getId());
}
@Test
public void testFindByUnexistingVirtualMachine()
{
NodeVirtualImage nodeVirtualImage = eg().createInstance(vapp, vmachine);
ds().persistAll(nodeVirtualImage);
NodeVirtualImageDAO nodeVirtualImageDAO = createDaoForRollbackTransaction();
VirtualMachine vmachineUnexisting = virtualMachineGenerator.createUniqueInstance();
NodeVirtualImage result = nodeVirtualImageDAO.findByVirtualMachine(vmachineUnexisting);
assertNull(result);
}
@Test
public void testFindByVirtualImage()
{
NodeVirtualImage nvi1 = eg().createInstance(vapp, vmachine);
NodeVirtualImage nvi2 = eg().createInstance(vapp, vmachine);
NodeVirtualImage nvi3 = eg().createInstance(vapp, vmachine);
ds().persistAll(nvi1, nvi2, nvi3);
NodeVirtualImageDAO nodeVirtualImageDAO = createDaoForRollbackTransaction();
List<NodeVirtualImage> result =
nodeVirtualImageDAO.findByVirtualImage(vmachine.getVirtualMachineTemplate());
assertNotNull(result);
assertEquals(result.size(), 3);
}
private void saveVirtualAppliance(final VirtualAppliance vapp)
{
List<Object> entitiesToPersist = new ArrayList<Object>();
virtualApplianceGenerator.addAuxiliaryEntitiesToPersist(vapp, entitiesToPersist);
persistAll(ds(), entitiesToPersist, vapp);
}
private void saveVirtualMachine(final VirtualMachine virtualMachine)
{
List<Object> entitiesToPersist = new ArrayList<Object>();
virtualMachineGenerator.addAuxiliaryEntitiesToPersist(virtualMachine, entitiesToPersist);
persistAll(ds(), entitiesToPersist, virtualMachine);
}
private void saveCategory(final Category category)
{
List<Object> entitiesToPersist = new ArrayList<Object>();
categoryGenerator.addAuxiliaryEntitiesToPersist(category, entitiesToPersist);
persistAll(ds(), entitiesToPersist, category);
}
@Test
public void testFindByVirtualAppliance()
{
NodeVirtualImage nodeVirtualImage = eg().createInstance(vapp, vmachine, vimage);
ds().persistAll(nodeVirtualImage);
NodeVirtualImageDAO nodeVirtualImageDAO = createDaoForRollbackTransaction();
List<NodeVirtualImage> result = nodeVirtualImageDAO.findByVirtualAppliance(vapp);
assertFalse(result.isEmpty(), "The list is emtpy!");
}
}