Alona Kaplan has uploaded a new change for review.

Change subject: engine: Add compatibility version check to qos on profiles bll 
commands
......................................................................

engine: Add compatibility version check to qos on profiles bll commands

Add canDoAction check to Add/UpdateVnicProfile commands
to make sure that network qos set just if the cluster compatibility
version supports it.

Change-Id: I58f21e68f2c58792c21982f4a60f73be4c744c5e
Signed-off-by: Alona Kaplan <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVnicProfileCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
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
9 files changed, 72 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/32/18032/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVnicProfileCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVnicProfileCommand.java
index 25b931c..c872921 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVnicProfileCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVnicProfileCommand.java
@@ -25,6 +25,7 @@
         return validate(validator.vnicProfileIsSet())
                 && validate(validator.networkExists())
                 && validate(validator.networkQosExistsOrNull())
+                && validate(validator.networkQosSupported())
                 && validate(validator.vnicProfileForVmNetworkOnly())
                 && validate(validator.vnicProfileNameNotUsed())
                 && validate(validator.portMirroringNotSetIfExternalNetwork())
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java
index 5be5078..5769e6b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java
@@ -29,6 +29,7 @@
                 && validate(validator.vnicProfileNameNotUsed())
                 && validate(validator.networkNotChanged())
                 && validate(validator.networkQosExistsOrNull())
+                && validate(validator.networkQosSupported())
                 && validate(validator.portMirroringNotChangedIfUsedByVms())
                 && validate(validator.portMirroringNotSetIfExternalNetwork())
                 && 
validator.validateCustomProperties(getReturnValue().getCanDoActionMessages());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
index 005b23c..7c0365f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
@@ -5,6 +5,7 @@
 
 import org.apache.commons.lang.ObjectUtils;
 import org.ovirt.engine.core.bll.ValidationResult;
+import org.ovirt.engine.core.common.FeatureSupported;
 import org.ovirt.engine.core.common.businessentities.Nameable;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.VM;
@@ -49,6 +50,15 @@
         return new NetworkValidator(getNetwork()).networkIsSet();
     }
 
+    public ValidationResult networkQosSupported() {
+        return vnicProfile.getNetworkQosId() == null
+                || 
FeatureSupported.networkQoS(getDbFacade().getStoragePoolDao()
+                        .get(getNetwork().getDataCenterId())
+                        .getcompatibility_version())
+                ? ValidationResult.VALID
+                : new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED);
+    }
+
     public ValidationResult networkQosExistsOrNull() {
         return vnicProfile.getNetworkQosId() == null
                 || 
getDbFacade().getQosDao().get(vnicProfile.getNetworkQosId()) != null
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
index 289cfec..72d911d 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
@@ -15,24 +15,30 @@
 
 import org.hamcrest.Matcher;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.ovirt.engine.core.bll.ValidationResult;
+import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.core.common.businessentities.network.NetworkQoS;
 import org.ovirt.engine.core.common.businessentities.network.VnicProfile;
+import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.dao.StoragePoolDAO;
 import org.ovirt.engine.core.dao.VmDAO;
 import org.ovirt.engine.core.dao.VmTemplateDAO;
 import org.ovirt.engine.core.dao.network.NetworkDao;
 import org.ovirt.engine.core.dao.network.NetworkQoSDao;
 import org.ovirt.engine.core.dao.network.VnicProfileDao;
+import org.ovirt.engine.core.utils.MockConfigRule;
 
 @RunWith(MockitoJUnitRunner.class)
 public class VnicProfileValidatorTest {
@@ -56,6 +62,9 @@
     private NetworkQoSDao networkQosDao;
 
     @Mock
+    private StoragePoolDAO dbDao;
+
+    @Mock
     private VmDAO vmDao;
 
     @Mock
@@ -67,9 +76,15 @@
     @Mock
     private NetworkQoS networkQos;
 
+    @Mock
+    private StoragePool dc;
+
     private List<VnicProfile> vnicProfiles = new ArrayList<>();
 
     private VnicProfileValidator validator;
+
+    @Rule
+    public MockConfigRule mockConfigRule = new MockConfigRule();
 
     @Before
     public void setup() {
@@ -83,6 +98,7 @@
         when(dbFacade.getNetworkDao()).thenReturn(networkDao);
         when(dbFacade.getQosDao()).thenReturn(networkQosDao);
         when(dbFacade.getVmDao()).thenReturn(vmDao);
+        when(dbFacade.getStoragePoolDao()).thenReturn(dbDao);
 
         // mock their getters
         when(vnicProfileDao.get(any(Guid.class))).thenReturn(vnicProfile);
@@ -139,8 +155,43 @@
     @Test
     public void networkQosDoesntExist() throws Exception {
         when(vnicProfile.getNetworkQosId()).thenReturn(DEFAULT_GUID);
-        when(networkQosDao.get(any(Guid.class))).thenReturn(null);
-        assertThat(validator.networkQosExistsOrNull(), 
failsWith(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS));
+        when(networkDao.get(any(Guid.class))).thenReturn(null);
+        assertThat(validator.networkQosExistsOrNull(),
+                
failsWith(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS));
+    }
+
+    public void networkQosSupportedTest(Matcher<ValidationResult> matcher, 
Guid networkQosId, boolean featureSupported) {
+        when(vnicProfile.getNetworkQosId()).thenReturn(networkQosId);
+        when(networkDao.get(any(Guid.class))).thenReturn(network);
+        when(dbDao.get(any(Guid.class))).thenReturn(dc);
+        Version version = mock(Version.class);
+        when(dc.getcompatibility_version()).thenReturn(version);
+        mockConfigRule.mockConfigValue(ConfigValues.NetworkQoSSupported,
+                dc.getcompatibility_version(),
+                featureSupported);
+        assertThat(validator.networkQosSupported(), matcher);
+    }
+
+    @Test
+    public void networkQosSetAndSupported() throws Exception {
+        networkQosSupportedTest(isValid(), DEFAULT_GUID, true);
+    }
+
+    @Test
+    public void networkQosNotSetAndSupported() throws Exception {
+        networkQosSupportedTest(isValid(), null, true);
+    }
+
+    @Test
+    public void networkQosSetAndNotSupported() throws Exception {
+        
networkQosSupportedTest(failsWith(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED),
+                DEFAULT_GUID,
+                false);
+    }
+
+    @Test
+    public void networkQosNotNotSetAndNotSupported() throws Exception {
+        networkQosSupportedTest(isValid(), null, true);
     }
 
     private void vnicProfileAvailableTest(Matcher<ValidationResult> matcher, 
List<VnicProfile> vnicProfiles) {
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
index 276e24f..14dd4ad 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
@@ -387,6 +387,7 @@
     ACTION_TYPE_FAILED_NETWORK_IN_USE(ErrorType.CONFLICT),
     NETWORK_NOT_EXISTS(ErrorType.BAD_PARAMETERS),
     ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS(ErrorType.BAD_PARAMETERS),
+    ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED(ErrorType.NOT_SUPPORTED),
     NETWORK_NOT_EXISTS_IN_CLUSTER(ErrorType.BAD_PARAMETERS),
     NETWORK_OLD_NETWORK_NOT_SPECIFIED(ErrorType.BAD_PARAMETERS),
     NETWORK_CAN_NOT_REMOVE_DEFAULT_NETWORK(ErrorType.CONSTRAINT_VIOLATION),
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 47cb478..35b30dd 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -422,6 +422,7 @@
 NETWORK_ALREADY_ATTACHED_TO_INTERFACE=Logical Network is already attached to a 
Network Interface.
 NETWORK_NOT_EXISTS=The specified Logical Network doesn't exist.
 ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS=The specified Network QoS doesn't 
exist.
+ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED=Cannot ${action} ${type}. Network 
QoS is not supported for this cluster's compatibility version.
 EXTERNAL_NETWORK_CANNOT_BE_PROVISIONED=The specified external network cannot 
be configured on the host's interface.
 ERROR_CANNOT_RECOVERY_STORAGE_POOL_THERE_IS_ACTIVE_DATA_DOMAINS=Cannot recover 
Data Center with active Data Storage Domain in Data Center.
 ERROR_CANNOT_RECOVERY_STORAGE_POOL_STORAGE_TYPE_MISSMATCH=Cannot recover Data 
Center. Mismatch between Storage Domain type and Data Center type.
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 6f30ea8..96d191f 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
@@ -1147,6 +1147,9 @@
     @DefaultStringValue("The specified Network QoS doesn't exist.")
     String ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS();
 
+    @DefaultStringValue("Cannot ${action} ${type}. Network QoS is not 
supported for this cluster's compatibility version.")
+    String ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED();
+
     @DefaultStringValue("Cannot ${action} ${type}. The specified VM network 
interface profile doesn't exist.")
     String ACTION_TYPE_FAILED_VNIC_PROFILE_NOT_EXISTS();
 
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 8adafcf..65d42ed 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
@@ -402,6 +402,7 @@
 NETWORK_ALREAY_ATTACH_TO_INTERFACE=Logical Network is already attached to a 
Network Interface.
 NETWORK_NOT_EXISTS=The specified Logical Network doesn't exist.
 ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS=The specified Network QoS doesn't 
exist.
+ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED=Cannot ${action} ${type}. Network 
QoS is not supported for this cluster's compatibility version.
 ACTION_TYPE_FAILED_VNIC_PROFILE_NOT_EXISTS=Cannot ${action} ${type}. The 
specified VM network interface profile doesn't exist.
 ACTION_TYPE_FAILED_VNIC_PROFILE_NAME_IN_USE=Cannot ${action} ${type}. The VM 
network interface profile's name is already used by an existing profile for the 
same network.\n-Please choose a different name.
 ACTION_TYPE_FAILED_VNIC_PROFILE_IN_USE=Cannot ${action} ${type}. Several 
${entities} (${ENTITIES_USING_VNIC_PROFILE_COUNTER}) are using this VM network 
interface profile:\n${ENTITIES_USING_VNIC_PROFILE}\n - Please remove it from 
all ${entities} that are using it and try again.
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 c60e334..b3458a6 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
@@ -426,6 +426,7 @@
 NETWORK_ALREAY_ATTACH_TO_INTERFACE=Logical Network is already attached to a 
Network Interface.
 NETWORK_NOT_EXISTS=The specified Logical Network doesn't exist.
 ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS=The specified Network QoS doesn't 
exist.
+ACTION_TYPE_FAILED_NETWORK_QOS_NOT_SUPPORTED=Cannot ${action} ${type}. Network 
QoS is not supported for this cluster's compatibility version.
 EXTERNAL_NETWORK_CANNOT_BE_PROVISIONED=The specified external network cannot 
be configured on the host's interface.
 ERROR_CANNOT_RECOVERY_STORAGE_POOL_THERE_IS_ACTIVE_DATA_DOMAINS=Cannot recover 
Data Center with active Data Storage Domain in Data Center.
 ERROR_CANNOT_RECOVERY_STORAGE_POOL_STORAGE_TYPE_MISSMATCH=Cannot recover Data 
Center. Mismatch between Storage Domain type and Data Center type.


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I58f21e68f2c58792c21982f4a60f73be4c744c5e
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alona Kaplan <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to