Arik Hadas has uploaded a new change for review.

Change subject: restapi,engine: fix usb mapping on update vm call
......................................................................

restapi,engine: fix usb mapping on update vm call

Change the way usb policy is set on update vm request that is received
through rest api, according to the mapping table attached in the bug-url.

Specifically, the new mapping states that if no usb setting is defined
in the update vm request, the previous usb policy will remain as is
(instead of being set to DISABLED as it was before), thus it solves
bug #875881.

The new mapping also states that if the current usb policy is set to
DISABLED and the update vm request is going to enable it but no
explicit policy is declared (either legacy or native), then an error
should be raised. thus, in this case a null policy is sent to the
engine and the engine returns an appropriate error.

Change-Id: If74bf6ede2fc0f932db8dfcd7951b6bcf90b7744
Bug-Url: https://bugzilla.redhat.com/875881
Signed-off-by: Arik Hadas <aha...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java
M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
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/resource/utils/UsbResourceUtils.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/utils/test/UsbResourceUtilsTest.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 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
M 
frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
14 files changed, 258 insertions(+), 61 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/9792/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
index 89a28f0..4139073 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
@@ -422,7 +422,10 @@
             VDSGroup vdsGroup,
             List<String> messages) {
         boolean retVal = true;
-        if (UsbPolicy.ENABLED_NATIVE.equals(usbPolicy)) {
+        if (usbPolicy == null) {
+            
messages.add(VdcBllMessages.ACTION_TYPE_FAILED_ILLEGAL_USB_POLICY.toString());
+            retVal = false;
+        } else if (UsbPolicy.ENABLED_NATIVE.equals(usbPolicy)) {
             if (!Config.<Boolean> GetValue(ConfigValues.NativeUSBEnabled, 
vdsGroup.getcompatibility_version()
                     .getValue())) {
                 
messages.add(VdcBllMessages.USB_NATIVE_SUPPORT_ONLY_AVAILABLE_ON_CLUSTER_LEVEL.toString());
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java
index 5128be3..f43acb0 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java
@@ -151,6 +151,7 @@
     ACTION_TYPE_FAILED_ILLEGAL_MEMORY_SIZE,
     ACTION_TYPE_FAILED_ILLEGAL_NUM_OF_MONITORS,
     ACTION_TYPE_FAILED_ILLEGAL_DOMAIN_NAME,
+    ACTION_TYPE_FAILED_ILLEGAL_USB_POLICY,
     ACTION_TYPE_FAILED_MAX_NUM_CPU,
     ACTION_TYPE_FAILED_MAX_NUM_SOCKETS,
     ACTION_TYPE_FAILED_MIN_NUM_SOCKETS,
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
index 379e566..23d3156 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -479,6 +479,7 @@
 ACTION_TYPE_FAILED_ILLEGAL_MEMORY_SIZE=Cannot ${action} ${type}. Illegal 
memory size is provided, size needs to be between ${minMemorySize} MB and 
${maxMemorySize} MB.
 ACTION_TYPE_FAILED_ILLEGAL_NUM_OF_MONITORS=Cannot ${action} ${type}. Illegal 
number of monitors is provided, max allowed number of monitors is 1 for VNC and 
the max number in the ValidNumOfMonitors configuration variable for Spice.
 ACTION_TYPE_FAILED_ILLEGAL_DOMAIN_NAME=Cannot ${action} ${type}. Illegal 
Domain name: ${Domain}. Domain name has unsupported special character ${Char}.
+ACTION_TYPE_FAILED_ILLEGAL_USB_POLICY=Cannot ${action} ${type}. Illegal USB 
policy is provided, cannot determine whether a legacy or native USB policy 
should be set.
 ACTION_TYPE_FAILED_CANNOT_DECREASE_COMPATIBILITY_VERSION=Cannot ${action} 
${type}. Compatibility version is invalid, previous value restored.
 ACTION_TYPE_FAILED_GIVEN_VERSION_NOT_SUPPORTED=Cannot ${action} ${type}. 
Selected Compatibility Version is not supported.
 NETWORK_ADDR_MANDATORY_IN_STATIC_IP=Netwrok address must be specify when using 
static ip
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 b36d519..8d7294d 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
@@ -2,6 +2,7 @@
 
 
 import javax.ws.rs.core.Response;
+
 import org.ovirt.engine.api.model.Action;
 import org.ovirt.engine.api.model.CdRom;
 import org.ovirt.engine.api.model.CdRoms;
@@ -21,15 +22,11 @@
 import org.ovirt.engine.core.common.action.UpdateVmTemplateParameters;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
-import org.ovirt.engine.core.common.businessentities.UsbPolicy;
-import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters;
-import org.ovirt.engine.core.common.queries.GetVdsGroupByVdsGroupIdParameters;
-import org.ovirt.engine.core.common.queries.GetVmTemplatesDisksParameters;
 import org.ovirt.engine.core.common.queries.GetVmTemplateParameters;
+import org.ovirt.engine.core.common.queries.GetVmTemplatesDisksParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
-import org.ovirt.engine.core.compat.Guid;
 
 public class BackendTemplateResource
     extends AbstractBackendActionableResource<Template, VmTemplate>
@@ -112,17 +109,9 @@
         @Override
         public VdcActionParametersBase getParameters(Template incoming, 
VmTemplate entity) {
             VmTemplate updated = getMapper(modelType, 
VmTemplate.class).map(incoming, entity);
-            UsbPolicy usbPolicy = 
UsbResourceUtils.getUsbPolicy(incoming.getUsb(), 
lookupCluster(updated.getvds_group_id()));
-            if (usbPolicy != null) {
-                updated.setusb_policy(usbPolicy);
-            }
+            
updated.setusb_policy(UsbResourceUtils.getUsbPolicyOnUpdate(incoming.getUsb(), 
entity.getusb_policy()));
 
             return new UpdateVmTemplateParameters(updated);
         }
     }
-
-    private VDSGroup lookupCluster(Guid id) {
-        return getEntity(VDSGroup.class, VdcQueryType.GetVdsGroupByVdsGroupId, 
new GetVdsGroupByVdsGroupIdParameters(id), "GetVdsGroupByVdsGroupId");
-    }
-
 }
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 0771225..bab797f 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
@@ -17,7 +17,6 @@
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VmTemplateParametersBase;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
-import org.ovirt.engine.core.common.businessentities.UsbPolicy;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
@@ -63,10 +62,7 @@
             staticVm.setvds_group_id(getClusterId(template));
         }
 
-        UsbPolicy usbPolicy = UsbResourceUtils.getUsbPolicy(template.getUsb(), 
lookupCluster(staticVm.getvds_group_id()));
-        if (usbPolicy != null) {
-            staticVm.setusb_policy(usbPolicy);
-        }
+        
staticVm.setusb_policy(UsbResourceUtils.getUsbPolicyOnCreate(template.getUsb(), 
lookupCluster(staticVm.getvds_group_id())));
 
         // REVISIT: powershell has a IsVmTemlateWithSameNameExist safety check
         AddVmTemplateParameters params = new AddVmTemplateParameters(staticVm,
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 43d3704..f77ee44 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
@@ -50,7 +50,6 @@
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VmManagementParametersBase;
 import org.ovirt.engine.core.common.action.VmOperationParameterBase;
-import org.ovirt.engine.core.common.businessentities.UsbPolicy;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
@@ -58,7 +57,6 @@
 import org.ovirt.engine.core.common.interfaces.SearchType;
 import org.ovirt.engine.core.common.queries.GetAllDisksByVmIdParameters;
 import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters;
-import org.ovirt.engine.core.common.queries.GetVdsGroupByVdsGroupIdParameters;
 import org.ovirt.engine.core.common.queries.GetVmByVmIdParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -380,10 +378,7 @@
             VmStatic updated = getMapper(modelType, 
VmStatic.class).map(incoming,
                     entity.getStaticData());
 
-            UsbPolicy usbPolicy = 
UsbResourceUtils.getUsbPolicy(incoming.getUsb(), 
lookupCluster(updated.getvds_group_id()));
-            if (usbPolicy != null) {
-                updated.setusb_policy(usbPolicy);
-            }
+            
updated.setusb_policy(UsbResourceUtils.getUsbPolicyOnUpdate(incoming.getUsb(), 
entity.getUsbPolicy()));
 
             VmManagementParametersBase params = new 
VmManagementParametersBase(updated);
 
@@ -395,10 +390,6 @@
             }
             return params;
         }
-    }
-
-    private VDSGroup lookupCluster(Guid id) {
-        return getEntity(VDSGroup.class, VdcQueryType.GetVdsGroupByVdsGroupId, 
new GetVdsGroupByVdsGroupIdParameters(id), "GetVdsGroupByVdsGroupId");
     }
 
     @Override
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 c8862aa..c516773 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
@@ -34,7 +34,6 @@
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VmManagementParametersBase;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
-import org.ovirt.engine.core.common.businessentities.UsbPolicy;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VmPayload;
@@ -90,10 +89,9 @@
             if (namedCluster(vm)) {
                 staticVm.setvds_group_id(getClusterId(vm));
             }
-            UsbPolicy usbPolicy = UsbResourceUtils.getUsbPolicy(vm.getUsb(), 
lookupCluster(staticVm.getvds_group_id()));
-            if (usbPolicy != null) {
-                staticVm.setusb_policy(usbPolicy);
-            }
+
+            
staticVm.setusb_policy(UsbResourceUtils.getUsbPolicyOnCreate(vm.getUsb(), 
lookupCluster(staticVm.getvds_group_id())));
+
             if (!isFiltered()) {
                 // if the user set the host-name within placement-policy, 
rather than the host-id (legal) -
                 // resolve the host's ID, because it will be needed down the 
line
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/UsbResourceUtils.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/UsbResourceUtils.java
index bc6a3e3..4de77d8 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/UsbResourceUtils.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/UsbResourceUtils.java
@@ -7,7 +7,7 @@
 import org.ovirt.engine.core.compat.Version;
 
 public class UsbResourceUtils {
-    public static UsbPolicy getUsbPolicy(Usb usb, VDSGroup vdsGroup) {
+    public static UsbPolicy getUsbPolicyOnCreate(Usb usb, VDSGroup vdsGroup) {
         UsbPolicy usbPolicy = null;
         if (usb == null || !usb.isSetEnabled() || !usb.isEnabled()) {
             usbPolicy = UsbPolicy.DISABLED;
@@ -29,4 +29,52 @@
         }
         return usbPolicy;
     }
+
+    public static UsbPolicy getUsbPolicyOnUpdate(Usb usb, UsbPolicy 
currentPolicy) {
+        if (usb == null) {
+            return currentPolicy;
+        }
+
+        if (!usb.isSetEnabled()) {
+            if (usb.isSetType()) {
+                if (currentPolicy == UsbPolicy.DISABLED) {
+                    return currentPolicy;
+                }
+                else {
+                    UsbType usbType = UsbType.fromValue(usb.getType());
+                    return mapUsbTypeToPolicy(usbType);
+                }
+            }
+            else {
+                return currentPolicy;
+            }
+        }
+        else {
+            if (!usb.isEnabled())
+                return UsbPolicy.DISABLED;
+            else {
+                if (usb.isSetType()) {
+                    UsbType usbType = UsbType.fromValue(usb.getType());
+                    return mapUsbTypeToPolicy(usbType);
+                }
+                else {
+                    return currentPolicy == UsbPolicy.DISABLED ? null : 
currentPolicy;
+                }
+            }
+        }
+    }
+
+    private static UsbPolicy mapUsbTypeToPolicy(UsbType usbType) {
+        if (usbType == null)
+            return null;
+
+        switch (usbType) {
+        case LEGACY:
+            return UsbPolicy.ENABLED_LEGACY;
+        case NATIVE:
+            return UsbPolicy.ENABLED_NATIVE;
+        default:
+            return null;
+        }
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/utils/test/UsbResourceUtilsTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/utils/test/UsbResourceUtilsTest.java
index 7ae2209..9cb719f 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/utils/test/UsbResourceUtilsTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/utils/test/UsbResourceUtilsTest.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.api.restapi.resource.utils.test;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 
 import org.junit.Test;
 import org.ovirt.engine.api.model.Usb;
@@ -14,14 +15,14 @@
     public void getUsbPolicyNullUsb() {
         Usb usb = null;
         VDSGroup vdsGroup = new VDSGroup();
-        assertEquals(UsbResourceUtils.getUsbPolicy(usb, vdsGroup), 
UsbPolicy.DISABLED);
+        assertEquals(UsbResourceUtils.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.DISABLED);
     }
 
     @Test
     public void getUsbPolicyIsSetDisabled() {
         Usb usb = new Usb();
         VDSGroup vdsGroup = new VDSGroup();
-        assertEquals(UsbResourceUtils.getUsbPolicy(usb, vdsGroup), 
UsbPolicy.DISABLED);
+        assertEquals(UsbResourceUtils.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.DISABLED);
     }
 
     @Test
@@ -29,7 +30,7 @@
         Usb usb = new Usb();
         usb.setEnabled(false);
         VDSGroup vdsGroup = new VDSGroup();
-        assertEquals(UsbResourceUtils.getUsbPolicy(usb, vdsGroup), 
UsbPolicy.DISABLED);
+        assertEquals(UsbResourceUtils.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.DISABLED);
     }
 
     @Test
@@ -38,7 +39,7 @@
         usb.setEnabled(true);
         usb.setType("native");
         VDSGroup vdsGroup = new VDSGroup();
-        assertEquals(UsbResourceUtils.getUsbPolicy(usb, vdsGroup), 
UsbPolicy.ENABLED_NATIVE);
+        assertEquals(UsbResourceUtils.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.ENABLED_NATIVE);
     }
 
     @Test
@@ -47,7 +48,7 @@
         usb.setEnabled(true);
         usb.setType("legacy");
         VDSGroup vdsGroup = new VDSGroup();
-        assertEquals(UsbResourceUtils.getUsbPolicy(usb, vdsGroup), 
UsbPolicy.ENABLED_LEGACY);
+        assertEquals(UsbResourceUtils.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.ENABLED_LEGACY);
     }
 
     @Test
@@ -56,7 +57,7 @@
         usb.setEnabled(true);
         VDSGroup vdsGroup = new VDSGroup();
         vdsGroup.setcompatibility_version(Version.v3_1);
-        assertEquals(UsbResourceUtils.getUsbPolicy(usb, vdsGroup), 
UsbPolicy.ENABLED_NATIVE);
+        assertEquals(UsbResourceUtils.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.ENABLED_NATIVE);
     }
 
     @Test
@@ -65,7 +66,175 @@
         usb.setEnabled(true);
         VDSGroup vdsGroup = new VDSGroup();
         vdsGroup.setcompatibility_version(Version.v3_0);
-        assertEquals(UsbResourceUtils.getUsbPolicy(usb, vdsGroup), 
UsbPolicy.ENABLED_LEGACY);
+        assertEquals(UsbResourceUtils.getUsbPolicyOnCreate(usb, vdsGroup), 
UsbPolicy.ENABLED_LEGACY);
     }
 
+    @Test
+    public void getUsbPolicyOnUpdateCurrentlyDisabledGotNullUsb() {
+        Usb usb = null;
+        UsbPolicy currentPolicy = UsbPolicy.DISABLED;
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
currentPolicy), currentPolicy);
+    }
+
+    @Test
+    public void getUsbPolicyOnUpdateCurrentlyLegacyGotNullUsb() {
+        Usb usb = null;
+        UsbPolicy currentPolicy = UsbPolicy.ENABLED_LEGACY;
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
currentPolicy), currentPolicy);
+    }
+
+    @Test
+    public void getUsbPolicyOnUpdateCurrentlyNativeGotNullUsb() {
+        Usb usb = null;
+        UsbPolicy currentPolicy = UsbPolicy.ENABLED_NATIVE;
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
currentPolicy), currentPolicy);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyDisabledGotEnabledNotSetPolicyNotSetUsb() {
+        Usb usb = new Usb();
+        UsbPolicy currentPolicy = UsbPolicy.DISABLED;
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
currentPolicy), currentPolicy);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyLegacyGotEnabledNotSetPolicyNotSetUsb() {
+        Usb usb = new Usb();
+        UsbPolicy currentPolicy = UsbPolicy.ENABLED_LEGACY;
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
currentPolicy), currentPolicy);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyNativeGotEnabledNotSetPolicyNotSetUsb() {
+        Usb usb = new Usb();
+        UsbPolicy currentPolicy = UsbPolicy.ENABLED_NATIVE;
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
currentPolicy), currentPolicy);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyDisabledGotEnabledNotSetLegacyPolicyUsb() {
+        Usb usb = new Usb();
+        usb.setType("legacy");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.DISABLED), UsbPolicy.DISABLED);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyDisabledGotEnabledNotSetNativePolicyUsb() {
+        Usb usb = new Usb();
+        usb.setType("native");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.DISABLED), UsbPolicy.DISABLED);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyLegacyGotEnabledNotSetLegacyPolicyUsb() {
+        Usb usb = new Usb();
+        usb.setType("legacy");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.ENABLED_LEGACY), UsbPolicy.ENABLED_LEGACY);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyNativeGotEnabledNotSetLegacyPolicyUsb() {
+        Usb usb = new Usb();
+        usb.setType("legacy");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.ENABLED_NATIVE), UsbPolicy.ENABLED_LEGACY);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyLegacyGotEnabledNotSetNativePolicyUsb() {
+        Usb usb = new Usb();
+        usb.setType("native");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.ENABLED_LEGACY), UsbPolicy.ENABLED_NATIVE);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyNativeGotEnabledNotSetNativePolicyUsb() {
+        Usb usb = new Usb();
+        usb.setType("native");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.ENABLED_NATIVE), UsbPolicy.ENABLED_NATIVE);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyDisabledGotDisabledLegacyPolicyUsb() {
+        Usb usb = new Usb();
+        usb.setEnabled(false);
+        usb.setType("legacy");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.DISABLED), UsbPolicy.DISABLED);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyDisabledGotDisabledNativePolicyUsb() {
+        Usb usb = new Usb();
+        usb.setEnabled(false);
+        usb.setType("native");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.DISABLED), UsbPolicy.DISABLED);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyLegacyGotDisabledLegacyPolicyUsb() {
+        Usb usb = new Usb();
+        usb.setEnabled(false);
+        usb.setType("legacy");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.ENABLED_LEGACY), UsbPolicy.DISABLED);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyNativeGotDisabledLegacyPolicyUsb() {
+        Usb usb = new Usb();
+        usb.setEnabled(false);
+        usb.setType("legacy");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.ENABLED_NATIVE), UsbPolicy.DISABLED);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyDisabledGotEnabledPolicyNotSetUsb() {
+        Usb usb = new Usb();
+        usb.setEnabled(true);
+        assertNull(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.DISABLED));
+    }
+
+    @Test
+    public void getUsbPolicyOnUpdateCurrentlyLegacyGotEnabledPolicyNotSetUsb() 
{
+        Usb usb = new Usb();
+        usb.setEnabled(true);
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.ENABLED_LEGACY), UsbPolicy.ENABLED_LEGACY);
+    }
+
+    @Test
+    public void getUsbPolicyOnUpdateCurrentlyNativeGotEnabledPolicyNotSetUsb() 
{
+        Usb usb = new Usb();
+        usb.setEnabled(true);
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.ENABLED_NATIVE), UsbPolicy.ENABLED_NATIVE);
+    }
+
+    @Test
+    public void getUsbPolicyOnUpdateCurrentlyNativeGotEnabledLegacyPolicyUsb() 
{
+        Usb usb = new Usb();
+        usb.setEnabled(true);
+        usb.setType("legacy");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.ENABLED_NATIVE), UsbPolicy.ENABLED_LEGACY);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyDisabledGotEnabledLegacyPolicyUsb() {
+        Usb usb = new Usb();
+        usb.setEnabled(true);
+        usb.setType("legacy");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.DISABLED), UsbPolicy.ENABLED_LEGACY);
+    }
+
+    @Test
+    public void getUsbPolicyOnUpdateCurrentlyNativeGotEnabledNativePolicyUsb() 
{
+        Usb usb = new Usb();
+        usb.setEnabled(true);
+        usb.setType("native");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.ENABLED_NATIVE), UsbPolicy.ENABLED_NATIVE);
+    }
+
+    @Test
+    public void 
getUsbPolicyOnUpdateCurrentlyDisabledGotEnabledNativePolicyUsb() {
+        Usb usb = new Usb();
+        usb.setEnabled(true);
+        usb.setType("native");
+        assertEquals(UsbResourceUtils.getUsbPolicyOnUpdate(usb, 
UsbPolicy.DISABLED), UsbPolicy.ENABLED_NATIVE);
+    }
 }
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 5d93e91..80736ae 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
@@ -3,8 +3,8 @@
 import org.ovirt.engine.api.common.util.StatusUtils;
 import org.ovirt.engine.api.common.util.TimeZoneMapping;
 import org.ovirt.engine.api.model.Boot;
-import org.ovirt.engine.api.model.Cluster;
 import org.ovirt.engine.api.model.CPU;
+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;
@@ -19,10 +19,9 @@
 import org.ovirt.engine.api.model.VmType;
 import org.ovirt.engine.api.restapi.utils.UsbMapperUtils;
 import org.ovirt.engine.core.common.businessentities.OriginType;
-import org.ovirt.engine.core.common.businessentities.UsbPolicy;
-import org.ovirt.engine.core.common.businessentities.VmTemplateStatus;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
+import org.ovirt.engine.core.common.businessentities.VmTemplateStatus;
 import org.ovirt.engine.core.compat.Guid;
 
 public class TemplateMapper {
@@ -31,6 +30,8 @@
 
     @Mapping(from = Template.class, to = VmTemplate.class)
     public static VmTemplate map(Template model, VmTemplate incoming) {
+        // USB policy will be updated outside of this method because there's
+        // a different mapping for it on create and update VM operations
         VmTemplate entity = incoming != null ? incoming : new VmTemplate();
         if (model.isSetName()) {
             entity.setname(model.getName());
@@ -120,9 +121,6 @@
         }
         if (model.isSetTimezone()) {
             
entity.settime_zone(TimeZoneMapping.getWindows(model.getTimezone()));
-        }
-        if (model.isSetUsb() && model.getUsb().isSetEnabled()) {
-            entity.setusb_policy(model.getUsb().isEnabled() ? 
UsbPolicy.ENABLED_LEGACY : UsbPolicy.DISABLED);
         }
         return entity;
     }
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 7ed8606..9fb5d51 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
@@ -1,5 +1,7 @@
 package org.ovirt.engine.api.restapi.types;
 
+import static org.ovirt.engine.core.compat.NGuid.createGuidFromString;
+
 import java.util.ArrayList;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -23,9 +25,11 @@
 import org.ovirt.engine.api.model.Host;
 import org.ovirt.engine.api.model.IP;
 import org.ovirt.engine.api.model.IPs;
+import org.ovirt.engine.api.model.MemoryPolicy;
 import org.ovirt.engine.api.model.OperatingSystem;
 import org.ovirt.engine.api.model.OsType;
 import org.ovirt.engine.api.model.Payload;
+import org.ovirt.engine.api.model.PayloadFile;
 import org.ovirt.engine.api.model.Quota;
 import org.ovirt.engine.api.model.Template;
 import org.ovirt.engine.api.model.Usb;
@@ -33,30 +37,25 @@
 import org.ovirt.engine.api.model.VCpuPin;
 import org.ovirt.engine.api.model.VM;
 import org.ovirt.engine.api.model.VmAffinity;
-import org.ovirt.engine.api.model.PayloadFile;
 import org.ovirt.engine.api.model.VmPlacementPolicy;
-import org.ovirt.engine.api.model.MemoryPolicy;
 import org.ovirt.engine.api.model.VmPool;
 import org.ovirt.engine.api.model.VmStatus;
 import org.ovirt.engine.api.model.VmType;
-import org.ovirt.engine.core.common.utils.VmDeviceType;
+import org.ovirt.engine.api.restapi.utils.CustomPropertiesParser;
+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.MigrationSupport;
 import org.ovirt.engine.core.common.businessentities.OriginType;
-import org.ovirt.engine.core.common.businessentities.UsbPolicy;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmOsType;
+import org.ovirt.engine.core.common.businessentities.VmPayload;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
-import org.ovirt.engine.core.common.businessentities.VmPayload;
+import org.ovirt.engine.core.common.utils.VmDeviceType;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.NGuid;
 import org.ovirt.engine.core.compat.StringHelper;
-import org.ovirt.engine.api.restapi.utils.CustomPropertiesParser;
-import org.ovirt.engine.api.restapi.utils.UsbMapperUtils;
-
-import static org.ovirt.engine.core.compat.NGuid.createGuidFromString;
 
 public class VmMapper {
 
@@ -99,6 +98,8 @@
     }
     @Mapping(from = VM.class, to = VmStatic.class)
     public static VmStatic map(VM vm, VmStatic template) {
+        // USB policy will be updated outside of this method because there's
+        // a different mapping for it on create and update VM operations
         VmStatic staticVm = template != null ? template : new VmStatic();
         if (vm.isSetName()) {
             staticVm.setvm_name(vm.getName());
@@ -216,9 +217,6 @@
         }
         if (vm.isSetCustomProperties() && 
vm.getCustomProperties().isSetCustomProperty()) {
             
staticVm.setCustomProperties(CustomPropertiesParser.parse(vm.getCustomProperties().getCustomProperty()));
-        }
-        if (vm.isSetUsb() && vm.getUsb().isSetEnabled()) {
-            staticVm.setusb_policy(vm.getUsb().isEnabled() ? 
UsbPolicy.ENABLED_LEGACY : UsbPolicy.DISABLED);
         }
         if (vm.isSetQuota() && vm.getQuota().isSetId()) {
             staticVm.setQuotaId(new Guid(vm.getQuota().getId()));
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
index 517a7e6..cb3c230 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
@@ -1268,6 +1268,9 @@
     @DefaultStringValue("Cannot ${action} ${type}. Illegal Domain name: 
${Domain}. Domain name has unsupported special character ${Char}.")
     String ACTION_TYPE_FAILED_ILLEGAL_DOMAIN_NAME();
 
+    @DefaultStringValue("Cannot ${action} ${type}. Illegal USB policy is 
provided, cannot determine whether a legacy or native USB policy should be 
set.")
+    String ACTION_TYPE_FAILED_ILLEGAL_USB_POLICY();
+
     @DefaultStringValue("Cannot ${action} ${type}. Compatibility version is 
invalid, previous value restored.")
     String ACTION_TYPE_FAILED_CANNOT_DECREASE_COMPATIBILITY_VERSION();
 
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
index 3a5d18f..58e258e 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
@@ -475,6 +475,7 @@
 ACTION_TYPE_FAILED_ILLEGAL_MEMORY_SIZE=Cannot ${action} ${type}. Illegal 
memory size is provided, size needs to be between ${minMemorySize} MB and 
${maxMemorySize} MB.
 ACTION_TYPE_FAILED_ILLEGAL_NUM_OF_MONITORS=Cannot ${action} ${type}. Illegal 
number of monitors is provided, max allowed number of monitors is 1 for VNC and 
the max number in the ValidNumOfMonitors configuration variable for Spice.
 ACTION_TYPE_FAILED_ILLEGAL_DOMAIN_NAME=Cannot ${action} ${type}. Illegal 
Domain name: ${Domain}. Domain name has unsupported special character ${Char}.
+ACTION_TYPE_FAILED_ILLEGAL_USB_POLICY=Cannot ${action} ${type}. Illegal USB 
policy is provided, cannot determine whether a legacy or native USB policy 
should be set.
 ACTION_TYPE_FAILED_CANNOT_DECREASE_COMPATIBILITY_VERSION=Cannot ${action} 
${type}. Compatibility version is invalid, previous value restored.
 ACTION_TYPE_FAILED_GIVEN_VERSION_NOT_SUPPORTED=Cannot ${action} ${type}. 
Selected Compatibility Version is not supported.
 NETWORK_ADDR_MANDATORY_IN_STATIC_IP=Network address must be specified when 
using static ip
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
 
b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
index bf8f913..3a57535 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
+++ 
b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
@@ -473,6 +473,7 @@
 ACTION_TYPE_FAILED_ILLEGAL_MEMORY_SIZE=Cannot ${action} ${type}. Illegal 
memory size is provided, size needs to be between ${minMemorySize} MB and 
${maxMemorySize} MB.
 ACTION_TYPE_FAILED_ILLEGAL_NUM_OF_MONITORS=Cannot ${action} ${type}. Illegal 
number of monitors is provided, max allowed number of monitors is 1 for VNC and 
the max number in the ValidNumOfMonitors configuration variable for Spice.
 ACTION_TYPE_FAILED_ILLEGAL_DOMAIN_NAME=Cannot ${action} ${type}. Illegal 
Domain name: ${Domain}. Domain name has unsupported special character ${Char}.
+ACTION_TYPE_FAILED_ILLEGAL_USB_POLICY=Cannot ${action} ${type}. Illegal USB 
policy is provided, cannot determine whether a legacy or native USB policy 
should be set.
 ACTION_TYPE_FAILED_CANNOT_DECREASE_COMPATIBILITY_VERSION=Cannot ${action} 
${type}. Compatibility version is invalid, previous value restored.
 ACTION_TYPE_FAILED_GIVEN_VERSION_NOT_SUPPORTED=Cannot ${action} ${type}. 
Selected Compatibility Version is not supported.
 NETWORK_ADDR_MANDATORY_IN_STATIC_IP=Network address must be specified when 
using static ip


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If74bf6ede2fc0f932db8dfcd7951b6bcf90b7744
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Arik Hadas <aha...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to