/** * 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.List; import com.abiquo.model.enumerator.DiskFormatType; import com.abiquo.server.core.common.DefaultEntityGenerator; import com.abiquo.server.core.enterprise.Enterprise; import com.abiquo.server.core.enterprise.EnterpriseGenerator; import com.abiquo.server.core.infrastructure.Datacenter; import com.abiquo.server.core.infrastructure.DatacenterGenerator; import com.abiquo.server.core.infrastructure.Repository; import com.abiquo.server.core.infrastructure.RepositoryGenerator; import com.abiquo.server.core.infrastructure.storage.VolumeManagement; import com.softwarementors.commons.test.SeedGenerator; import com.softwarementors.commons.testng.AssertEx; public class VirtualMachineTemplateGenerator extends DefaultEntityGenerator<VirtualMachineTemplate> { private final EnterpriseGenerator enterpriseGenerator; private final RepositoryGenerator repositoryGenerator; private final CategoryGenerator categoryGenerator; private final DatacenterGenerator datacenterGenerator; public VirtualMachineTemplateGenerator(final SeedGenerator seed) { super(seed); enterpriseGenerator = new EnterpriseGenerator(seed); repositoryGenerator = new RepositoryGenerator(seed); categoryGenerator = new CategoryGenerator(seed); datacenterGenerator = new DatacenterGenerator(seed); } @Override public void assertAllPropertiesEqual(final VirtualMachineTemplate img1, final VirtualMachineTemplate img2) { // Properties AssertEx.assertPropertiesEqualSilent(img1, img2, VirtualMachineTemplate.DISKFORMAT_TYPE_PROPERTY, VirtualMachineTemplate.NAME_PROPERTY, VirtualMachineTemplate.STATEFUL_PROPERTY, VirtualMachineTemplate.CPU_REQUIRED_PROPERTY, VirtualMachineTemplate.PATH_PROPERTY, VirtualMachineTemplate.OVFID_PROPERTY, VirtualMachineTemplate.RAM_REQUIRED_PROPERTY, VirtualMachineTemplate.HD_REQUIRED_PROPERTY, VirtualMachineTemplate.DISK_FILE_SIZE_PROPERTY, VirtualMachineTemplate.DESCRIPTION_PROPERTY, VirtualMachineTemplate.SHARED_PROPERTY, VirtualMachineTemplate.COST_CODE_PROPERTY, VirtualMachineTemplate.ICON_URL_PROPERTY); // Required relationships enterpriseGenerator.assertAllPropertiesEqual(img1.getEnterprise(), img2.getEnterprise()); categoryGenerator.assertAllPropertiesEqual(img1.getCategory(), img2.getCategory()); // Optional relationships if (img1.getRepository() != null) { repositoryGenerator .assertAllPropertiesEqual(img1.getRepository(), img2.getRepository()); } if (img1.getMaster() != null) { assertAllPropertiesEqual(img1.getMaster(), img2.getMaster()); } } @Override public VirtualMachineTemplate createUniqueInstance() { Enterprise enterprise = enterpriseGenerator.createUniqueInstance(); return createInstance(enterprise); } public VirtualMachineTemplate createInstance(final Enterprise enterprise) { Datacenter datacenter = datacenterGenerator.createUniqueInstance(); return createInstance(enterprise, datacenter); } public VirtualMachineTemplate createInstance(final Datacenter datacenter) { Enterprise enterprise = enterpriseGenerator.createUniqueInstance(); return createInstance(enterprise, datacenter); } public VirtualMachineTemplate createInstance(final Enterprise enterprise, final Datacenter datacenter) { Repository repository = repositoryGenerator.createInstance(datacenter); return createInstance(enterprise, repository); } public VirtualMachineTemplate createInstance(final Enterprise enterprise, final Repository repository) { Category category = categoryGenerator.createUniqueInstance(); return createInstance(enterprise, repository, category); } public VirtualMachineTemplate createInstance(final Enterprise enterprise, final Repository repository, final DiskFormatType baseType, final String name) { Category category = categoryGenerator.createUniqueInstance(); return createInstance(enterprise, repository, 0, 0, 0, name, category, baseType); } public VirtualMachineTemplate createInstance(final Enterprise enterprise, final Repository repository, final Category category) { final String name = newString(nextSeed(), VirtualMachineTemplate.NAME_LENGTH_MIN, VirtualMachineTemplate.NAME_LENGTH_MAX); return createInstance(enterprise, repository, 0, 0, 0, name, category, DiskFormatType.RAW); } public VirtualMachineTemplate createInstance(final Enterprise enterprise, final Repository repository, final int cpuRequired, final int ramRequired, final long hdRequired, final String name) { Category category = categoryGenerator.createUniqueInstance(); return createInstance(enterprise, repository, cpuRequired, ramRequired, hdRequired, name, category, DiskFormatType.RAW); } protected VirtualMachineTemplate createInstance(final Enterprise enterprise, final Repository repository, final int cpuRequired, final int ramRequired, final long hdRequired, final String name, final Category category, final DiskFormatType diskFormat) { Long diskFileSize = newBigDecimal(nextSeed()).longValue(); final String pathName = newString(nextSeed(), VirtualMachineTemplate.PATH_LENGTH_MIN, VirtualMachineTemplate.PATH_LENGTH_MAX); String ovfid = newString(nextSeed(), VirtualMachineTemplate.OVFID_LENGTH_MIN, VirtualMachineTemplate.OVFID_LENGTH_MAX); String creationUser = newString(nextSeed(), VirtualMachineTemplate.CREATION_USER_LENGTH_MIN, VirtualMachineTemplate.CREATION_USER_LENGTH_MAX); String iconUrl = "http://validiconurl.com/icon.jpg"; VirtualMachineTemplate vtemplate = new VirtualMachineTemplate(enterprise, name, diskFormat, pathName, diskFileSize, category, "dummyuser"); vtemplate.setRepository(repository); vtemplate.setCpuRequired(cpuRequired); vtemplate.setRamRequired(ramRequired); vtemplate.setHdRequiredInBytes(hdRequired); vtemplate.setOvfid(ovfid); vtemplate.setCreationUser(creationUser); vtemplate.setIconUrl(iconUrl); return vtemplate; } public VirtualMachineTemplate createInstanceGenericISCSI(final Enterprise enterprise, final Datacenter datacenter, final VolumeManagement volman) { Repository repository = repositoryGenerator.createInstance(datacenter); Category category = categoryGenerator.createUniqueInstance(); final String name = newString(nextSeed(), VirtualMachineTemplate.NAME_LENGTH_MIN, VirtualMachineTemplate.NAME_LENGTH_MAX); Long diskFileSize = newBigDecimal(nextSeed()).longValue(); final String pathName = newString(nextSeed(), VirtualMachineTemplate.PATH_LENGTH_MIN, VirtualMachineTemplate.PATH_LENGTH_MAX); String ovfid = newString(nextSeed(), VirtualMachineTemplate.OVFID_LENGTH_MIN, VirtualMachineTemplate.OVFID_LENGTH_MAX); String creationUser = newString(nextSeed(), VirtualMachineTemplate.CREATION_USER_LENGTH_MIN, VirtualMachineTemplate.CREATION_USER_LENGTH_MAX); VirtualMachineTemplate vi = new VirtualMachineTemplate(enterprise, name, DiskFormatType.RAW, pathName, diskFileSize, category, "dummyuser", volman); vi.setRepository(repository); vi.setCpuRequired(0); vi.setRamRequired(0); vi.setHdRequiredInBytes(0); vi.setOvfid(ovfid); vi.setCreationUser(creationUser); return vi; } public VirtualMachineTemplate createSlaveVirtualMachineTemplate( final VirtualMachineTemplate master) { VirtualMachineTemplate slave = createInstance(master.getEnterprise(), master.getRepository(), master.getCategory()); slave.setMaster(master); return slave; } public VirtualMachineTemplate createSlavePersistent(final VirtualMachineTemplate master, final VolumeManagement volman) { VirtualMachineTemplate slave = createInstanceGenericISCSI(master.getEnterprise(), master.getRepository() .getDatacenter(), volman); slave.setMaster(master); slave.setCategory(master.getCategory()); slave.setRepository(master.getRepository()); return slave; } public VirtualMachineTemplate createVirtualMachineTemplateWithConversions( final Enterprise enterprise) { VirtualMachineTemplate template = createInstance(enterprise); VirtualImageConversion conversion = new VirtualImageConversion(template, DiskFormatType.RAW, newString(nextSeed(), 0, 255)); template.addConversion(conversion); return template; } @Override public void addAuxiliaryEntitiesToPersist(final VirtualMachineTemplate entity, final List<Object> entitiesToPersist) { super.addAuxiliaryEntitiesToPersist(entity, entitiesToPersist); Enterprise enterprise = entity.getEnterprise(); enterpriseGenerator.addAuxiliaryEntitiesToPersist(enterprise, entitiesToPersist); entitiesToPersist.add(enterprise); Category category = entity.getCategory(); categoryGenerator.addAuxiliaryEntitiesToPersist(category, entitiesToPersist); entitiesToPersist.add(category); if (entity.getRepository() != null) { Repository repository = entity.getRepository(); repositoryGenerator.addAuxiliaryEntitiesToPersist(repository, entitiesToPersist); entitiesToPersist.add(repository); } if (entity.getMaster() != null) { VirtualMachineTemplate master = entity.getMaster(); // Take care of recursion here addAuxiliaryEntitiesToPersist(master, entitiesToPersist); entitiesToPersist.add(master); } } }