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
