Arik Hadas has uploaded a new change for review. Change subject: core: create 3.0 compatible ovf when export from 3.0 compatible cluster ......................................................................
core: create 3.0 compatible ovf when export from 3.0 compatible cluster This patch fix a problem that exporting VM/template from a 3.0 compatibility cluster resulted in a ovf file that wasn't 3.0 compatible, therefore couldn't be imported in 3.0 environment. There were 2 changed in the ovf files since 3.0: 1. The disk aliases are no longer in the pattern "Disk 1", "Disk 2".. 2. The usb-policy values changed from ["Enabled", "Disabled"] to ["ENABLED_NATIVE", "ENABLED_LEGACY", "DISABLED"] So now, the export process checks the compatibility version of the cluster to which the resource belongs, and create the ovf file with the values that match that version. Note that this is a quick-and-dirty fix. it is planned to be re-implemented with a better design so that the code will be more maintainable. Change-Id: I5e7ecfd7c71a5c22ed7751de9f46b690d5236643 Signed-off-by: Arik Hadas <aha...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ClusterUtils.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveImageCommandTest.java M backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfManager.java M backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfTemplateWriter.java M backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmWriter.java M backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java M backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ovf/OvfManagerTest.java 11 files changed, 158 insertions(+), 26 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/20/13320/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java index 337f365..2a6489e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java @@ -12,6 +12,7 @@ import org.ovirt.engine.core.bll.job.ExecutionHandler; import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.storage.StoragePoolValidator; +import org.ovirt.engine.core.bll.utils.ClusterUtils; import org.ovirt.engine.core.bll.utils.VmDeviceUtils; import org.ovirt.engine.core.bll.validator.StorageDomainValidator; import org.ovirt.engine.core.bll.validator.VmValidator; @@ -255,7 +256,7 @@ vm.setVmtName(t.getName()); } getVm().setVmtGuid(VmTemplateHandler.BlankVmTemplateId); - String vmMeta = ovfManager.ExportVm(vm, AllVmImages); + String vmMeta = ovfManager.ExportVm(vm, AllVmImages, ClusterUtils.getCompatilibilyVersion(vm)); List<Guid> imageGroupIds = new ArrayList<Guid>(); for(Disk disk : vm.getDiskMap().values()) { if(disk.getDiskStorageType() == DiskStorageType.IMAGE) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java index fbd0d0e..fd6ed1c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java @@ -8,6 +8,7 @@ import java.util.concurrent.TimeUnit; import org.apache.commons.lang.StringUtils; +import org.ovirt.engine.core.bll.utils.ClusterUtils; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.DiskImage; @@ -265,7 +266,7 @@ } protected String generateVmTemplateMetadata(VmTemplate template, List<DiskImage> allTemplateImages) { - return ovfManager.ExportTemplate(template, allTemplateImages); + return ovfManager.ExportTemplate(template, allTemplateImages, ClusterUtils.getCompatilibilyVersion(template)); } /** @@ -317,7 +318,7 @@ } protected String generateVmMetadata(VM vm, ArrayList<DiskImage> AllVmImages) { - return ovfManager.ExportVm(vm, AllVmImages); + return ovfManager.ExportVm(vm, AllVmImages, ClusterUtils.getCompatilibilyVersion(vm)); } /** diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java index fc334ca..f027756 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Map; +import org.ovirt.engine.core.bll.utils.ClusterUtils; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.RemoveImageParameters; import org.ovirt.engine.core.common.action.VdcActionType; @@ -249,7 +250,7 @@ } } - String newOvf = ovfManager.ExportVm(vmSnapshot, snapshotImages); + String newOvf = ovfManager.ExportVm(vmSnapshot, snapshotImages, ClusterUtils.getCompatilibilyVersion(vmSnapshot)); snap.setVmConfiguration(newOvf); } } catch (OvfReaderException e) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java index 0e5ca2e..b3d63b6 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java @@ -8,6 +8,7 @@ import org.ovirt.engine.core.bll.ImagesHandler; import org.ovirt.engine.core.bll.context.CompensationContext; import org.ovirt.engine.core.bll.network.VmInterfaceManager; +import org.ovirt.engine.core.bll.utils.ClusterUtils; import org.ovirt.engine.core.bll.utils.VmDeviceUtils; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.DiskImage; @@ -184,7 +185,7 @@ for (DiskImage image : images) { image.setStorageIds(null); } - return new OvfManager().ExportVm(vm, images); + return new OvfManager().ExportVm(vm, images, ClusterUtils.getCompatilibilyVersion(vm)); } /** diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ClusterUtils.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ClusterUtils.java index 66376cb..dda7da1 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ClusterUtils.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ClusterUtils.java @@ -4,9 +4,13 @@ import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.VmBase; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.dao.VdsDAO; +import org.ovirt.engine.core.dao.VdsGroupDAO; import org.ovirt.engine.core.utils.RandomUtils; public class ClusterUtils { @@ -50,4 +54,18 @@ return DbFacade.getInstance() .getVdsDao(); } + + public static Version getCompatilibilyVersion(VM vm) { + return getCompatilibilyVersion(vm.getStaticData()); + } + + public static Version getCompatilibilyVersion(VmBase vmBase) { + return vmBase.getVdsGroupId() != null ? + getInstance().getVdsGroupDao().get(vmBase.getVdsGroupId()).getcompatibility_version() + : Version.v3_0; + } + + public VdsGroupDAO getVdsGroupDao() { + return DbFacade.getInstance().getVdsGroupDao(); + } } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveImageCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveImageCommandTest.java index 04f45d2..4b17d1c 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveImageCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveImageCommandTest.java @@ -29,6 +29,7 @@ import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dao.SnapshotDao; import org.ovirt.engine.core.utils.MockConfigRule; import org.ovirt.engine.core.utils.RandomUtils; @@ -95,7 +96,41 @@ OvfManager ovfManager = new OvfManager(); ArrayList<DiskImage> disks = new ArrayList<DiskImage>(Arrays.asList(disk1, disk2)); - String ovf = ovfManager.ExportVm(vm, disks); + String ovf = ovfManager.ExportVm(vm, disks, Version.v3_1); + Snapshot snap = new Snapshot(); + snap.setVmConfiguration(ovf); + snap.setId(vmSnapshotId); + + when(snapshotDAO.get(vmSnapshotId)).thenReturn(snap); + doReturn(disk2).when(cmd).getDiskImage(); + doReturn(disk2).when(cmd).getImage(); + doReturn(disk2.getId()).when(cmd).getImageId(); + Snapshot actual = cmd.prepareSnapshotConfigWithoutImageSingleImage(vmSnapshotId, disk2.getImageId()); + String actualOvf = actual.getVmConfiguration(); + + ArrayList<DiskImage> actualImages = new ArrayList<DiskImage>(); + ovfManager.ImportVm(actualOvf, new VM(), actualImages, new ArrayList<VmNetworkInterface>()); + assertEquals("Wrong number of disks", 1, actualImages.size()); + assertEquals("Wrong disk", disk1, actualImages.get(0)); + } + + @Test + public void testRemoveImageFromSnapshotConfigurationBackwardCompatibility() throws OvfReaderException { + Guid vmId = Guid.NewGuid(); + VM vm = new VM(); + vm.setId(vmId); + vm.setStoragePoolId(Guid.NewGuid()); + vm.setVmtName(RandomUtils.instance().nextString(10)); + vm.setOrigin(OriginType.OVIRT); + vm.setDbGeneration(1L); + Guid vmSnapshotId = Guid.NewGuid(); + + DiskImage disk1 = addTestDisk(vm, vmSnapshotId); + DiskImage disk2 = addTestDisk(vm, vmSnapshotId); + + OvfManager ovfManager = new OvfManager(); + ArrayList<DiskImage> disks = new ArrayList<DiskImage>(Arrays.asList(disk1, disk2)); + String ovf = ovfManager.ExportVm(vm, disks, Version.v3_0); Snapshot snap = new Snapshot(); snap.setVmConfiguration(ovf); snap.setId(vmSnapshotId); diff --git a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfManager.java b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfManager.java index 138ac4c..d0a4e4a 100644 --- a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfManager.java +++ b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfManager.java @@ -8,19 +8,20 @@ import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.compat.backendcompat.XmlDocument; public class OvfManager { - public String ExportVm(VM vm, ArrayList<DiskImage> images) { - OvfWriter ovf = new OvfVmWriter(vm, images); + public String ExportVm(VM vm, ArrayList<DiskImage> images, Version version) { + OvfWriter ovf = new OvfVmWriter(vm, images, version); BuildOvf(ovf); return ovf.getStringRepresentation(); } - public String ExportTemplate(VmTemplate vmTemplate, List<DiskImage> images) { - OvfWriter ovf = new OvfTemplateWriter(vmTemplate, images); + public String ExportTemplate(VmTemplate vmTemplate, List<DiskImage> images, Version version) { + OvfWriter ovf = new OvfTemplateWriter(vmTemplate, images, version); BuildOvf(ovf); return ovf.getStringRepresentation(); diff --git a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfTemplateWriter.java b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfTemplateWriter.java index f8e9689..dc7b7e4 100644 --- a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfTemplateWriter.java +++ b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfTemplateWriter.java @@ -3,18 +3,18 @@ import java.util.List; import org.ovirt.engine.core.common.businessentities.DiskImage; -import org.ovirt.engine.core.common.businessentities.UsbPolicy; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.network.VmInterfaceType; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; +import org.ovirt.engine.core.compat.Version; public class OvfTemplateWriter extends OvfWriter { protected VmTemplate _vmTemplate; - public OvfTemplateWriter(VmTemplate vmTemplate, List<DiskImage> images) { - super(vmTemplate, images); + public OvfTemplateWriter(VmTemplate vmTemplate, List<DiskImage> images, Version version) { + super(vmTemplate, images, version); _vmTemplate = vmTemplate; } @@ -120,7 +120,7 @@ for (DiskImage image : _images) { _writer.WriteStartElement("Item"); _writer.WriteStartElement(RASD_URI, "Caption"); - _writer.WriteRaw(image.getDiskAlias()); + _writer.WriteRaw(getBackwardCompatibleDiskAlias(image.getDiskAlias())); _writer.WriteEndElement(); _writer.WriteStartElement(RASD_URI, "InstanceId"); _writer.WriteRaw(image.getImageId().toString()); @@ -214,8 +214,7 @@ _writer.WriteRaw(OvfHardware.USB); _writer.WriteEndElement(); _writer.WriteStartElement(RASD_URI, "UsbPolicy"); - _writer.WriteRaw((_vmTemplate.getUsbPolicy()) != null ? _vmTemplate.getUsbPolicy().toString() - : UsbPolicy.DISABLED.name()); + _writer.WriteRaw(getBackwardCompatibleUsbPolicy(_vmTemplate.getUsbPolicy())); _writer.WriteEndElement(); _writer.WriteEndElement(); // item diff --git a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmWriter.java b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmWriter.java index 8afc0aa..8acbcc0 100644 --- a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmWriter.java +++ b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmWriter.java @@ -7,7 +7,6 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.Snapshot; -import org.ovirt.engine.core.common.businessentities.UsbPolicy; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.network.VmInterfaceType; @@ -17,12 +16,13 @@ import org.ovirt.engine.core.compat.Match; import org.ovirt.engine.core.compat.Regex; import org.ovirt.engine.core.compat.RegexOptions; +import org.ovirt.engine.core.compat.Version; public class OvfVmWriter extends OvfWriter { private static final String EXPORT_ONLY_PREFIX = "exportonly_"; - public OvfVmWriter(VM vm, List<DiskImage> images) { - super(vm.getStaticData(), images); + public OvfVmWriter(VM vm, List<DiskImage> images, Version version) { + super(vm.getStaticData(), images, version); _vm = vm; } @@ -192,7 +192,7 @@ for (DiskImage image : _images) { _writer.WriteStartElement("Item"); _writer.WriteStartElement(RASD_URI, "Caption"); - _writer.WriteRaw(image.getDiskAlias()); + _writer.WriteRaw(getBackwardCompatibleDiskAlias(image.getDiskAlias())); _writer.WriteEndElement(); _writer.WriteStartElement(RASD_URI, "InstanceId"); _writer.WriteRaw(image.getImageId().toString()); @@ -292,7 +292,7 @@ _writer.WriteRaw(OvfHardware.USB); _writer.WriteEndElement(); _writer.WriteStartElement(RASD_URI, "UsbPolicy"); - _writer.WriteRaw(vmBase.getUsbPolicy() != null ? vmBase.getUsbPolicy().toString() : UsbPolicy.DISABLED.name()); + _writer.WriteRaw(getBackwardCompatibleUsbPolicy(vmBase.getUsbPolicy())); _writer.WriteEndElement(); _writer.WriteEndElement(); // item diff --git a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java index 5f1286f..6bc53a2 100644 --- a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java +++ b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java @@ -6,6 +6,7 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.UsbPolicy; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmBase; import org.ovirt.engine.core.common.businessentities.VmDevice; @@ -15,6 +16,7 @@ import org.ovirt.engine.core.common.utils.VmDeviceCommonUtils; import org.ovirt.engine.core.common.utils.VmDeviceType; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.compat.backendcompat.XmlDocument; import org.ovirt.engine.core.compat.backendcompat.XmlTextWriter; @@ -25,12 +27,15 @@ protected XmlDocument _document; protected VM _vm; protected VmBase vmBase; + private Version version; + private int diskCounter; - public OvfWriter(VmBase vmBase, List<DiskImage> images) { + public OvfWriter(VmBase vmBase, List<DiskImage> images, Version version) { _document = new XmlDocument(); _images = images; _writer = new XmlTextWriter(); this.vmBase = vmBase; + this.version = version; WriteHeader(); } @@ -369,4 +374,25 @@ public String getStringRepresentation() { return _writer.getStringXML(); } + + protected String getBackwardCompatibleUsbPolicy(UsbPolicy usbPolicy) { + if (usbPolicy == null) + return UsbPolicy.DISABLED.name(); + + if (version.compareTo(Version.v3_1) < 0) { + switch (usbPolicy) { + case ENABLED_LEGACY: + return "Enabled"; + default: + return "Disabled"; + } + } + else { + return usbPolicy.toString(); + } + } + + protected String getBackwardCompatibleDiskAlias(String diskAlias) { + return version.compareTo(Version.v3_1) >= 0 ? diskAlias : "Disk " + (++diskCounter); + } } diff --git a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ovf/OvfManagerTest.java b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ovf/OvfManagerTest.java index c9e8f46..3531284 100644 --- a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ovf/OvfManagerTest.java +++ b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ovf/OvfManagerTest.java @@ -18,6 +18,7 @@ import org.ovirt.engine.core.common.businessentities.network.VmNetworkStatistics; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.utils.MockConfigRule; public class OvfManagerTest { @@ -42,7 +43,17 @@ @Test public void testVmOvfCreation() throws Exception { VM vm = createVM(); - String xml = manager.ExportVm(vm, new ArrayList<DiskImage>()); + String xml = manager.ExportVm(vm, new ArrayList<DiskImage>(), Version.v3_1); + assertNotNull(xml); + final VM newVm = new VM(); + manager.ImportVm(xml, newVm, new ArrayList<DiskImage>(), new ArrayList<VmNetworkInterface>()); + assertVm(vm, newVm, vm.getDbGeneration()); + } + + @Test + public void testVmOvfCreationBackwardCompatilibily() throws Exception { + VM vm = createVM(); + String xml = manager.ExportVm(vm, new ArrayList<DiskImage>(), Version.v3_0); assertNotNull(xml); final VM newVm = new VM(); manager.ImportVm(xml, newVm, new ArrayList<DiskImage>(), new ArrayList<VmNetworkInterface>()); @@ -52,7 +63,19 @@ @Test public void testVmOvfImportWithoutDbGeneration() throws Exception { VM vm = createVM(); - String xml = manager.ExportVm(vm, new ArrayList<DiskImage>()); + String xml = manager.ExportVm(vm, new ArrayList<DiskImage>(), Version.v3_1); + assertNotNull(xml); + final VM newVm = new VM(); + assertTrue(xml.contains("Generation")); + String replacedXml = xml.replaceAll("Generation", "test_replaced"); + manager.ImportVm(replacedXml, newVm, new ArrayList<DiskImage>(), new ArrayList<VmNetworkInterface>()); + assertVm(vm, newVm, 1); + } + + @Test + public void testVmOvfImportWithoutDbGenerationBackwardCompatilibily() throws Exception { + VM vm = createVM(); + String xml = manager.ExportVm(vm, new ArrayList<DiskImage>(), Version.v3_0); assertNotNull(xml); final VM newVm = new VM(); assertTrue(xml.contains("Generation")); @@ -64,7 +87,18 @@ @Test public void testTemplateOvfCreation() throws Exception { VmTemplate template = createVmTemplate(); - String xml = manager.ExportTemplate(template, new ArrayList<DiskImage>()); + String xml = manager.ExportTemplate(template, new ArrayList<DiskImage>(), Version.v3_1); + assertNotNull(xml); + final VmTemplate newtemplate = new VmTemplate(); + manager.ImportTemplate(xml, newtemplate, new ArrayList<DiskImage>(), new ArrayList<VmNetworkInterface>()); + assertEquals("imported template is different than expected",template, newtemplate); + assertEquals("imported db generation is different than expected",template.getDbGeneration(), newtemplate.getDbGeneration()); + } + + @Test + public void testTemplateOvfCreationBackwardCompatiliblity() throws Exception { + VmTemplate template = createVmTemplate(); + String xml = manager.ExportTemplate(template, new ArrayList<DiskImage>(), Version.v3_0); assertNotNull(xml); final VmTemplate newtemplate = new VmTemplate(); manager.ImportTemplate(xml, newtemplate, new ArrayList<DiskImage>(), new ArrayList<VmNetworkInterface>()); @@ -75,7 +109,22 @@ @Test public void testTemplateOvfImportWithoutDbGeneration() throws Exception { VmTemplate template = createVmTemplate(); - String xml = manager.ExportTemplate(template, new ArrayList<DiskImage>()); + String xml = manager.ExportTemplate(template, new ArrayList<DiskImage>(), Version.v3_1); + assertNotNull(xml); + String replacedXml = xml.replaceAll("Generation", "test_replaced"); + final VmTemplate newtemplate = new VmTemplate(); + manager.ImportTemplate(replacedXml, + newtemplate, + new ArrayList<DiskImage>(), + new ArrayList<VmNetworkInterface>()); + assertEquals("imported template is different than expected", template, newtemplate); + assertTrue("imported db generation is different than expected",newtemplate.getDbGeneration() == 1); + } + + @Test + public void testTemplateOvfImportWithoutDbGenerationBackwardCompatiliblity() throws Exception { + VmTemplate template = createVmTemplate(); + String xml = manager.ExportTemplate(template, new ArrayList<DiskImage>(), Version.v3_0); assertNotNull(xml); String replacedXml = xml.replaceAll("Generation", "test_replaced"); final VmTemplate newtemplate = new VmTemplate(); -- To view, visit http://gerrit.ovirt.org/13320 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5e7ecfd7c71a5c22ed7751de9f46b690d5236643 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Arik Hadas <aha...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches