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

Reply via email to