Moti Asayag has uploaded a new change for review.

Change subject: engine: Add more validations for vnic profiles
......................................................................

engine: Add more validations for vnic profiles

The patch adds validation for the custom properties value
set for a vnic profile and also verifies a profile which
belongs to an external network is not set for port mirroring.

Change-Id: I2217e0d3bb6ee74f5c208964e2e06c4ecf916ebf
Signed-off-by: Moti Asayag <[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
4 files changed, 61 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/66/17366/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 55dcc99..3f3b761 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,7 +25,9 @@
         return validate(validator.vnicProfileIsSet())
                 && validate(validator.networkExists())
                 && validate(validator.vnicProfileForVmNetworkOnly())
-                && validate(validator.vnicProfileNameNotUsed());
+                && validate(validator.vnicProfileNameNotUsed())
+                && validate(validator.portMirroringNotSetIfExternalNetwork())
+                && 
validator.validateCustomProperties(getReturnValue().getCanDoActionMessages());
     }
 
     @Override
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 a844f21..8018fc3 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,7 +29,9 @@
                 && validate(validator.networkExists())
                 && validate(validator.vnicProfileNameNotUsed())
                 && validate(validator.networkNotChanged())
-                && validate(validator.portMirroringNotChangedIfUsedByVms());
+                && validate(validator.portMirroringNotChangedIfUsedByVms())
+                && validate(validator.portMirroringNotSetIfExternalNetwork())
+                && 
validator.validateCustomProperties(getReturnValue().getCanDoActionMessages());
     }
 
     @Override
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 ba387d8..84ea5b9 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
@@ -6,12 +6,16 @@
 import org.apache.commons.lang.ObjectUtils;
 import org.ovirt.engine.core.bll.ValidationResult;
 import org.ovirt.engine.core.common.businessentities.Nameable;
+import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType;
 import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.core.common.businessentities.network.VnicProfile;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.utils.ReplacementUtils;
+import org.ovirt.engine.core.utils.customprop.DevicePropertiesUtils;
+import org.ovirt.engine.core.utils.customprop.ValidationError;
 
 public class VnicProfileValidator {
 
@@ -97,6 +101,26 @@
         return vnicProfileNotUsedByVms();
     }
 
+    public boolean validateCustomProperties(List<String> messages) {
+        StoragePool dataCenter = 
getDbFacade().getStoragePoolDao().get(getNetwork().getDataCenterId());
+        List<ValidationError> errors =
+                
DevicePropertiesUtils.getInstance().validateProperties(dataCenter.getcompatibility_version(),
+                        VmDeviceGeneralType.INTERFACE,
+                        vnicProfile.getCustomProperties());
+        if (errors.isEmpty()) {
+            
DevicePropertiesUtils.getInstance().handleCustomPropertiesError(errors, 
messages);
+            return false;
+        }
+
+        return true;
+    }
+
+    public ValidationResult portMirroringNotSetIfExternalNetwork() {
+        return !vnicProfile.isPortMirroring() || !getNetwork().isExternal()
+                ? ValidationResult.VALID
+                : new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_PORT_MIRRORED);
+    }
+
     protected Network getNetwork() {
         if (network == null) {
             network = 
getDbFacade().getNetworkDao().get(vnicProfile.getNetworkId());
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 ee46842..ed8a9f9 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
@@ -262,4 +262,35 @@
         when(networkDao.get(any(Guid.class))).thenReturn(network);
         assertThat(validator.vnicProfileForVmNetworkOnly(), matcher);
     }
+
+    @Test
+    public void externalNetworkPortMirroring() throws Exception {
+        externalNetworkPortMirroringTest(true,
+                true,
+                
failsWith(VdcBllMessages.ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_PORT_MIRRORED));
+    }
+
+    @Test
+    public void externalNetworkNotPortMirroring() throws Exception {
+        externalNetworkPortMirroringTest(true, false, isValid());
+    }
+
+    @Test
+    public void internalNetworkPortMirroring() throws Exception {
+        externalNetworkPortMirroringTest(false, true, isValid());
+    }
+
+    @Test
+    public void internalNetworkNotPortMirroring() throws Exception {
+        externalNetworkPortMirroringTest(false, false, isValid());
+    }
+
+    private void externalNetworkPortMirroringTest(boolean externalNetwork,
+            boolean portMirroring,
+            Matcher<ValidationResult> matcher) {
+        when(networkDao.get(any(Guid.class))).thenReturn(network);
+        when(network.isExternal()).thenReturn(externalNetwork);
+        when(vnicProfile.isPortMirroring()).thenReturn(portMirroring);
+        assertThat(validator.portMirroringNotSetIfExternalNetwork(), matcher);
+    }
 }


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

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

Reply via email to