Liron Ar has uploaded a new change for review.

Change subject: core, restapi: provide capabillity to get vm ovf config
......................................................................

core, restapi: provide capabillity to get vm ovf config

This patch adds the capabllity to get the current vm configuration (if
possible) through the ovirt rest-api.

The usage is done through a GET request to /api/vms or /api/vms/GUID/
with All-Content header with 'true' as the value.

If the VM OVF configuration couldn't be generated succesfully (if the vm
is currentky locked for example), the configuration won't be returned as
part of the result.

Change-Id: I5cbcd666519ffd138fd3efd4e130495529eaec0f
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1047965
Signed-off-by: Liron Aravot <lara...@redhat.com>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfHelper.java
A 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQueryTest.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmOvfByVmIdParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
M 
backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
11 files changed, 287 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/10/24410/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQuery.java
new file mode 100644
index 0000000..4d16b32
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQuery.java
@@ -0,0 +1,38 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.queries.GetVmOvfByVmIdParameters;
+import org.ovirt.engine.core.dao.VmDAO;
+
+public class GetVmOvfByVmIdQuery<P extends GetVmOvfByVmIdParameters> extends 
QueriesCommandBase<P> {
+
+    public GetVmOvfByVmIdQuery(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        VM vm = getVmDao().get(getParameters().getId(), getUserID(), 
getParameters().isFiltered());
+        if (vm == null || vm.getDbGeneration() != 
getParameters().getRequiredGeneration()) {
+            getQueryReturnValue().setSucceeded(false);
+            return;
+        }
+
+
+        String ovfData = generateOvfConfig(vm);
+
+        if (ovfData == null) {
+            return;
+        }
+
+        getQueryReturnValue().setReturnValue(ovfData);
+    }
+
+    protected VmDAO getVmDao() {
+        return getDbFacade().getVmDao();
+    }
+
+    protected String generateOvfConfig(VM vm) {
+        return new OvfHelper().generateOvfConfigurationForVm(vm);
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfHelper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfHelper.java
index e1c644f..0e96c62 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfHelper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfHelper.java
@@ -4,10 +4,16 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.lang.StringUtils;
+import org.ovirt.engine.core.bll.utils.ClusterUtils;
+import org.ovirt.engine.core.bll.validator.DiskImagesValidator;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VMStatus;
+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.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.utils.ovf.OvfManager;
 import org.ovirt.engine.core.utils.ovf.OvfReaderException;
 
@@ -50,6 +56,57 @@
         return vm;
     }
 
+    public String generateOvfConfigurationForVm(VM vm) {
+        if (VMStatus.ImageLocked != vm.getStatus()) {
+            VmHandler.updateDisksFromDb(vm);
+            DiskImagesValidator validator = new 
DiskImagesValidator(vm.getDiskList());
+            if (validator.diskImagesNotLocked().isValid()) {
+                loadVmData(vm);
+                Long currentDbGeneration = 
getDbFacade().getVmStaticDao().getDbGeneration(vm.getId());
+                // currentDbGeneration can be null in case that the vm was 
deleted during the run of OvfDataUpdater.
+                if (currentDbGeneration != null && 
vm.getStaticData().getDbGeneration() == currentDbGeneration) {
+                    return buildMetadataDictionaryForVm(vm);
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Adds the given vm metadata to the given map
+     */
+    private String buildMetadataDictionaryForVm(VM vm) {
+        ArrayList<DiskImage> AllVmImages = new ArrayList<DiskImage>();
+        List<DiskImage> filteredDisks = 
ImagesHandler.filterImageDisks(vm.getDiskList(), false, true, true);
+
+        for (DiskImage diskImage : filteredDisks) {
+            List<DiskImage> images = 
ImagesHandler.getAllImageSnapshots(diskImage.getImageId(),
+                    diskImage.getImageTemplateId());
+            AllVmImages.addAll(images);
+        }
+
+        return ovfManager.ExportVm(vm, AllVmImages, 
ClusterUtils.getCompatibilityVersion(vm));
+    }
+
+    private void loadVmData(VM vm) {
+        if (vm.getInterfaces().isEmpty()) {
+            
vm.setInterfaces(getDbFacade().getVmNetworkInterfaceDao().getAllForVm(vm.getId()));
+        }
+        if (StringUtils.isEmpty(vm.getVmtName())) {
+            if (!Guid.Empty.equals(vm.getVmtGuid())) {
+                VmTemplate t = 
getDbFacade().getVmTemplateDao().get(vm.getVmtGuid());
+                vm.setVmtName(t.getName());
+            } else {
+                vm.setVmtName(VmTemplateHandler.BLANK_VM_TEMPLATE_NAME);
+            }
+        }
+    }
+
+    private DbFacade getDbFacade() {
+        return DbFacade.getInstance();
+    }
+
     public boolean isOvfTemplate(String ovfstring) {
         return ovfManager.IsOvfTemplate(ovfstring);
     }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQueryTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQueryTest.java
new file mode 100644
index 0000000..2ca18e4
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQueryTest.java
@@ -0,0 +1,78 @@
+package org.ovirt.engine.core.bll;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.queries.GetVmOvfByVmIdParameters;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.VmDAO;
+
+@RunWith(MockitoJUnitRunner.class)
+public class GetVmOvfByVmIdQueryTest extends 
AbstractUserQueryTest<GetVmOvfByVmIdParameters, 
GetVmOvfByVmIdQuery<GetVmOvfByVmIdParameters>> {
+
+    @Mock
+    private VmDAO vmDAO;
+
+    @Before
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        setUpDAOMocks();
+        doReturn("config").when(getQuery()).generateOvfConfig(any(VM.class));
+    }
+
+    private VM createVm(Guid existingVmId, long dbGeneration) {
+        VM vm = new VM();
+        vm.setId(existingVmId);
+
+        vm.setDbGeneration(dbGeneration);
+        return vm;
+    }
+
+    private void setUpDAOMocks() {
+        doReturn(vmDAO).when(getQuery()).getVmDao();
+    }
+
+    @Test
+    public void dbGenerationNotAsParametersDbGen() {
+        Guid id = Guid.newGuid();
+        long dbGeneration = 5;
+        VM vm = createVm(id, dbGeneration);
+        doReturn(vm).when(vmDAO).get(any(Guid.class), any(Guid.class), 
anyBoolean());
+        
when(getQueryParameters().getRequiredGeneration()).thenReturn(dbGeneration - 1);
+        GetVmOvfByVmIdQuery query = getQuery();
+        query.execute();
+        verify(query, never()).generateOvfConfig(any(VM.class));
+        assertFalse(query.getQueryReturnValue().getSucceeded());
+        assertNull(query.getQueryReturnValue().getReturnValue());
+    }
+
+    @Test
+    public void dbGenerationSameAsParametersDbGen() {
+        Guid id = Guid.newGuid();
+        long dbGeneration = 5;
+        VM vm = createVm(id, dbGeneration);
+        doReturn(vm).when(vmDAO).get(any(Guid.class), any(Guid.class), 
anyBoolean());
+        
when(getQueryParameters().getRequiredGeneration()).thenReturn(dbGeneration);
+        GetVmOvfByVmIdQuery query = getQuery();
+        query.execute();
+        verify(query, times(1)).generateOvfConfig(any(VM.class));
+        assertTrue(query.getQueryReturnValue().getSucceeded());
+        assertNotNull(query.getQueryReturnValue().getReturnValue());
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmOvfByVmIdParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmOvfByVmIdParameters.java
new file mode 100644
index 0000000..d14ac85
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmOvfByVmIdParameters.java
@@ -0,0 +1,24 @@
+package org.ovirt.engine.core.common.queries;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public class GetVmOvfByVmIdParameters extends IdQueryParameters {
+
+    long requiredGeneration;
+
+    public GetVmOvfByVmIdParameters(Guid id, long requiredGeneration) {
+        super(id);
+        this.requiredGeneration = requiredGeneration;
+    }
+
+    public GetVmOvfByVmIdParameters() {
+    }
+
+    public long getRequiredGeneration() {
+        return requiredGeneration;
+    }
+
+    public void setRequiredGeneration(long requiredGeneration) {
+        this.requiredGeneration = requiredGeneration;
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
index 3dc50bc..da459ca 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
@@ -13,6 +13,7 @@
     GetVmCustomProperties(VdcQueryAuthType.User),
     GetVmConfigurationBySnapshot(VdcQueryAuthType.User),
     GetVmFromConfiguration(VdcQueryAuthType.User),
+    GetVmOvfByVmId(VdcQueryAuthType.User),
     GetSnapshotBySnapshotId(VdcQueryAuthType.User),
     GetVmsByDiskGuid,
     GetVmPayload(VdcQueryAuthType.User),
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
index ec29494..54187bd 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
@@ -369,6 +369,7 @@
     protected VM doPopulate(VM model, 
org.ovirt.engine.core.common.businessentities.VM entity) {
         parent.setConsoleDevice(model);
         parent.setVirtioScsiController(model);
+        parent.setVmOvfConfiguration(model, entity);
         return model;
     }
 
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
index cf2d369..aa36aa0 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
@@ -6,6 +6,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
 
@@ -13,9 +14,9 @@
 import org.ovirt.engine.api.common.util.DetailHelper.Detail;
 import org.ovirt.engine.api.model.Action;
 import org.ovirt.engine.api.model.Certificate;
-import org.ovirt.engine.api.model.Console;
 import org.ovirt.engine.api.model.Configuration;
 import org.ovirt.engine.api.model.ConfigurationType;
+import org.ovirt.engine.api.model.Console;
 import org.ovirt.engine.api.model.Disk;
 import org.ovirt.engine.api.model.Disks;
 import org.ovirt.engine.api.model.Display;
@@ -50,6 +51,7 @@
 import org.ovirt.engine.core.common.interfaces.SearchType;
 import org.ovirt.engine.core.common.osinfo.OsRepository;
 import 
org.ovirt.engine.core.common.queries.GetVmFromConfigurationQueryParameters;
+import org.ovirt.engine.core.common.queries.GetVmOvfByVmIdParameters;
 import org.ovirt.engine.core.common.queries.GetVmTemplateParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.NameQueryParameters;
@@ -540,6 +542,21 @@
         vm.getMemoryPolicy().setBallooning(balloonEnabled);
     }
 
+    protected VM setVmOvfConfiguration (VM model, 
org.ovirt.engine.core.common.businessentities.VM entity) {
+        VdcQueryReturnValue queryReturnValue =
+                runQuery(VdcQueryType.GetVmOvfByVmId,
+                        new GetVmOvfByVmIdParameters(entity.getId(), 
entity.getDbGeneration()));
+
+        if (queryReturnValue.getSucceeded() && 
queryReturnValue.getReturnValue() != null) {
+            String configuration = queryReturnValue.getReturnValue();
+            return VmMapper.map(configuration,
+                    ConfigurationType.OVF,
+                    model);
+        }
+
+        return model;
+    }
+
     protected void setConsoleDevice(VM model) {
         if (!model.isSetConsole()) {
             model.setConsole(new Console());
@@ -585,6 +602,7 @@
         setConsoleDevice(model);
         setVirtioScsiController(model);
         setCertificateInfo(model);
+        setVmOvfConfiguration(model, entity);
         return model;
     }
 
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java
index 53f9f2a..e3b2dae 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java
@@ -63,6 +63,7 @@
 import org.ovirt.engine.core.common.businessentities.VmStatistics;
 import org.ovirt.engine.core.common.interfaces.SearchType;
 import org.ovirt.engine.core.common.osinfo.OsRepository;
+import org.ovirt.engine.core.common.queries.GetVmOvfByVmIdParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.NameQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -168,7 +169,8 @@
             populates.add("true");
             
expect(httpHeaders.getRequestHeader(BackendResource.POPULATE)).andReturn(populates).anyTimes();
             setUpGetConsoleExpectations(new int[]{0});
-            setUpGetVirtioScsiExpectations(new int[] {0});
+            setUpGetVirtioScsiExpectations(new int[]{0});
+            setUpGetVmOvfExpectations(new int[]{0});
         }
         setUpGetEntityExpectations(1);
         setUpGetPayloadExpectations(0, 1);
@@ -209,7 +211,8 @@
         setUpGetPayloadExpectations(0, 2);
         setUpGetBallooningExpectations();
         setUpGetBallooningExpectations();
-        setUpGetConsoleExpectations(new int[] {0});
+        setUpGetConsoleExpectations(new int[]{0});
+        setUpGetVmOvfExpectations(new int[]{0});
         setUpGetVirtioScsiExpectations(new int[] {0});
         setUriInfo(setUpActionExpectations(VdcActionType.UpdateVm,
                                            VmManagementParametersBase.class,
@@ -235,7 +238,8 @@
 
         setUpGetBallooningExpectations();
         setUpGetBallooningExpectations();
-        setUpGetConsoleExpectations(new int[] {0});
+        setUpGetConsoleExpectations(new int[]{0});
+        setUpGetVmOvfExpectations(new int[]{0});
         setUpGetVirtioScsiExpectations(new int[] {0});
 
         setUriInfo(setUpActionExpectations(VdcActionType.UpdateVm,
@@ -277,6 +281,7 @@
         setUpGetBallooningExpectations();
         setUpGetBallooningExpectations();
         setUpGetConsoleExpectations(new int[]{0});
+        setUpGetVmOvfExpectations(new int[]{0});
         setUpGetVirtioScsiExpectations(new int[] {0});
         setUpGetEntityExpectations("Hosts: name=" + NAMES[1],
                 SearchType.VDS,
@@ -313,7 +318,8 @@
         setUpGetPayloadExpectations(0, 2);
         setUpGetBallooningExpectations();
         setUpGetBallooningExpectations();
-        setUpGetConsoleExpectations(new int[] {0});
+        setUpGetConsoleExpectations(new int[]{0});
+        setUpGetVmOvfExpectations(new int[]{0});
         setUpGetVirtioScsiExpectations(new int[] {0});
         setUriInfo(setUpActionExpectations(VdcActionType.ChangeVMCluster,
                                            ChangeVMClusterParameters.class,
@@ -955,4 +961,13 @@
         }
     }
 
+    private void setUpGetVmOvfExpectations(int ... idxs) throws Exception {
+        for (int i = 0; i < idxs.length; i++) {
+            setUpGetEntityExpectations(VdcQueryType.GetVmOvfByVmId,
+                    GetVmOvfByVmIdParameters.class,
+                    new String[] { "Id", "RequiredGeneration" },
+                    new Object[] { GUIDS[idxs[i]], 0L },
+                    "configuration");
+        }
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
index 9b4602d..c5087a1 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
@@ -53,6 +53,7 @@
 import org.ovirt.engine.core.common.businessentities.VmType;
 import org.ovirt.engine.core.common.interfaces.SearchType;
 import 
org.ovirt.engine.core.common.queries.GetVmFromConfigurationQueryParameters;
+import org.ovirt.engine.core.common.queries.GetVmOvfByVmIdParameters;
 import org.ovirt.engine.core.common.queries.GetVmTemplateParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -235,6 +236,7 @@
         setUpGetBallooningExpectations(1, 0);
         setUpGetConsoleExpectations(new int[]{0});
         setUpGetVirtioScsiExpectations(new int[]{0});
+        setUpGetVmOvfExpectations(new int[]{0});
         setUpGetCertuficateExpectations(1, 0);
         setUpEntityQueryExpectations(VdcQueryType.GetVdsGroupByVdsGroupId,
                 IdQueryParameters.class,
@@ -282,6 +284,7 @@
         setUpHttpHeaderExpectations("Expect", "201-created");
         setUpGetPayloadExpectations(2, 0);
         setUpGetConsoleExpectations(new int[]{0, 0});
+        setUpGetVmOvfExpectations(new int[]{0, 0});
         setUpGetVirtioScsiExpectations(new int[]{0, 0});
         setUpGetBallooningExpectations(2, 0);
         setUpGetCertuficateExpectations(2, 0);
@@ -338,6 +341,7 @@
         setUpGetPayloadExpectations(2, 0);
         setUpGetBallooningExpectations(2, 0);
         setUpGetConsoleExpectations(new int[]{0, 0});
+        setUpGetVmOvfExpectations(new int[]{0, 0});
         setUpGetVirtioScsiExpectations(new int[]{0, 0});
         setUpGetCertuficateExpectations(2, 0);
         setUpEntityQueryExpectations(VdcQueryType.GetVmByVmId,
@@ -389,6 +393,7 @@
         setUpGetPayloadExpectations(2, 0);
         setUpGetBallooningExpectations(2, 0);
         setUpGetConsoleExpectations(new int[]{0, 0});
+        setUpGetVmOvfExpectations(new int[]{0, 0});
         setUpGetVirtioScsiExpectations(new int[]{0, 0});
         setUpGetCertuficateExpectations(2, 0);
         setUpHttpHeaderExpectations("Expect", "201-created");
@@ -487,6 +492,7 @@
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
         setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
         setUpGetCertuficateExpectations(1, 2);
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
@@ -535,6 +541,7 @@
         setUpGetBallooningExpectations(1, 2);
         setUpGetCertuficateExpectations(1, 2);
         setUpGetConsoleExpectations(new int[]{0, 2});
+        setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
         setUpEntityQueryExpectations(VdcQueryType.GetVmConfigurationBySnapshot,
                 IdQueryParameters.class,
@@ -569,6 +576,7 @@
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
         setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
         setUpGetCertuficateExpectations(1, 2);
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
@@ -607,6 +615,7 @@
         setUpGetBallooningExpectations(1, 2);
         setUpGetCertuficateExpectations(1, 2);
         setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
                                      GetVmTemplateParameters.class,
@@ -643,6 +652,7 @@
         setUpGetBallooningExpectations(1, 2);
         setUpGetCertuficateExpectations(1, 2);
         setUpGetConsoleExpectations(new int[]{2});
+        setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
         VM model = createModel(null);
         org.ovirt.engine.core.common.businessentities.VM returnedVM = 
getEntity(2);
@@ -680,6 +690,7 @@
         setUpGetBallooningExpectations(1, 2);
         setUpGetCertuficateExpectations(1, 2);
         setUpGetConsoleExpectations(new int[]{2});
+        setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
         VM model = createModel(null);
         org.ovirt.engine.core.common.businessentities.VM returnedVM = 
getEntity(2);
@@ -774,6 +785,7 @@
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
         setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
         setUpGetCertuficateExpectations(1, 2);
         setUpGetEntityExpectations("Hosts: name=" + NAMES[1],
@@ -825,6 +837,7 @@
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
         setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
         setUpGetCertuficateExpectations(1, 2);
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
@@ -865,6 +878,7 @@
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
         setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
         setUpGetCertuficateExpectations(1, 2);
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
@@ -926,6 +940,7 @@
         setUpGetBallooningExpectations(1, 2);
         setUpGetCertuficateExpectations(1, 2);
         setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
                                      GetVmTemplateParameters.class,
@@ -977,6 +992,7 @@
         setUpGetCertuficateExpectations(1, 2);
 
         setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
                                      GetVmTemplateParameters.class,
@@ -1047,6 +1063,7 @@
             setUpGetPayloadExpectations(3);
             setUpGetBallooningExpectations(3);
             setUpGetConsoleExpectations(new int[]{0, 1, 2});
+            setUpGetVmOvfExpectations(new int[]{0, 1, 2});
             setUpGetVirtioScsiExpectations(new int[]{0, 1, 2});
             setUpGetCertuficateExpectations(3);
         }
@@ -1065,6 +1082,7 @@
         setUpGetPayloadExpectations(3);
         setUpGetBallooningExpectations(3);
         setUpGetConsoleExpectations(new int[]{0, 1, 2});
+        setUpGetVmOvfExpectations(new int[]{0, 1, 2});
         setUpGetVirtioScsiExpectations(new int[]{0, 1, 2});
         setUpGetCertuficateExpectations(3);
         setUpQueryExpectations("");
@@ -1412,4 +1430,13 @@
         }
     }
 
+    private void setUpGetVmOvfExpectations(int ... idxs) throws Exception {
+        for (int i = 0; i < idxs.length; i++) {
+            setUpGetEntityExpectations(VdcQueryType.GetVmOvfByVmId,
+                    GetVmOvfByVmIdParameters.class,
+                    new String[] { "Id", "RequiredGeneration" },
+                    new Object[] { GUIDS[idxs[i]], 0L },
+                    "configuration");
+        }
+    }
 }
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
index 4842fa0..1092148 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
@@ -17,6 +17,7 @@
 import org.ovirt.engine.api.model.CPU;
 import org.ovirt.engine.api.model.CloudInit;
 import org.ovirt.engine.api.model.Cluster;
+import org.ovirt.engine.api.model.Configuration;
 import org.ovirt.engine.api.model.ConfigurationType;
 import org.ovirt.engine.api.model.CpuMode;
 import org.ovirt.engine.api.model.CpuTopology;
@@ -703,6 +704,14 @@
         }
     }
 
+    public static VM map(String configuration, ConfigurationType type, VM vm) {
+        vm.setInitialization(new Initialization());
+        vm.getInitialization().setConfiguration(new Configuration());
+        vm.getInitialization().getConfiguration().setData(configuration);
+        vm.getInitialization().getConfiguration().setType(type.value());
+        return vm;
+    }
+
     @Mapping(from = org.ovirt.engine.api.model.VmDeviceType.class, to = 
VmDeviceType.class)
     public static VmDeviceType map(org.ovirt.engine.api.model.VmDeviceType 
deviceType, VmDeviceType template) {
         switch (deviceType) {
diff --git 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
index b3ac68c..5ec55ad 100644
--- 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
+++ 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
@@ -162,6 +162,20 @@
         assertEquals(payload.getVolumeId(), vmPayload.getVolumeId());
     }
 
+
+    @Test
+    public void ovfConfigurationMap() {
+        String ovfConfig = "config";
+        ConfigurationType configurationType = ConfigurationType.OVF;
+        VM model = new VM();
+        VmMapper.map(ovfConfig, ConfigurationType.OVF, model);
+        assertNotNull(model.getInitialization());
+        assertNotNull(model.getInitialization().getConfiguration());
+        assertEquals(model.getInitialization().getConfiguration().getData(), 
ovfConfig);
+        
assertEquals(ConfigurationType.fromValue(model.getInitialization().getConfiguration().getType()),
+                configurationType);
+    }
+
     @Test
     public void testGustIp() {
         org.ovirt.engine.core.common.businessentities.VM vm = new 
org.ovirt.engine.core.common.businessentities.VM();


-- 
To view, visit http://gerrit.ovirt.org/24410
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5cbcd666519ffd138fd3efd4e130495529eaec0f
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.4
Gerrit-Owner: Liron Ar <lara...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to