Eliraz Levi has uploaded a new change for review. Change subject: engine: integrate CidrValidation to backend ......................................................................
engine: integrate CidrValidation to backend adding @Cidr and UTest classes Change-Id: Ib4dc94cc350dc03195c3f24ba783036592e3c03e Bug-Url: https://bugzilla.redhat.com/1080074 Signed-off-by: Eliraz Levi <el...@redhat.com> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/ExternalSubnet.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/CidrConstraint.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/annotation/Cidr.java A backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/utils/CidrAnnotationTest.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 6 files changed, 131 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/40/32540/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/ExternalSubnet.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/ExternalSubnet.java index 70ab587..d94c86f 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/ExternalSubnet.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/ExternalSubnet.java @@ -7,6 +7,7 @@ import org.ovirt.engine.core.common.businessentities.IVdcQueryable; import org.ovirt.engine.core.common.businessentities.Nameable; +import org.ovirt.engine.core.common.validation.annotation.Cidr; import org.ovirt.engine.core.common.validation.group.RemoveEntity; public class ExternalSubnet extends IVdcQueryable implements Serializable, Nameable { @@ -18,6 +19,7 @@ private String name; + @Cidr private String cidr; private IpVersion ipVersion; diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/CidrConstraint.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/CidrConstraint.java new file mode 100644 index 0000000..4b16b83 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/CidrConstraint.java @@ -0,0 +1,31 @@ +package org.ovirt.engine.core.common.validation; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +import org.ovirt.engine.core.common.validation.annotation.Cidr; + +public class CidrConstraint implements ConstraintValidator<Cidr, String> { + + @Override + public void initialize(Cidr constraintAnnotation) { + } + + @Override + public boolean isValid(String cidr, ConstraintValidatorContext context) { + boolean isCidrFormat = CidrValidator.isCidrFormatValid(cidr); + if (!isCidrFormat) { + return false; + } + boolean isNetworkAddress = CidrValidator.isCidrValidNetworkAddress(cidr); + if (!isNetworkAddress) { + context.disableDefaultConstraintViolation(); + context.buildConstraintViolationWithTemplate("CIDR_NOT_NETWORK_ADDRESS") + .addNode("cidr") + .addConstraintViolation(); + return false; + } + return true; + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/annotation/Cidr.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/annotation/Cidr.java new file mode 100644 index 0000000..13baf5a --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/annotation/Cidr.java @@ -0,0 +1,29 @@ +package org.ovirt.engine.core.common.validation.annotation; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import javax.validation.Constraint; +import javax.validation.Payload; + +import org.ovirt.engine.core.common.validation.CidrConstraint; + +/*** + * the annotation valid + * @author elevi + */ +@Target({ FIELD }) +@Retention(RUNTIME) +@Documented +@Constraint(validatedBy = CidrConstraint.class) +public @interface Cidr { + String message() default "BAD_CIDR_FORMAT"; + + Class<?>[] groups() default {}; + + Class<? extends Payload>[] payload() default {}; +} diff --git a/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/utils/CidrAnnotationTest.java b/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/utils/CidrAnnotationTest.java new file mode 100644 index 0000000..d7c8a56 --- /dev/null +++ b/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/utils/CidrAnnotationTest.java @@ -0,0 +1,60 @@ +package org.ovirt.engine.core.common.utils; + +import static org.junit.Assert.assertEquals; + +import java.util.Collection; +import java.util.Set; + +import javax.validation.ConstraintViolation; +import javax.validation.Validator; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.ovirt.engine.core.common.validation.CidrValidatorTest; +import org.ovirt.engine.core.common.validation.annotation.Cidr; + +@RunWith(Parameterized.class) +public class CidrAnnotationTest { + + private String cidr; + private boolean expectedResult; + private Validator validator; + + public CidrAnnotationTest(String cidr, boolean expectedResult) { + this.cidr = cidr; + this.expectedResult = expectedResult; + } + + @Before + public void setup() throws Exception { + validator = ValidationUtils.getValidator(); + } + + @Test + public void checkCidrAnnotation() { + CidrContainer container = new CidrContainer(cidr); + Set<ConstraintViolation<CidrContainer>> result = validator.validate(container); + assertEquals("Failed to validate name: " + container.getCidr(), expectedResult, result.isEmpty()); + } + + @Parameterized.Parameters + public static Collection<Object[]> namesParams() { + return CidrValidatorTest.data(); + } + + private class CidrContainer { + @Cidr + private String cidr; + + public CidrContainer(String cidr) { + super(); + this.cidr = cidr; + } + + public String getCidr() { + return cidr; + } + } +} 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 0368c1a..1f08a2d 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -1265,3 +1265,6 @@ KDUMP_DETECTION_NOT_ENABLED_FOR_VDS=Cannot ${action} ${type}. Kdump integration is not enabled for host '${VdsName}'. KDUMP_DETECTION_NOT_CONFIGURED_ON_VDS=Cannot ${action} ${type}. Kdump is not properly configured on host '${VdsName}'. +CIDR_NOT_NETWORK_ADDRESS=Cidr not represnting a network address.\nplease ensure ip and mask are matching to network ip address. \nexample: valid network address: 2.2.0.0/16 \ninvalid: 2.2.0.1/16 +BAD_CIDR_FORMAT=Cidr bad format, expected:\n x.x.x.x/y where:\n x belongs to [0,255] \n y belongs to [0,32] \n both inclusive + 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 bcf8b78..59b5ea4 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 @@ -3373,4 +3373,10 @@ @DefaultStringValue("Cannot ${action} ${type}. Target cluster belongs to different Data Center.") String VDS_CLUSTER_ON_DIFFERENT_STORAGE_POOL(); + + @DefaultStringValue("Cidr not represnting a network address.\nplease ensure ip and mask are matching to network ip address. \nexample: valid network address: 2.2.0.0/16 \ninvalid: 2.2.0.1/16") + String CIDR_NOT_NETWORK_ADDRESS(); + + @DefaultStringValue("Cidr bad format, expected:\n x.x.x.x/y where:\n x belongs to [0,255] \n y belongs to [0,32] \n both inclusive") + String BAD_CIDR_FORMAT(); } -- To view, visit http://gerrit.ovirt.org/32540 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib4dc94cc350dc03195c3f24ba783036592e3c03e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Eliraz Levi <el...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches