Frank Kobzik has uploaded a new change for review. Change subject: restapi: adjust api to new graphics representation ......................................................................
restapi: adjust api to new graphics representation This patch changes REST API to internally use (new) graphics device representation. Backwards compatibility is preserved (the interface for clients is unchanged). Change-Id: Ibed6bbbce8a36dff82a0903c3478cfb656589fb4 Signed-off-by: Frantisek Kobzik <[email protected]> Bug-Url: https://bugzilla.redhat.com/1033547 --- M backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DisplayType.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.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/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateBasedResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesBasedResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResourceTest.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/TemplateMapper.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/TemplateMapperTest.java M backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java 21 files changed, 478 insertions(+), 131 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/81/35281/1 diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DisplayType.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DisplayType.java index b502f01..a3bb412 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DisplayType.java +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DisplayType.java @@ -16,6 +16,8 @@ package org.ovirt.engine.api.model; +import org.ovirt.engine.core.common.businessentities.GraphicsType; + public enum DisplayType { VNC, SPICE; @@ -30,4 +32,24 @@ return null; } } + + public static DisplayType fromGraphicsType(GraphicsType graphicsType) { + if (graphicsType == GraphicsType.SPICE) { + return DisplayType.SPICE; + } else if (graphicsType == GraphicsType.VNC) { + return DisplayType.VNC; + } + return null; + } + + public GraphicsType toGraphicsType() { + switch (this) { + case SPICE: + return GraphicsType.SPICE; + case VNC: + return GraphicsType.VNC; + default: + return null; + } + } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java index 08b9285..e9e3a58 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java @@ -32,13 +32,18 @@ static final String[] SUB_COLLECTIONS = { "nics", "watchdogs" }; - public BackendInstanceTypeResource(String id) { + private final BackendInstanceTypesResource parent; + + public BackendInstanceTypeResource(String id, BackendInstanceTypesResource parent) { super(id, InstanceType.class, org.ovirt.engine.core.common.businessentities.InstanceType.class, SUB_COLLECTIONS); + this.parent = parent; } @Override public InstanceType get() { - return performGet(VdcQueryType.GetVmTemplate, new GetVmTemplateParameters(guid)); + InstanceType instanceType = performGet(VdcQueryType.GetVmTemplate, new GetVmTemplateParameters(guid)); + parent.adjustDisplayData(instanceType); + return instanceType; } @Override @@ -110,6 +115,8 @@ updateParams.setRngDevice(RngDeviceMapper.map(incoming.getRngDevice(), null)); } + BackendTemplatesResource.setGraphicsToParams(incoming, updateParams); + return getMapper(modelType, UpdateVmTemplateParameters.class).map(incoming, updateParams); } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java index 8afcdb0..3765bb0 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java @@ -1,6 +1,7 @@ package org.ovirt.engine.api.restapi.resource; import org.ovirt.engine.api.model.Console; +import org.ovirt.engine.api.model.DisplayType; import org.ovirt.engine.api.model.InstanceType; import org.ovirt.engine.api.model.InstanceTypes; import org.ovirt.engine.api.model.VirtIOSCSI; @@ -11,6 +12,7 @@ import org.ovirt.engine.core.common.action.AddVmTemplateParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VmTemplateParametersBase; +import org.ovirt.engine.core.common.businessentities.GraphicsType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmEntityType; import org.ovirt.engine.core.common.businessentities.VmRngDevice; @@ -84,7 +86,7 @@ @Override @SingleEntityResource public InstanceTypeResource getInstanceTypeSubResource(String id) { - return inject(new BackendInstanceTypeResource(id)); + return inject(new BackendInstanceTypeResource(id, this)); } @Override @@ -95,7 +97,9 @@ protected InstanceTypes mapCollection(List<org.ovirt.engine.core.common.businessentities.InstanceType> entities) { InstanceTypes collection = new InstanceTypes(); for (org.ovirt.engine.core.common.businessentities.InstanceType entity : entities) { - collection.getInstanceTypes().add(addLinks(populate(map(entity), entity))); + InstanceType instanceType = map(entity); + adjustDisplayData(instanceType); + collection.getInstanceTypes().add(addLinks(populate(instanceType, entity))); } return collection; } @@ -133,4 +137,26 @@ "GetConsoleDevices", true); } + + /** + * Sets static display info (derived from graphics device) to the Instance Type. + * Serves for BC purposes as VM can have more graphics devices, but old restapi allows us to set only one. + * If there are multiple graphics, SPICE is preferred. + * + * @param instanceType + */ + public void adjustDisplayData(InstanceType instanceType) { + if (!instanceType.getDisplay().isSetType()) { + List<GraphicsType> graphicsTypes = VmHelper.getInstance().getGraphicsTypesForEntity(new Guid(instanceType.getId())); + + if (graphicsTypes.contains(GraphicsType.SPICE)) { + instanceType.getDisplay().setType(DisplayType.SPICE.value()); + } else if (graphicsTypes.contains(GraphicsType.VNC)) { + instanceType.getDisplay().setType(DisplayType.VNC.value()); + } else { + instanceType.setDisplay(null); + } + } + } + } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java index b174f04..d5cbf7a 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java @@ -45,13 +45,18 @@ static final String[] SUB_COLLECTIONS = { "disks", "nics", "cdroms", "tags", "permissions", "watchdogs" }; - public BackendTemplateResource(String id) { + private final BackendTemplatesResource parent; + + public BackendTemplateResource(String id, BackendTemplatesResource parent) { super(id, Template.class, VmTemplate.class, SUB_COLLECTIONS); + this.parent = parent; } @Override public Template get() { - return performGet(VdcQueryType.GetVmTemplate, new GetVmTemplateParameters(guid)); + Template template = performGet(VdcQueryType.GetVmTemplate, new GetVmTemplateParameters(guid)); + parent.adjustDisplayData(template); + return template; } @Override @@ -133,6 +138,9 @@ params.setUpdateRngDevice(true); params.setRngDevice(RngDeviceMapper.map(incoming.getRngDevice(), null)); } + + BackendTemplatesResource.setGraphicsToParams(incoming, params); + return getMapper(modelType, UpdateVmTemplateParameters.class).map(incoming, params); } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java index 337012b..d076caf 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java @@ -9,6 +9,7 @@ import org.ovirt.engine.api.model.Console; import org.ovirt.engine.api.model.Disk; +import org.ovirt.engine.api.model.DisplayType; import org.ovirt.engine.api.model.Template; import org.ovirt.engine.api.model.Templates; import org.ovirt.engine.api.model.VM; @@ -23,6 +24,8 @@ import org.ovirt.engine.core.common.action.VmTemplateParametersBase; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.Entities; +import org.ovirt.engine.core.common.businessentities.GraphicsDevice; +import org.ovirt.engine.core.common.businessentities.GraphicsType; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VmInit; import org.ovirt.engine.core.common.businessentities.VmRngDevice; @@ -61,7 +64,7 @@ @Override @SingleEntityResource public TemplateResource getTemplateSubResource(String id) { - return inject(new BackendTemplateResource(id)); + return inject(new BackendTemplateResource(id, this)); } @Override @@ -103,6 +106,8 @@ params.setUpdateRngDevice(true); params.setRngDevice(RngDeviceMapper.map(template.getRngDevice(), null)); } + + setGraphicsToParams(template, params); boolean isDomainSet = false; if (template.isSetStorageDomain() && template.getStorageDomain().isSetId()) { @@ -172,7 +177,9 @@ Templates collection = new Templates(); for (VmTemplate entity : entities) { - collection.getTemplates().add(addLinks(populate(map(entity), entity))); + Template template = map(entity); + adjustDisplayData(template); + collection.getTemplates().add(addLinks(populate(template, entity))); } return collection; } @@ -242,4 +249,47 @@ "GetConsoleDevices", true); } + + /** + * Sets static display info (derived from graphics device) to the Template. + * Serves for BC purposes as VM can have more graphics devices, but old restapi allows us to set only one. + * If there are multiple graphics, SPICE is preferred. + * + * @param template + */ + protected void adjustDisplayData(Template template) { + if (!template.getDisplay().isSetType()) { + List<GraphicsType> graphicsTypes = VmHelper.getInstance().getGraphicsTypesForEntity(new Guid(template.getId())); + + if (graphicsTypes.contains(GraphicsType.SPICE)) { + template.getDisplay().setType(DisplayType.SPICE.value()); + } else if (graphicsTypes.contains(GraphicsType.VNC)) { + template.getDisplay().setType(DisplayType.VNC.value()); + } else { + template.setDisplay(null); + } + } + } + + /** + * Set data about graphics from (REST) Template to parameters. + * @param template - template that contains graphics data + * @param params - parameters to be updated with graphics data + */ + public static void setGraphicsToParams(Template template, VmTemplateParametersBase params) { + if (template.isSetDisplay() && template.getDisplay().isSetType()) { + DisplayType newDisplayType = DisplayType.fromValue(template.getDisplay().getType()); + + if (newDisplayType != null) { + for (GraphicsType graphicsType : GraphicsType.values()) { + params.getGraphicsDevices().put(graphicsType, null); // reset graphics devices + } + + GraphicsType newGraphicsType = newDisplayType.toGraphicsType(); + params.getGraphicsDevices().put(newGraphicsType, + new GraphicsDevice(newGraphicsType.getCorrespondingDeviceType())); + } + } + } + } 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 fd4bfa6..f8279a3 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 @@ -108,6 +108,7 @@ } else { vm = performGet(VdcQueryType.GetVmByVmId, new IdQueryParameters(guid)); } + parent.adjustDisplayData(vm); return removeRestrictedInfo(vm); } @@ -537,6 +538,9 @@ params.setUpdateRngDevice(true); params.setRngDevice(RngDeviceMapper.map(incoming.getRngDevice(), null)); } + + BackendVmsResource.setGraphicsToParams(incoming, params); + if (incoming.isSetInstanceType() && (incoming.getInstanceType().isSetId() || incoming.getInstanceType().isSetName())) { updated.setInstanceTypeId(lookupInstanceTypeId(incoming.getInstanceType())); } else if (incoming.isSetInstanceType()) { 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 d37afe2..b3084b3 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,10 +6,8 @@ import java.util.List; import java.util.Map; import java.util.Set; - import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; - import org.ovirt.engine.api.common.util.DetailHelper; import org.ovirt.engine.api.common.util.DetailHelper.Detail; import org.ovirt.engine.api.model.Action; @@ -20,6 +18,7 @@ import org.ovirt.engine.api.model.Disk; import org.ovirt.engine.api.model.Disks; import org.ovirt.engine.api.model.Display; +import org.ovirt.engine.api.model.DisplayType; import org.ovirt.engine.api.model.Initialization; import org.ovirt.engine.api.model.MemoryPolicy; import org.ovirt.engine.api.model.Nics; @@ -47,6 +46,8 @@ import org.ovirt.engine.core.common.action.VmManagementParametersBase; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.Entities; +import org.ovirt.engine.core.common.businessentities.GraphicsDevice; +import org.ovirt.engine.core.common.businessentities.GraphicsType; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VdsStatic; import org.ovirt.engine.core.common.businessentities.VmInit; @@ -119,9 +120,7 @@ staticVm.setOsId(OsRepository.AUTO_SELECT_OS); } - if (Guid.Empty.equals(templateId) && !vm.isSetDisplay()) { - staticVm.setDefaultDisplayType(null); - } + staticVm.setDefaultDisplayType(null); // let backend decide based on osinfo staticVm.setUsbPolicy(VmMapper.getUsbPolicyOnCreate(vm.getUsb(), cluster.getcompatibility_version())); @@ -297,6 +296,8 @@ params.setRngDevice(RngDeviceMapper.map(vm.getRngDevice(), null)); } + setGraphicsToParams(vm, params); + return performCreate(VdcActionType.AddVmFromSnapshot, params, new QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class)); @@ -319,11 +320,34 @@ params.setRngDevice(RngDeviceMapper.map(vm.getRngDevice(), null)); } + setGraphicsToParams(vm, params); + params.setMakeCreatorExplicitOwner(shouldMakeCreatorExplicitOwner()); setupCloneTemplatePermissions(vm, params); return performCreate(VdcActionType.AddVmFromTemplate, params, new QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class)); + } + + /** + * Set data about graphics from (REST) VM to parameters. + * @param vm - vm that contains graphics data + * @param params - parameters to be updated with graphics data + */ + public static void setGraphicsToParams(VM vm, VmManagementParametersBase params) { + if (vm.isSetDisplay() && vm.getDisplay().isSetType()) { + DisplayType newDisplayType = DisplayType.fromValue(vm.getDisplay().getType()); + + if (newDisplayType != null) { + for (GraphicsType graphicsType : GraphicsType.values()) { + params.getGraphicsDevices().put(graphicsType, null); // reset graphics devices + } + + GraphicsType newGraphicsType = newDisplayType.toGraphicsType(); + params.getGraphicsDevices().put(newGraphicsType, + new GraphicsDevice(newGraphicsType.getCorrespondingDeviceType())); + } + } } private HashMap<Guid, DiskImage> getDisksToClone(Disks disks, Guid templateId) { @@ -382,6 +406,8 @@ params.setRngDevice(RngDeviceMapper.map(vm.getRngDevice(), null)); } + setGraphicsToParams(vm, params); + return performCreate(VdcActionType.AddVm, params, new QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class)); @@ -412,6 +438,8 @@ params.setUpdateRngDevice(true); params.setRngDevice(RngDeviceMapper.map(vm.getRngDevice(), null)); } + + setGraphicsToParams(vm, params); return performCreate(VdcActionType.AddVmFromScratch, params, @@ -505,6 +533,9 @@ VMs collection = new VMs(); for (org.ovirt.engine.core.common.businessentities.VM entity : entities) { VM vm = map(entity); + + adjustDisplayData(vm); + // Filtered users are not allowed to view host related information if (isFiltered) { removeRestrictedInfoFromVM(vm); @@ -514,6 +545,27 @@ return collection; } + /** + * Sets static display info (derived from graphics device) to the VM. + * Serves for BC purposes as VM can have more graphics devices, but old restapi allows us to set only one. + * If there are multiple graphics, SPICE is preferred. + * + * @param vm + */ + protected void adjustDisplayData(VM vm) { + if (!vm.getDisplay().isSetType()) { // non running/paused vm + List<GraphicsType> graphicsTypes = VmHelper.getInstance().getGraphicsTypesForEntity(new Guid(vm.getId())); + + if (graphicsTypes.contains(GraphicsType.SPICE)) { + vm.getDisplay().setType(DisplayType.SPICE.value()); + } else if (graphicsTypes.contains(GraphicsType.VNC)) { + vm.getDisplay().setType(DisplayType.VNC.value()); + } else { + vm.setDisplay(null); + } + } + } + protected void setPayload(VM vm) { try { VmPayload payload = getEntity(VmPayload.class, diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java index 33d7901..d2ad4fa 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java @@ -1,5 +1,8 @@ package org.ovirt.engine.api.restapi.util; +import java.util.ArrayList; +import org.ovirt.engine.core.common.businessentities.GraphicsDevice; +import org.ovirt.engine.core.common.businessentities.GraphicsType; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; @@ -24,4 +27,25 @@ new IdQueryParameters(id), "GetVirtioScsiControllers", true); } + + /** + * Returs graphics types of graphics devices of entity with given id. + */ + public List<GraphicsType> getGraphicsTypesForEntity(Guid id) { + List<GraphicsType> graphicsTypes = new ArrayList<>(); + + List<GraphicsDevice> graphicsDevices = getEntity(List.class, + VdcQueryType.GetGraphicsDevices, + new IdQueryParameters(id), + "GetGraphicsDevices", true); + + if (graphicsDevices != null) { + for (GraphicsDevice graphicsDevice : graphicsDevices) { + graphicsTypes.add(graphicsDevice.getGraphicsType()); + } + } + + return graphicsTypes; + } + } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResourceTest.java index 424d073..026d5cd 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResourceTest.java @@ -11,7 +11,7 @@ extends BackendTemplateBasedResourceTest<InstanceType, org.ovirt.engine.core.common.businessentities.InstanceType, BackendInstanceTypeResource> { public BackendInstanceTypeResourceTest() { - super(new BackendInstanceTypeResource(GUIDS[0].toString())); + super(new BackendInstanceTypeResource(GUIDS[0].toString(), new BackendInstanceTypesResource())); } @Override diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResourceTest.java index c196b28..04bc91d 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResourceTest.java @@ -86,4 +86,16 @@ assertEquals(4, model.getCpu().getTopology().getCores().intValue()); assertEquals(2, model.getCpu().getTopology().getSockets().intValue()); } + + @Override + public void testQuery() throws Exception { + setUpGetGraphicsExpectations(3); + super.testQuery(); + } + + @Override + public void testList() throws Exception { + setUpGetGraphicsExpectations(3); + super.testList(); + } } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateBasedResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateBasedResourceTest.java index 6f641a1..dd8242c 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateBasedResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateBasedResourceTest.java @@ -1,11 +1,13 @@ package org.ovirt.engine.api.restapi.resource; +import java.util.Arrays; import org.junit.Test; import org.ovirt.engine.api.model.Template; import org.ovirt.engine.api.resource.UpdatableResource; import org.ovirt.engine.api.restapi.util.VmHelper; import org.ovirt.engine.core.common.action.UpdateVmTemplateParameters; import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.businessentities.GraphicsDevice; import org.ovirt.engine.core.common.queries.GetVmTemplateParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; @@ -13,6 +15,8 @@ import javax.ws.rs.WebApplicationException; import java.util.ArrayList; import java.util.List; +import org.ovirt.engine.core.common.utils.VmDeviceType; + import static org.easymock.EasyMock.expect; @@ -37,7 +41,7 @@ public void testBadGuid() throws Exception { control.replay(); try { - new BackendTemplateResource("foo"); + new BackendTemplateResource("foo", new BackendTemplatesResource()); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyNotFoundException(wae); @@ -60,6 +64,7 @@ @Test public void testGet() throws Exception { setUriInfo(setUpBasicUriExpectations()); + setUpGetGraphicsExpectations(1); setUpGetEntityExpectations(1); control.replay(); @@ -102,6 +107,7 @@ setUpGetVirtioScsiExpectations(new int[]{0}); setUpGetRngDeviceExpectations(new int [] {0}); } + setUpGetGraphicsExpectations(1); control.replay(); R response = resource.get(); @@ -196,4 +202,14 @@ } protected abstract R getRestModel(int index); + + protected void setUpGetGraphicsExpectations(int times) throws Exception { + for (int i = 0; i < times; i++) { + setUpGetEntityExpectations(VdcQueryType.GetGraphicsDevices, + IdQueryParameters.class, + new String[]{"Id"}, + new Object[]{GUIDS[i]}, + Arrays.asList(new GraphicsDevice(VmDeviceType.SPICE))); + } + } } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResourceTest.java index 6d304fb..167cfc8 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResourceTest.java @@ -30,7 +30,7 @@ extends BackendTemplateBasedResourceTest<Template, VmTemplate, BackendTemplateResource> { public BackendTemplateResourceTest() { - super(new BackendTemplateResource(GUIDS[0].toString())); + super(new BackendTemplateResource(GUIDS[0].toString(), new BackendTemplatesResource())); } public void testUpdate() throws Exception { diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesBasedResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesBasedResourceTest.java index 2388f51..7cab07d 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesBasedResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesBasedResourceTest.java @@ -1,6 +1,7 @@ package org.ovirt.engine.api.restapi.resource; +import java.util.Arrays; import org.junit.Test; import org.ovirt.engine.api.model.Template; import org.ovirt.engine.api.restapi.util.VmHelper; @@ -9,6 +10,7 @@ import org.ovirt.engine.core.common.action.VmTemplateParametersBase; import org.ovirt.engine.core.common.businessentities.AsyncTaskStatus; import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum; +import org.ovirt.engine.core.common.businessentities.GraphicsDevice; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.queries.GetVmTemplateParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; @@ -19,6 +21,8 @@ import javax.ws.rs.core.UriInfo; import java.util.ArrayList; import java.util.List; +import org.ovirt.engine.core.common.utils.VmDeviceType; + import static org.easymock.EasyMock.expect; @@ -40,6 +44,7 @@ @Test public void testRemove() throws Exception { setUpGetEntityExpectations(0); + setUpGetGraphicsExpectations(1); setUriInfo(setUpActionExpectations(VdcActionType.RemoveVmTemplate, VmTemplateParametersBase.class, new String[] { "VmTemplateId" }, @@ -78,6 +83,7 @@ protected void doTestBadRemove(boolean canDo, boolean success, String detail) throws Exception { setUpGetEntityExpectations(0); + setUpGetGraphicsExpectations(1); setUriInfo(setUpActionExpectations(VdcActionType.RemoveVmTemplate, VmTemplateParametersBase.class, new String[] { "VmTemplateId" }, @@ -168,6 +174,7 @@ setUpGetRngDeviceExpectations(new int[] {0, 1, 2}); } + setUpGetGraphicsExpectations(3); setUpQueryExpectations(""); collection.setUriInfo(uriInfo); verifyCollection(getCollection()); @@ -203,6 +210,16 @@ getEntity(index)); } + protected void setUpGetGraphicsExpectations(int times) throws Exception { + for (int i = 0; i < times; i++) { + setUpGetEntityExpectations(VdcQueryType.GetGraphicsDevices, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[i] }, + Arrays.asList(new GraphicsDevice(VmDeviceType.SPICE))); + } + } + protected abstract Response doAdd(R model); protected abstract R getRestModel(int index); diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java index 09a581d..a19bc57 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java @@ -177,6 +177,20 @@ } @Override + @Test + public void testQuery() throws Exception { + setUpGetGraphicsExpectations(3); + super.testQuery(); + } + + @Override + @Test + public void testList() throws Exception { + setUpGetGraphicsExpectations(3); + super.testList(); + } + + @Override protected Response doAdd(Template model) { return collection.add(model); } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResourceTest.java index 18ba214..9d9e1c2 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResourceTest.java @@ -62,7 +62,7 @@ expect(entity.getDescription()).andReturn(DESCRIPTIONS[1]).anyTimes(); expect(entity.getNumOfCpus()).andReturn(8).anyTimes(); expect(entity.getNumOfSockets()).andReturn(2).anyTimes(); - expect(entity.getDefaultDisplayType()).andReturn(DisplayType.cirrus).anyTimes(); // todo restapi follow up + expect(entity.getDefaultDisplayType()).andReturn(DisplayType.vga).anyTimes(); expect(entity.getNumOfMonitors()).andReturn(2).anyTimes(); expect(entity.getVmType()).andReturn(VmType.Server).anyTimes(); return entity; 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 f2f252a..9677168 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 @@ -8,6 +8,8 @@ import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -26,6 +28,8 @@ import org.ovirt.engine.api.model.CdRoms; import org.ovirt.engine.api.model.Cluster; import org.ovirt.engine.api.model.CreationStatus; +import org.ovirt.engine.api.model.Display; +import org.ovirt.engine.api.model.DisplayType; import org.ovirt.engine.api.model.File; import org.ovirt.engine.api.model.Floppies; import org.ovirt.engine.api.model.Floppy; @@ -62,6 +66,8 @@ import org.ovirt.engine.core.common.businessentities.AsyncTaskStatus; import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum; import org.ovirt.engine.core.common.businessentities.BootSequence; +import org.ovirt.engine.core.common.businessentities.GraphicsDevice; +import org.ovirt.engine.core.common.businessentities.GraphicsType; import org.ovirt.engine.core.common.businessentities.SnapshotActionEnum; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSGroup; @@ -134,6 +140,7 @@ setUpGetEntityExpectations(1); setUpGetPayloadExpectations(0, 1); setUpGetBallooningExpectations(); + setUpGetGraphicsExpectations(1); setUpGetCertuficateExpectations(); control.replay(); VM response = resource.get(); @@ -147,6 +154,7 @@ setUpGetEntityNextRunExpectations(); setUpGetPayloadExpectations(0, 1); setUpGetBallooningExpectations(); + setUpGetGraphicsExpectations(1); setUpGetCertuficateExpectations(); control.replay(); VM response = resource.get(); @@ -162,6 +170,7 @@ setUpGetEntityExpectations(1); setUpGetPayloadExpectations(0, 1); setUpGetBallooningExpectations(); + setUpGetGraphicsExpectations(1); control.replay(); VM vm = resource.get(); @@ -196,6 +205,7 @@ setUpGetEntityExpectations(1); setUpGetPayloadExpectations(0, 1); setUpGetBallooningExpectations(); + setUpGetGraphicsExpectations(1); setUpGetCertuficateExpectations(); control.replay(); VM response = resource.get(); @@ -232,16 +242,17 @@ setUpGetPayloadExpectations(0, 2); setUpGetBallooningExpectations(); setUpGetBallooningExpectations(); + setUpGetGraphicsExpectations(1); setUpGetConsoleExpectations(new int[]{0}); setUpGetVmOvfExpectations(new int[]{0}); setUpGetVirtioScsiExpectations(new int[] {0}); setUpGetRngDeviceExpectations(new int[]{0}); setUriInfo(setUpActionExpectations(VdcActionType.UpdateVm, - VmManagementParametersBase.class, - new String[] {}, - new Object[] {}, - true, - true)); + VmManagementParametersBase.class, + new String[]{}, + new Object[]{}, + true, + true)); verifyModel(resource.update(getModel(0)), 0); } @@ -251,8 +262,8 @@ setUpGetEntityExpectations(3); setUpEntityQueryExpectations(VdcQueryType.GetVdsGroupByVdsGroupId, IdQueryParameters.class, - new String[] { "Id" }, - new Object[] { GUIDS[2] }, + new String[]{"Id"}, + new Object[]{GUIDS[2]}, getVdsGroupEntity()); setUpGetPayloadExpectations(0, 1); @@ -260,6 +271,7 @@ setUpGetBallooningExpectations(); setUpGetBallooningExpectations(); + setUpGetGraphicsExpectations(1); setUpGetConsoleExpectations(new int[]{0}); setUpGetVmOvfExpectations(new int[]{0}); setUpGetVirtioScsiExpectations(new int[] {0}); @@ -303,6 +315,7 @@ setUpGetPayloadExpectations(0, 2); setUpGetBallooningExpectations(); setUpGetBallooningExpectations(); + setUpGetGraphicsExpectations(1); setUpGetConsoleExpectations(new int[]{0}); setUpGetVmOvfExpectations(new int[]{0}); setUpGetVirtioScsiExpectations(new int[] {0}); @@ -344,24 +357,25 @@ setUpGetPayloadExpectations(0, 2); setUpGetBallooningExpectations(); setUpGetBallooningExpectations(); + setUpGetGraphicsExpectations(1); setUpGetConsoleExpectations(new int[]{0}); setUpGetVmOvfExpectations(new int[]{0}); setUpGetVirtioScsiExpectations(new int[] {0}); setUpGetRngDeviceExpectations(new int[]{0}); setUriInfo(setUpActionExpectations(VdcActionType.ChangeVMCluster, - ChangeVMClusterParameters.class, - new String[] {"ClusterId", "VmId"}, - new Object[] {GUIDS[1], GUIDS[0]}, - true, - true, - false)); + ChangeVMClusterParameters.class, + new String[]{"ClusterId", "VmId"}, + new Object[]{GUIDS[1], GUIDS[0]}, + true, + true, + false)); setUpActionExpectations(VdcActionType.UpdateVm, - VmManagementParametersBase.class, - new String[] {}, - new Object[] {}, - true, - true); + VmManagementParametersBase.class, + new String[]{}, + new Object[]{}, + true, + true); VM model = getModel(0); model.setId(GUIDS[0].toString()); @@ -390,6 +404,7 @@ setUpGetPayloadExpectations(0, 1); setUpGetBallooningExpectations(); + setUpGetGraphicsExpectations(1); setUriInfo(setUpActionExpectations(VdcActionType.UpdateVm, VmManagementParametersBase.class, new String[] {}, @@ -411,6 +426,7 @@ setUpGetPayloadExpectations(0, 1); setUpGetBallooningExpectations(); + setUpGetGraphicsExpectations(1); setUriInfo(setUpBasicUriExpectations()); control.replay(); @@ -428,9 +444,9 @@ @Test public void testStart() throws Exception { setUriInfo(setUpActionExpectations(VdcActionType.RunVm, - RunVmParams.class, - new String[] { "VmId" }, - new Object[] { GUIDS[0] })); + RunVmParams.class, + new String[]{"VmId"}, + new Object[]{GUIDS[0]})); Response response = resource.start(new Action()); verifyActionResponse(response); @@ -442,9 +458,9 @@ setUpWindowsGetEntityExpectations(1, false); setUriInfo(setUpActionExpectations(VdcActionType.RunVmOnce, - RunVmOnceParams.class, - new String[] { "VmId" }, - new Object[] { GUIDS[0] })); + RunVmOnceParams.class, + new String[]{"VmId"}, + new Object[]{GUIDS[0]})); Action action = new Action(); action.setVm(new VM()); @@ -469,22 +485,33 @@ verifyActionResponse(resource.start(action)); } - // todo restapi follow up -// @Test -// public void testStartWithVnc() throws Exception { -// setUpWindowsGetEntityExpectations(1, false); -// setUriInfo(setUpActionExpectations(VdcActionType.RunVmOnce, -// RunVmOnceParams.class, -// new String[] { "VmId", "UseVnc" }, -// new Object[] { GUIDS[0], Boolean.TRUE })); -// -// Action action = new Action(); -// action.setVm(new VM()); -// action.getVm().setDisplay(new Display()); -// action.getVm().getDisplay().setType(DisplayType.VNC.value()); -// -// verifyActionResponse(resource.start(action)); -// } + @Test + public void testStartWithSpice() throws Exception { + testStartWithModifiedGraphics(GraphicsType.SPICE); + } + + @Test + public void testStartWithVnc() throws Exception { + testStartWithModifiedGraphics(GraphicsType.VNC); + } + + private void testStartWithModifiedGraphics(GraphicsType graphicsType) throws Exception { + setUpWindowsGetEntityExpectations(1, false); + setUriInfo(setUpActionExpectations(VdcActionType.RunVmOnce, + RunVmOnceParams.class, + new String[] { "VmId", "RunOnceGraphics" }, + new Object[] { GUIDS[0], Collections.singleton(graphicsType) })); + + Action action = new Action(); + action.setVm(new VM()); + action.getVm().setDisplay(new Display()); + DisplayType display = (graphicsType == GraphicsType.VNC) + ? DisplayType.VNC + : DisplayType.SPICE; + action.getVm().getDisplay().setType(display.value()); + + verifyActionResponse(resource.start(action)); + } @Test public void testStartWithBootDev() throws Exception { @@ -891,9 +918,9 @@ protected void doTestMove(StorageDomain storageDomain) throws Exception { setUriInfo(setUpActionExpectations(VdcActionType.MoveVm, - MoveVmParameters.class, - new String[] { "ContainerId", "StorageDomainId" }, - new Object[] { GUIDS[0], GUIDS[2] })); + MoveVmParameters.class, + new String[]{"ContainerId", "StorageDomainId"}, + new Object[]{GUIDS[0], GUIDS[2]})); Action action = new Action(); action.setStorageDomain(storageDomain); @@ -942,9 +969,9 @@ assertSame(entity, query.resolve(GUIDS[0])); List<Statistic> statistics = query.getStatistics(entity); verifyStatistics(statistics, - new String[] {"memory.installed", "memory.used", "cpu.current.guest", - "cpu.current.hypervisor", "cpu.current.total", "migration.progress"}, - new BigDecimal[] {asDec(10*Mb), asDec(2*Mb), asDec(30), asDec(40), asDec(70), asDec(50)}); + new String[]{"memory.installed", "memory.used", "cpu.current.guest", + "cpu.current.hypervisor", "cpu.current.total", "migration.progress"}, + new BigDecimal[]{asDec(10 * Mb), asDec(2 * Mb), asDec(30), asDec(40), asDec(70), asDec(50)}); Statistic adopted = query.adopt(new Statistic()); assertTrue(adopted.isSetVm()); assertEquals(GUIDS[0].toString(), adopted.getVm().getId()); @@ -953,10 +980,10 @@ protected void setUpGetHostIdExpectations(int idx) throws Exception { VDS host = BackendHostsResourceTest.setUpEntityExpectations(control.createMock(VDS.class), idx); setUpGetEntityExpectations(VdcQueryType.GetVdsByName, - NameQueryParameters.class, - new String[] { "Name" }, - new Object[] { NAMES[idx] }, - host); + NameQueryParameters.class, + new String[]{"Name"}, + new Object[]{NAMES[idx]}, + host); } protected void setUpGetEntityExpectations(int times) throws Exception { @@ -1098,6 +1125,16 @@ true); } + protected void setUpGetGraphicsExpectations(int times) throws Exception { + for (int i = 0; i < times; i++) { + setUpGetEntityExpectations(VdcQueryType.GetGraphicsDevices, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[i] }, + Arrays.asList(new GraphicsDevice(VmDeviceType.SPICE))); + } + } + private void setUpGetCertuficateExpectations() throws Exception { setUpGetEntityExpectations(VdcQueryType.GetVdsCertificateSubjectByVmId, IdQueryParameters.class, 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 25f0737..a64cadf 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 @@ -3,6 +3,7 @@ import static org.easymock.EasyMock.expect; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -45,6 +46,9 @@ import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DiskImageBase; import org.ovirt.engine.core.common.businessentities.DisplayType; +import org.ovirt.engine.core.common.businessentities.GraphicsDevice; +import org.ovirt.engine.core.common.businessentities.GraphicsInfo; +import org.ovirt.engine.core.common.businessentities.GraphicsType; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VdsStatic; import org.ovirt.engine.core.common.businessentities.VmInit; @@ -107,6 +111,7 @@ new Object[] { GUIDS[i] }, vm); } + setUpGetGraphicsExpectations(3); setUpQueryExpectations(""); collection.setUriInfo(uriInfo); List<VM> vms = getCollection(); @@ -123,9 +128,20 @@ setUpGetEntityExpectations(); setUpGetPayloadExpectations(1, 0); setUpGetBallooningExpectations(1); + setUpGetGraphicsExpectations(1); setUpActionExpectations(VdcActionType.RemoveVm, RemoveVmParameters.class, new String[] { "VmId", "Force" }, new Object[] { GUIDS[0], Boolean.FALSE }, true, true); verifyRemove(collection.remove(GUIDS[0].toString())); + } + + protected void setUpGetGraphicsExpectations(int times) throws Exception { + for (int i = 0; i < times; i++) { + setUpGetEntityExpectations(VdcQueryType.GetGraphicsDevices, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[i] }, + Arrays.asList(new GraphicsDevice(VmDeviceType.SPICE))); + } } @Test @@ -134,6 +150,7 @@ setUpGetEntityExpectations(); setUpGetPayloadExpectations(1, 0); setUpGetBallooningExpectations(1); + setUpGetGraphicsExpectations(1); setUpActionExpectations(VdcActionType.RemoveVm, RemoveVmParameters.class, new String[] { "VmId", "Force" }, new Object[] { GUIDS[0], Boolean.TRUE }, true, true); verifyRemove(collection.remove(GUIDS[0].toString(), new Action(){{setForce(true);}})); @@ -145,6 +162,7 @@ setUpGetEntityExpectations(); setUpGetPayloadExpectations(1, 0); setUpGetBallooningExpectations(1); + setUpGetGraphicsExpectations(1); setUpActionExpectations(VdcActionType.RemoveVm, RemoveVmParameters.class, new String[] { "VmId", "RemoveDisks" }, new Object[] { GUIDS[0], Boolean.FALSE }, true, true); @@ -161,6 +179,7 @@ setUpGetEntityExpectations(); setUpGetPayloadExpectations(1, 0); setUpGetBallooningExpectations(1); + setUpGetGraphicsExpectations(1); setUpActionExpectations(VdcActionType.RemoveVm, RemoveVmParameters.class, new String[] { "VmId", "Force" }, new Object[] { GUIDS[0], Boolean.FALSE }, true, true); verifyRemove(collection.remove(GUIDS[0].toString(), new Action(){{}})); @@ -206,6 +225,7 @@ setUpGetEntityExpectations(); setUpGetPayloadExpectations(1, 0); setUpGetBallooningExpectations(1); + setUpGetGraphicsExpectations(1); setUriInfo(setUpActionExpectations(VdcActionType.RemoveVm, RemoveVmParameters.class, new String[] { "VmId", "Force" }, @@ -1160,6 +1180,7 @@ public void testList() throws Exception { UriInfo uriInfo = setUpUriExpectations(null); + setUpGetGraphicsExpectations(3); setUpQueryExpectations(""); collection.setUriInfo(uriInfo); verifyCollection(getCollection()); @@ -1177,6 +1198,7 @@ private void testListAllConsoleAware(boolean allContent) throws Exception { UriInfo uriInfo = setUpUriExpectations(null); + setUpGetGraphicsExpectations(3); if (allContent) { List<String> populates = new ArrayList<String>(); populates.add("true"); @@ -1203,6 +1225,7 @@ expect(httpHeaders.getRequestHeader(BackendResource.POPULATE)).andReturn(populates).anyTimes(); setUpGetPayloadExpectations(3); setUpGetBallooningExpectations(3); + setUpGetGraphicsExpectations(3); setUpGetConsoleExpectations(new int[]{0, 1, 2}); setUpGetVmOvfExpectations(new int[]{0, 1, 2}); setUpGetVirtioScsiExpectations(new int[]{0, 1, 2}); @@ -1245,6 +1268,7 @@ public void testQuery() throws Exception { UriInfo uriInfo = setUpUriExpectations(QUERY); + setUpGetGraphicsExpectations(3); setUpQueryExpectations(QUERY); collection.setUriInfo(uriInfo); verifyCollection(getCollection()); @@ -1335,7 +1359,9 @@ expect(entity.getNumOfCpus()).andReturn(8).anyTimes(); expect(entity.getNumOfSockets()).andReturn(2).anyTimes(); expect(entity.getUsageMemPercent()).andReturn(Integer.valueOf(20)).anyTimes(); - expect(entity.getDisplayType()).andReturn(DisplayType.cirrus).anyTimes(); // todo restapi follow up + Map<GraphicsType, GraphicsInfo> graphics = new HashMap<>(); + graphics.put(GraphicsType.VNC, new GraphicsInfo()); + expect(entity.getGraphicsInfos()).andReturn(graphics).anyTimes(); expect(entity.getDisplaySecurePort()).andReturn(5900).anyTimes(); expect(entity.getNumOfMonitors()).andReturn(2).anyTimes(); expect(entity.getVmType()).andReturn(VmType.Server).anyTimes(); @@ -1358,7 +1384,7 @@ expect(entity.getDescription()).andReturn(DESCRIPTIONS[index]).anyTimes(); expect(entity.getNumOfCpus()).andReturn(8).anyTimes(); expect(entity.getNumOfSockets()).andReturn(2).anyTimes(); - expect(entity.getDefaultDisplayType()).andReturn(DisplayType.cirrus).anyTimes(); // todo restapi follow up + expect(entity.getDefaultDisplayType()).andReturn(DisplayType.vga).anyTimes(); expect(entity.getNumOfMonitors()).andReturn(2).anyTimes(); expect(entity.getVmType()).andReturn(VmType.Server).anyTimes(); return entity; diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java index d5ea4d3..7066cc2 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java @@ -10,7 +10,6 @@ import org.ovirt.engine.api.model.Cluster; import org.ovirt.engine.api.model.CpuTopology; import org.ovirt.engine.api.model.Display; -import org.ovirt.engine.api.model.DisplayType; import org.ovirt.engine.api.model.Domain; import org.ovirt.engine.api.model.HighAvailability; import org.ovirt.engine.api.model.OperatingSystem; @@ -127,12 +126,6 @@ } } if (model.isSetDisplay()) { - if (model.getDisplay().isSetType()) { - DisplayType displayType = DisplayType.fromValue(model.getDisplay().getType()); - if (displayType != null) { - entity.setDefaultDisplayType(VmMapper.map(displayType, null)); - } - } if (model.getDisplay().isSetMonitors()) { entity.setNumOfMonitors(model.getDisplay().getMonitors()); } @@ -275,12 +268,6 @@ } } if (model.isSetDisplay()) { - if (model.getDisplay().isSetType()) { - DisplayType displayType = DisplayType.fromValue(model.getDisplay().getType()); - if (displayType != null) { - staticVm.setDefaultDisplayType(VmMapper.map(displayType, null)); - } - } if (model.getDisplay().isSetMonitors()) { staticVm.setNumOfMonitors(model.getDisplay().getMonitors()); } @@ -386,17 +373,14 @@ model.setCpu(new CPU()); model.getCpu().setTopology(topology); model.setCpuShares(entity.getCpuShares()); - if (entity.getDefaultDisplayType() != null) { - model.setDisplay(new Display()); - model.getDisplay().setType(VmMapper.map(entity.getDefaultDisplayType(), null)); - model.getDisplay().setMonitors(entity.getNumOfMonitors()); - model.getDisplay().setSingleQxlPci(entity.getSingleQxlPci()); - model.getDisplay().setAllowOverride(entity.isAllowConsoleReconnect()); - model.getDisplay().setSmartcardEnabled(entity.isSmartcardEnabled()); - model.getDisplay().setKeyboardLayout(entity.getVncKeyboardLayout()); - model.getDisplay().setFileTransferEnabled(entity.isSpiceFileTransferEnabled()); - model.getDisplay().setCopyPasteEnabled(entity.isSpiceCopyPasteEnabled()); - } + model.setDisplay(new Display()); + model.getDisplay().setMonitors(entity.getNumOfMonitors()); + model.getDisplay().setSingleQxlPci(entity.getSingleQxlPci()); + model.getDisplay().setAllowOverride(entity.isAllowConsoleReconnect()); + model.getDisplay().setSmartcardEnabled(entity.isSmartcardEnabled()); + model.getDisplay().setKeyboardLayout(entity.getVncKeyboardLayout()); + model.getDisplay().setFileTransferEnabled(entity.isSpiceFileTransferEnabled()); + model.getDisplay().setCopyPasteEnabled(entity.isSpiceCopyPasteEnabled()); if (entity.getClusterArch() != null) { model.getCpu().setArchitecture(CPUMapper.map(entity.getClusterArch(), null)); } 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 483a449..af12cd8 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 @@ -5,6 +5,7 @@ import static org.ovirt.engine.core.compat.Guid.createGuidFromString; import java.util.ArrayList; +import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -66,6 +67,8 @@ import org.ovirt.engine.api.restapi.utils.UsbMapperUtils; import org.ovirt.engine.core.common.action.RunVmOnceParams; import org.ovirt.engine.core.common.businessentities.BootSequence; +import org.ovirt.engine.core.common.businessentities.GraphicsInfo; +import org.ovirt.engine.core.common.businessentities.GraphicsType; import org.ovirt.engine.core.common.businessentities.MigrationSupport; import org.ovirt.engine.core.common.businessentities.OriginType; import org.ovirt.engine.core.common.businessentities.UsbPolicy; @@ -240,12 +243,6 @@ staticVm.setOrigin(map(vm.getOrigin(), (OriginType)null)); } if (vm.isSetDisplay()) { - if (vm.getDisplay().isSetType()) { - DisplayType displayType = DisplayType.fromValue(vm.getDisplay().getType()); - if (displayType != null) { - staticVm.setDefaultDisplayType(map(displayType, null)); - } - } if (vm.getDisplay().isSetMonitors()) { staticVm.setNumOfMonitors(vm.getDisplay().getMonitors()); } @@ -381,7 +378,7 @@ return null; } - @Mapping(from = org.ovirt.engine.core.common.businessentities.VM.class, to = org.ovirt.engine.api.model.VM.class) + @Mapping(from = org.ovirt.engine.core.common.businessentities.VM.class, to = VM.class) public static VM map(org.ovirt.engine.core.common.businessentities.VM entity, VM template) { VM model = template != null ? template : new VM(); model.setId(entity.getId().toString()); @@ -451,7 +448,23 @@ pool.setId(entity.getVmPoolId().toString()); model.setVmPool(pool); } + + model.setDisplay(new Display()); + if (entity.getDynamicData() != null && entity.getStatus().isRunningOrPaused()) { + + GraphicsType graphicsType = deriveGraphicsType(entity.getGraphicsInfos()); + if (graphicsType != null) { + model.getDisplay().setType(DisplayType.fromGraphicsType(graphicsType).value()); + + GraphicsInfo graphicsInfo = entity.getGraphicsInfos().get(graphicsType); + model.getDisplay().setAddress(graphicsInfo == null ? null : graphicsInfo.getIp()); + Integer displayPort = graphicsInfo == null ? null : graphicsInfo.getPort(); + model.getDisplay().setPort(displayPort == null || displayPort.equals(-1) ? null : displayPort); + Integer displaySecurePort = graphicsInfo == null ? null : graphicsInfo.getTlsPort(); + model.getDisplay().setSecurePort(displaySecurePort==null || displaySecurePort.equals(-1) ? null : displaySecurePort); + } + if (model.getOs() != null && entity.getBootSequence() != null) { for (Boot boot : map(entity.getBootSequence(), null)) { model.getOs().getBoot().add(boot); @@ -487,38 +500,25 @@ if (entity.getLastStartTime() != null) { model.setStartTime(DateMapper.map(entity.getLastStartTime(), null)); } - model.setDisplay(new Display()); - model.getDisplay().setType(map(entity.getDisplayType(), null)); - model.getDisplay().setAddress(entity.getDisplayIp()); - Integer displayPort = entity.getDisplay(); - model.getDisplay().setPort(displayPort==null || displayPort==-1 ? null : displayPort); - Integer displaySecurePort = entity.getDisplaySecurePort(); - model.getDisplay().setSecurePort(displaySecurePort==null || displaySecurePort==-1 ? null : displaySecurePort); - model.getDisplay().setMonitors(entity.getNumOfMonitors()); - model.getDisplay().setSingleQxlPci(entity.getSingleQxlPci()); } else { if (model.getOs() != null) { for (Boot boot : map(entity.getDefaultBootSequence(), null)) { model.getOs().getBoot().add(boot); } } - if (entity.getDefaultDisplayType() != null) { - model.setDisplay(new Display()); - model.getDisplay().setType(map(entity.getDefaultDisplayType(), null)); - } } if (entity.getLastStopTime() != null) { model.setStopTime(DateMapper.map(entity.getLastStopTime(), null)); } - if (model.getDisplay() != null) { - model.getDisplay().setMonitors(entity.getNumOfMonitors()); - model.getDisplay().setSingleQxlPci(entity.getSingleQxlPci()); - model.getDisplay().setAllowOverride(entity.getAllowConsoleReconnect()); - model.getDisplay().setSmartcardEnabled(entity.isSmartcardEnabled()); - model.getDisplay().setKeyboardLayout(entity.getDefaultVncKeyboardLayout()); - model.getDisplay().setFileTransferEnabled(entity.isSpiceFileTransferEnabled()); - model.getDisplay().setCopyPasteEnabled(entity.isSpiceCopyPasteEnabled()); - } + + model.getDisplay().setMonitors(entity.getNumOfMonitors()); + model.getDisplay().setSingleQxlPci(entity.getSingleQxlPci()); + model.getDisplay().setAllowOverride(entity.getAllowConsoleReconnect()); + model.getDisplay().setSmartcardEnabled(entity.isSmartcardEnabled()); + model.getDisplay().setKeyboardLayout(entity.getDefaultVncKeyboardLayout()); + model.getDisplay().setFileTransferEnabled(entity.isSpiceFileTransferEnabled()); + model.getDisplay().setCopyPasteEnabled(entity.isSpiceCopyPasteEnabled()); + model.setType(map(entity.getVmType(), null)); model.setStateless(entity.isStateless()); model.setDeleteProtected(entity.isDeleteProtected()); @@ -584,6 +584,20 @@ return model; } + // for backwards compatibility + // returns graphics type of a running vm (can be different than static graphics in vm device due to run once) + // if vm has multiple graphics, returns SPICE + private static GraphicsType deriveGraphicsType(Map<GraphicsType, GraphicsInfo> graphicsInfos) { + if (graphicsInfos != null) { + if (graphicsInfos.containsKey(GraphicsType.SPICE)) { + return GraphicsType.SPICE; + } + if (graphicsInfos.containsKey(GraphicsType.VNC)) { + return GraphicsType.VNC; + } + } + return null; + } @Mapping(from = VM.class, to = RunVmOnceParams.class) public static RunVmOnceParams map(VM vm, RunVmOnceParams template) { RunVmOnceParams params = template != null ? template : new RunVmOnceParams(); @@ -591,11 +605,12 @@ params.setRunAsStateless(true); } if (vm.isSetDisplay()) { - // todo rest api follow up if (vm.getDisplay().isSetKeyboardLayout()) { String vncKeyboardLayout = vm.getDisplay().getKeyboardLayout(); params.setVncKeyboardLayout(vncKeyboardLayout); } + + setGraphicsFromLegacyDisplay(vm, params); } if (vm.isSetOs() && vm.getOs().getBoot().size() > 0) { params.setBootSequence(map(vm.getOs().getBoot(), null)); @@ -650,6 +665,33 @@ } return params; + } + + /** + * For backwards compatibility. Derives graphics type (backend) from display (rest). + * @param vm + * @param params + */ + private static void setGraphicsFromLegacyDisplay(VM vm, RunVmOnceParams params) { + if (vm.getDisplay().isSetType()) { + DisplayType displayType = DisplayType.fromValue(vm.getDisplay().getType()); + if (displayType != null) { + org.ovirt.engine.core.common.businessentities.DisplayType display = map(displayType, null); + if (display != null) { + Set<GraphicsType> graphics = new HashSet<>(); + switch (display) { + case qxl: + graphics.add(GraphicsType.SPICE); + break; + case vga: + case cirrus: + graphics.add(GraphicsType.VNC); + break; + } + params.setRunOnceGraphics(graphics); + } + } + } } @Mapping(from = String.class, to = CustomProperties.class) @@ -728,7 +770,7 @@ public static org.ovirt.engine.core.common.businessentities.DisplayType map(DisplayType type, org.ovirt.engine.core.common.businessentities.DisplayType incoming) { switch(type) { case VNC: - return org.ovirt.engine.core.common.businessentities.DisplayType.cirrus; // todo restapi follow up + return org.ovirt.engine.core.common.businessentities.DisplayType.vga; case SPICE: return org.ovirt.engine.core.common.businessentities.DisplayType.qxl; default: @@ -739,7 +781,7 @@ @Mapping(from = org.ovirt.engine.core.common.businessentities.DisplayType.class, to = String.class) public static String map(org.ovirt.engine.core.common.businessentities.DisplayType type, String incoming) { switch(type) { - case cirrus: // todo restapi follow up + case vga: return DisplayType.VNC.value(); case qxl: return DisplayType.SPICE.value(); diff --git a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java index 2ecadbf..862c9ac 100644 --- a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java +++ b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java @@ -72,7 +72,6 @@ assertEquals(model.getOs().getInitrd(), transform.getOs().getInitrd()); assertEquals(model.getOs().getCmdline(), transform.getOs().getCmdline()); assertNotNull(model.getDisplay()); - assertEquals(model.getDisplay().getType(), transform.getDisplay().getType()); assertEquals(model.getDisplay().getMonitors(), transform.getDisplay().getMonitors()); assertEquals(model.getDisplay().isSingleQxlPci(), transform.getDisplay().isSingleQxlPci()); assertEquals(model.getDisplay().isAllowOverride(), transform.getDisplay().isAllowOverride()); 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 60805f8..7d30729 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 @@ -22,6 +22,8 @@ import org.ovirt.engine.api.model.VmPlacementPolicy; import org.ovirt.engine.api.model.VmType; import org.ovirt.engine.api.restapi.utils.OsTypeMockUtils; +import org.ovirt.engine.core.common.businessentities.GraphicsInfo; +import org.ovirt.engine.core.common.businessentities.GraphicsType; import org.ovirt.engine.core.common.businessentities.OriginType; import org.ovirt.engine.core.common.businessentities.UsbPolicy; import org.ovirt.engine.core.common.businessentities.VDSGroup; @@ -59,7 +61,7 @@ VmDynamic dynamic = new VmDynamic(); dynamic.setStatus(VMStatus.Up); dynamic.setBootSequence(to.getDefaultBootSequence()); - dynamic.setDisplayType(to.getDefaultDisplayType()); + dynamic.getGraphicsInfos().put(GraphicsType.SPICE, new GraphicsInfo()); org.ovirt.engine.core.common.businessentities.VM ret = new org.ovirt.engine.core.common.businessentities.VM(to, dynamic, @@ -96,6 +98,7 @@ for (GuestNicConfiguration guestNic : from.getInitialization().getNicConfigurations().getNicConfigurations()) { guestNic.setBootProtocol(MappingTestHelper.shuffle(BootProtocol.class).value()); } + from.getDisplay().setType("spice"); from.getSerialNumber().setPolicy(SerialNumberPolicy.CUSTOM.value()); from.getDisplay().setFileTransferEnabled(true); from.getDisplay().setCopyPasteEnabled(true); @@ -229,13 +232,17 @@ org.ovirt.engine.core.common.businessentities.VM entity = new org.ovirt.engine.core.common.businessentities.VM(); entity.setStatus(VMStatus.Up); - entity.setDisplay(5900); - entity.setDisplaySecurePort(9999); + entity.getGraphicsInfos().put(GraphicsType.SPICE, new GraphicsInfo()); + entity.getGraphicsInfos().get(GraphicsType.SPICE) + .setPort(5900) + .setTlsPort(9999); VM model = VmMapper.map(entity, (VM) null); assertTrue(model.getDisplay().getPort() == 5900); assertTrue(model.getDisplay().getSecurePort() == 9999); - entity.setDisplay(-1); - entity.setDisplaySecurePort(-1); + entity.getGraphicsInfos().put(GraphicsType.SPICE, new GraphicsInfo()); + entity.getGraphicsInfos().get(GraphicsType.SPICE) + .setPort(null) + .setTlsPort(null); model = VmMapper.map(entity, (VM) null); assertNull(model.getDisplay().getPort()); assertNull(model.getDisplay().getSecurePort()); -- To view, visit http://gerrit.ovirt.org/35281 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ibed6bbbce8a36dff82a0903c3478cfb656589fb4 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Frank Kobzik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
