From: Ryan Vail Date: Tue, 8 Dec 2015 17:21:55 +0000 (-0700) Subject: Minor fixes and adding unit testing for validators X-Git-Tag: release/beryllium~19^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=a2fc60e8f0a237d2d82a3322807434c3200c1f31;p=packetcable.git Minor fixes and adding unit testing for validators -Renamed GateSpecValidatator to GateSpecValidator -Added null checks to a few foreach loops -Added new JUnit Rule, Params to add Parametrized testing with a developer friendly interface. -Lots of tests added for validation code Change-Id: I3ce0b8c0d3698cf2ef364c5b9862bc152af7b586 Signed-off-by: Ryan Vail --- diff --git a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/QosValidatorProviderFactory.java b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/QosValidatorProviderFactory.java index c523f7f..5745806 100644 --- a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/QosValidatorProviderFactory.java +++ b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/QosValidatorProviderFactory.java @@ -12,7 +12,7 @@ import org.opendaylight.controller.packetcable.provider.validation.ValidatorProv import org.opendaylight.controller.packetcable.provider.validation.ValidatorProviderFactory; import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.AppValidator; import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.AppsValidator; -import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.GateSpecValidatator; +import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.GateSpecValidator; import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.GateValidator; import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.GatesValidator; import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.SubscriberValidator; @@ -58,7 +58,7 @@ public class QosValidatorProviderFactory implements ValidatorProviderFactory { provider.put(Gates.class, new GatesValidator()); provider.put(Gate.class, new GateValidator()); - provider.put(GateSpec.class, new GateSpecValidatator()); + provider.put(GateSpec.class, new GateSpecValidator()); provider.put(TrafficProfile.class, new TrafficProfileValidator()); diff --git a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateSpecValidatator.java b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateSpecValidator.java similarity index 93% rename from packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateSpecValidatator.java rename to packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateSpecValidator.java index 36d65f2..0d3868f 100644 --- a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateSpecValidatator.java +++ b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateSpecValidator.java @@ -14,7 +14,7 @@ import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gate.spec /** * @author rvail */ -public class GateSpecValidatator extends AbstractValidator { +public class GateSpecValidator extends AbstractValidator { private static final String DIRECTION = "gate-spec.direction"; diff --git a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateValidator.java b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateValidator.java index d90e646..58a9efd 100644 --- a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateValidator.java +++ b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateValidator.java @@ -22,7 +22,7 @@ public class GateValidator extends AbstractValidator { private static final String TRAFFIC_PROFILE = "gate.traffic-profile"; private static final String CLASSIFIERS = "gate.classifiers"; -// private final GateSpecValidatator gateSpecValidatator = new GateSpecValidatator(); +// private final GateSpecValidator gateSpecValidatator = new GateSpecValidator(); private final TrafficProfileValidator trafficProfileValidator = new TrafficProfileValidator(); private final ClassifiersValidator classifiersValidator = new ClassifiersValidator(); diff --git a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GatesValidator.java b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GatesValidator.java index e8d5ea1..5878876 100644 --- a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GatesValidator.java +++ b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GatesValidator.java @@ -27,8 +27,10 @@ public class GatesValidator extends AbstractValidator { } if (extent == Extent.NODE_AND_SUBTREE) { - for (Gate gate : gates.getGate()) { - validateChild(gateValidator, gate); + if (gates.getGate() != null) { + for (Gate gate : gates.getGate()) { + validateChild(gateValidator, gate); + } } } } diff --git a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscribersValidator.java b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscribersValidator.java index 0e7e480..e5e5286 100644 --- a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscribersValidator.java +++ b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscribersValidator.java @@ -27,8 +27,10 @@ public class SubscribersValidator extends AbstractValidator { } if (extent == Extent.NODE_AND_SUBTREE) { - for (Subscriber subscriber : subscribers.getSubscriber()) { - validateChild(subscriberValidator , subscriber); + if (subscribers.getSubscriber() != null) { + for (Subscriber subscriber : subscribers.getSubscriber()) { + validateChild(subscriberValidator, subscriber); + } } } } diff --git a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/TrafficProfileValidator.java b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/TrafficProfileValidator.java index d78d15e..8592256 100644 --- a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/TrafficProfileValidator.java +++ b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/TrafficProfileValidator.java @@ -20,7 +20,7 @@ public class TrafficProfileValidator extends AbstractValidator { @Override protected void doValidate(final TrafficProfile trafficProfile, final Extent extent) { - if (trafficProfile == null) { + if (trafficProfile == null) { getErrorMessages().add("traffic-profile must exist"); return; } diff --git a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifiersValidator.java b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifiersValidator.java index 5cd070e..a2d0917 100644 --- a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifiersValidator.java +++ b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifiersValidator.java @@ -20,7 +20,7 @@ public class ClassifiersValidator extends AbstractValidator { private static final String CLASSIFER_CONTAINER = "classifers.classifer-container"; - private ClassifierContainerValidator classifierContainerValidator = new ClassifierContainerValidator(); + private final ClassifierContainerValidator classifierContainerValidator = new ClassifierContainerValidator(); @Override protected void doValidate(final Classifiers classifiers, final Extent extent) { diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/test/rules/Params.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/test/rules/Params.java new file mode 100644 index 0000000..c4c439b --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/test/rules/Params.java @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.test.rules; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import org.junit.rules.ErrorCollector; +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +/** + * Rule that allows a test to be run with multiple parameters.

+ * Two ways to use + *
    + *
  1. Individual Method Annotation - {@link Params.UseParams}
    Used if only a few methods need to use the rule
  2. + *
  3. Class Annotation - {@link Params.AlwaysUseParams}
    Used if most/all methods will use the rule. Exceptions should be marked with {@link Params.DoNotUseParams}
  4. + *
+ * + * @author rvail + */ +public class Params implements TestRule { + + private final List allParams; + private final VerifiableErrorCollector errorCollector = new VerifiableErrorCollector(); + private Optional currentParam = null; + + + + public static Params of(E... allParams) { + return new Params<>(allParams); + } + + public static > Params of(Class enumClass) { + return new Params<>(enumClass.getEnumConstants()); + } + + private Params(List allParams) { + this.allParams = allParams; + } + + private Params(T[] allParams) { + this(Arrays.asList(allParams)); + } + + public T getCurrentParam() { + if (currentParam == null) { + throw new IllegalStateException("Params.getCurrentParam called from unannotated method/class"); + } + return currentParam.get(); + } + + @Override + public Statement apply(final Statement base, final Description description) { + if (!shouldUseParams(description)) { + return base; + } + return new Statement() { + + @Override + public void evaluate() throws Throwable { + + for (final T param : allParams) { + currentParam = Optional.of(param); + try { + base.evaluate(); + } catch (Throwable t) { + errorCollector.addError(new ParamsAssertionError(currentParam, t)); + } + } + currentParam = null; + errorCollector.verify(); + } + }; + } + + private boolean shouldUseParams(final Description description) { + final UseParams useParamsAnnotation = description.getAnnotation(UseParams.class); + boolean testUsesParams = (useParamsAnnotation != null); + if (!testUsesParams) { + final AlwaysUseParams alwaysUseParams = description.getTestClass().getAnnotation(AlwaysUseParams.class); + testUsesParams = (alwaysUseParams != null); + if (testUsesParams) { + testUsesParams = (description.getAnnotation(DoNotUseParams.class) == null); + } + } + + return testUsesParams; + } + + /** + * Method will use Params + */ + @Retention(RetentionPolicy.RUNTIME) + @Target({ElementType.METHOD}) + public @interface UseParams { + } + + + /** + * Method will not use Params + */ + @Retention(RetentionPolicy.RUNTIME) + @Target({ElementType.METHOD}) + public @interface DoNotUseParams { + } + + + /** + * All Methods in Class will use Params unless they are annotated with + * {@link Params.DoNotUseParams} + */ + @Retention(RetentionPolicy.RUNTIME) + @Target({ElementType.TYPE}) + public @interface AlwaysUseParams { + } + + + public static class ParamsAssertionError extends AssertionError { + ParamsAssertionError(Object param, Throwable t) { + super(String.format("\nParam: %s\n%s", Objects.toString(param), t)); + // We don't care where this is thrown from we care about the passed in cause + // use its stack trace + this.setStackTrace(t.getStackTrace()); + } + } + + + /** + * ErrorCollector.verify() is protected so extend ErrorCollector so we can call it. + */ + private class VerifiableErrorCollector extends ErrorCollector { + public void verify() throws Throwable { + super.verify(); + } + } + +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/DataValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/DataValidatorTest.java new file mode 100644 index 0000000..b92857c --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/DataValidatorTest.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.IsNull.nullValue; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; + +import com.google.common.collect.Maps; +import java.util.Map; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.CcapValidatorTest; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccaps.Ccap; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +/** + * @author rvail + */ +public class DataValidatorTest { + + @Test + public void badData() throws ValidationException { + final ValidatorProvider validatorProvider = mock(ValidatorProvider.class); + + doThrow(new ValidationException("unit-test-exception")) + .when(validatorProvider) + .validate(any(Class.class), any(Ccap.class), any(Validator.Extent.class)); + + + final Ccap ccap = mock(Ccap.class); + doReturn(Ccap.class) + .when(ccap) + .getImplementedInterface(); + + + DataValidator dataValidator = new DataValidator(validatorProvider); + + + Map, DataObject> dataMap = Maps.newHashMap(); + InstanceIdentifier iid = mock(InstanceIdentifier.class); + dataMap.put(iid, ccap); + + Map, ValidationException> validationMap = dataValidator.validate(dataMap, Validator.Extent.NODE_ONLY); + + assertThat(validationMap, is(not(nullValue()))); + assertThat(validationMap.size(), is(1)); + assertThat(validationMap.containsKey(iid), is(true)); + ValidationException ex = validationMap.get(iid); + assertThat(ex, is(not(nullValue()))); + + } + + @Test + public void validCcap() { + final ValidatorProvider validatorProvider = mock(ValidatorProvider.class); + + Map, DataObject> dataMap = Maps.newHashMap(); + InstanceIdentifier iid = mock(InstanceIdentifier.class); + dataMap.put(iid, CcapValidatorTest.buildValidCcapTree()); + + final DataValidator dataValidator = new DataValidator(validatorProvider); + Map, ValidationException> validationMap = dataValidator.validate(dataMap, Validator.Extent.NODE_ONLY); + + assertThat(validationMap.isEmpty(), is(true)); + + } + + @Test + public void validCcapExplictTyping() { + final ValidatorProvider validatorProvider = mock(ValidatorProvider.class); + + Map, Ccap> dataMap = Maps.newHashMap(); + InstanceIdentifier iid = mock(InstanceIdentifier.class); + dataMap.put(iid, CcapValidatorTest.buildValidCcapTree()); + + final DataValidator dataValidator = new DataValidator(validatorProvider); + Map, ValidationException> validationMap = dataValidator.validateOneType(dataMap, + Validator.Extent.NODE_ONLY); + + assertThat(validationMap.isEmpty(), is(true)); + + } + +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/CcapsValidatorProviderFactoryTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/CcapsValidatorProviderFactoryTest.java new file mode 100644 index 0000000..efa3f4d --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/CcapsValidatorProviderFactoryTest.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl; + +import static junit.framework.TestCase.assertNotNull; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.validation.ValidatorProvider; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.Ccaps; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccap.attributes.AmId; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccap.attributes.Connection; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccaps.Ccap; + +/** + * @author rvail + */ +public class CcapsValidatorProviderFactoryTest { + + private final CcapsValidatorProviderFactory factory = new CcapsValidatorProviderFactory(); + + @Test + public void validBuild() { + assertNotNull(factory.build()); + assertThat(factory.build(), instanceOf(ValidatorProvider.class)); + + assertNotNull(factory.build().validatorFor(Ccaps.class)); + assertNotNull(factory.build().validatorFor(Ccap.class)); + assertNotNull(factory.build().validatorFor(AmId.class)); + assertNotNull(factory.build().validatorFor(Connection.class)); + } + +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/QosValidatorProviderFactoryTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/QosValidatorProviderFactoryTest.java new file mode 100644 index 0000000..c6bc340 --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/QosValidatorProviderFactoryTest.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl; + +import static junit.framework.TestCase.assertNotNull; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.validation.ValidatorProvider; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.Classifiers; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.classifiers.ClassifierContainer; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.classifier.Classifier; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.ext.classifier.ExtClassifier; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gate.spec.GateSpec; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.Apps; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.App; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.Subscribers; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.subscribers.Subscriber; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.ipv6.classifier.Ipv6Classifier; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.traffic.profile.TrafficProfile; + +/** + * @author rvail + */ +public class QosValidatorProviderFactoryTest { + + private final QosValidatorProviderFactory factory = new QosValidatorProviderFactory(); + + @Test + public void validBuild() { + assertNotNull(factory.build()); + assertThat(factory.build(), instanceOf(ValidatorProvider.class)); + + assertNotNull(factory.build().validatorFor(Apps.class)); + assertNotNull(factory.build().validatorFor(App.class)); + assertNotNull(factory.build().validatorFor(Subscribers.class)); + assertNotNull(factory.build().validatorFor(Subscriber.class)); + assertNotNull(factory.build().validatorFor(Gates.class)); + assertNotNull(factory.build().validatorFor(Gate.class)); + assertNotNull(factory.build().validatorFor(GateSpec.class)); + assertNotNull(factory.build().validatorFor(TrafficProfile.class)); + assertNotNull(factory.build().validatorFor(Classifiers.class)); + assertNotNull(factory.build().validatorFor(Classifier.class)); + assertNotNull(factory.build().validatorFor(ClassifierContainer.class)); + assertNotNull(factory.build().validatorFor(ExtClassifier.class)); + assertNotNull(factory.build().validatorFor(Ipv6Classifier.class)); + + } + +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/ValidatorProviderFactoryImplTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/ValidatorProviderFactoryImplTest.java new file mode 100644 index 0000000..5bd6433 --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/ValidatorProviderFactoryImplTest.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl; + +import static junit.framework.TestCase.assertNotNull; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.validation.ValidatorProvider; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.Ccaps; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccap.attributes.AmId; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccap.attributes.Connection; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccaps.Ccap; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.Classifiers; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.classifiers.ClassifierContainer; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.classifier.Classifier; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.ext.classifier.ExtClassifier; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gate.spec.GateSpec; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.Apps; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.App; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.Subscribers; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.subscribers.Subscriber; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.ipv6.classifier.Ipv6Classifier; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.traffic.profile.TrafficProfile; + +/** + * @author rvail + */ +public class ValidatorProviderFactoryImplTest { + + private final ValidatorProviderFactoryImpl factory = new ValidatorProviderFactoryImpl(); + + @Test + public void validBuild() { + assertNotNull(factory.build()); + assertThat(factory.build(), instanceOf(ValidatorProvider.class)); + + assertNotNull(factory.build().validatorFor(Ccaps.class)); + assertNotNull(factory.build().validatorFor(Ccap.class)); + assertNotNull(factory.build().validatorFor(AmId.class)); + assertNotNull(factory.build().validatorFor(Connection.class)); + + assertNotNull(factory.build().validatorFor(Apps.class)); + assertNotNull(factory.build().validatorFor(App.class)); + assertNotNull(factory.build().validatorFor(Subscribers.class)); + assertNotNull(factory.build().validatorFor(Subscriber.class)); + assertNotNull(factory.build().validatorFor(Gates.class)); + assertNotNull(factory.build().validatorFor(Gate.class)); + assertNotNull(factory.build().validatorFor(GateSpec.class)); + assertNotNull(factory.build().validatorFor(TrafficProfile.class)); + assertNotNull(factory.build().validatorFor(Classifiers.class)); + assertNotNull(factory.build().validatorFor(Classifier.class)); + assertNotNull(factory.build().validatorFor(ClassifierContainer.class)); + assertNotNull(factory.build().validatorFor(ExtClassifier.class)); + assertNotNull(factory.build().validatorFor(Ipv6Classifier.class)); + } + +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/ValidatorProviderImplTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/ValidatorProviderImplTest.java new file mode 100644 index 0000000..e82acb0 --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/ValidatorProviderImplTest.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; + +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.ConnectionValidator; +import org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps.ConnectionValidatorTest; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccap.attributes.Connection; + +/** + * @author rvail + */ +public class ValidatorProviderImplTest { + + private final ValidatorProviderImpl validatorProvider = new ValidatorProviderImpl(); + + @Test + public void testPutAndGetValidator() { + final ConnectionValidator validator = new ConnectionValidator(); + validatorProvider.put(Connection.class, validator); + assertNotNull(validatorProvider.validatorFor(Connection.class)); + assertSame(validator, validatorProvider.validatorFor(Connection.class)); + } + + @Test + public void testValidate() throws ValidationException { + final ConnectionValidator validator = new ConnectionValidator(); + validatorProvider.put(Connection.class, validator); + validatorProvider.validate(Connection.class, ConnectionValidatorTest.buildValidConnectionTree(), + Validator.Extent.NODE_ONLY); + } + +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/AmIdValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/AmIdValidatorTest.java new file mode 100644 index 0000000..001315a --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/AmIdValidatorTest.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps; + +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccap.attributes.AmId; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccap.attributes.AmIdBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class AmIdValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final AmIdValidator validator = new AmIdValidator(); + + @Test + public void testValid() throws Exception { + AmId amId = new AmIdBuilder() + .setAmTag(1) + .setAmType(1) + .build(); + + // this throw an exception if invalid + validator.validate(amId, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void testNoAmTag() throws Exception { + AmId amId = new AmIdBuilder() + .setAmType(1) + .build(); + + // this throw an exception if invalid + validator.validate(amId, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void testNoAmType() throws Exception { + AmId amId = new AmIdBuilder() + .setAmTag(1) + .build(); + + // this throw an exception if invalid + validator.validate(amId, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void testNullAmId() throws Exception { + // this throw an exception if invalid + validator.validate(null, extentParams.getCurrentParam()); + } + + public static AmId buildValidAmIdTree() { + return new AmIdBuilder() + .setAmType(1) + .setAmTag(2) + .build(); + } +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/CcapValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/CcapValidatorTest.java new file mode 100644 index 0000000..69c133b --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/CcapValidatorTest.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps; + +import java.util.Collections; +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ServiceClassName; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccaps.Ccap; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccaps.CcapBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class CcapValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final CcapValidator validator = new CcapValidator(); + + @Test(expected = ValidationException.class) + public void testNullCcap() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Params.DoNotUseParams + @Test(expected = NullPointerException.class) + public void testNullExtent() throws ValidationException { + validator.validate(buildValidCcapTree(), null); + } + + @Test(expected = ValidationException.class) + public void testNullCcapId() throws ValidationException { + final Ccap ccap = new CcapBuilder(buildValidCcapTree()) + // key is based off of CcapId so clear that too + .setKey(null) + .setCcapId(null) + .build(); + + validator.validate(ccap, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void testNullDownstreamScns() throws ValidationException { + final Ccap ccap = new CcapBuilder(buildValidCcapTree()) + .setDownstreamScns(null) + .build(); + + validator.validate(ccap, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void testEmptyDownstreamScns() throws ValidationException { + final Ccap ccap = new CcapBuilder(buildValidCcapTree()) + .setDownstreamScns(Collections.emptyList()) + .build(); + + validator.validate(ccap, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void testNullUpstreamScns() throws ValidationException { + final Ccap ccap = new CcapBuilder(buildValidCcapTree()) + .setUpstreamScns(null) + .build(); + + validator.validate(ccap, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void testEmptyUpstreamScns() throws ValidationException { + final Ccap ccap = new CcapBuilder(buildValidCcapTree()) + .setUpstreamScns(Collections.emptyList()) + .build(); + + validator.validate(ccap, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void testNullAmId() throws ValidationException { + final Ccap ccap = new CcapBuilder(buildValidCcapTree()) + .setAmId(null) + .build(); + + validator.validate(ccap, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void testNullConnection() throws ValidationException { + final Ccap ccap = new CcapBuilder(buildValidCcapTree()) + .setConnection(null) + .build(); + + validator.validate(ccap, extentParams.getCurrentParam()); + } + + @Test + public void testValid() throws ValidationException { + final Ccap ccap = buildValidCcapTree(); + + validator.validate(ccap, extentParams.getCurrentParam()); + } + + public static Ccap buildValidCcapTree() { + return new CcapBuilder() + .setCcapId("aCcapId") + .setDownstreamScns(Collections.singletonList(new ServiceClassName("down_scn"))) + .setUpstreamScns(Collections.singletonList(new ServiceClassName("up_scn"))) + .setAmId(AmIdValidatorTest.buildValidAmIdTree()) + .setConnection(ConnectionValidatorTest.buildValidConnectionTree()) + .build(); + } +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/CcapsValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/CcapsValidatorTest.java new file mode 100644 index 0000000..5abfc2c --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/CcapsValidatorTest.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps; + +import java.util.Collections; +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.Ccaps; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.CcapsBuilder; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccaps.Ccap; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccaps.CcapBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class CcapsValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final CcapsValidator validator = new CcapsValidator(); + + @Test(expected = ValidationException.class) + public void testNullCcaps() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Params.DoNotUseParams + @Test(expected = NullPointerException.class) + public void testNullExtent() throws ValidationException { + validator.validate(buildValidCcapsTree(), null); + } + + @Test + public void testNullListValid() throws ValidationException { + final Ccaps ccaps = new CcapsBuilder() + .setCcap(null) + .build(); + + validator.validate(ccaps, extentParams.getCurrentParam()); + } + + @Test + public void testEmptyListValid() throws ValidationException { + final Ccaps ccaps = new CcapsBuilder() + .setCcap(Collections.emptyList()) + .build(); + + validator.validate(ccaps, extentParams.getCurrentParam()); + } + + @Test + public void testValid() throws ValidationException { + final Ccap ccap = new CcapBuilder().setCcapId("aCcapId").build(); + + final Ccaps ccaps = new CcapsBuilder() + .setCcap(Collections.singletonList(ccap)) + .build(); + + validator.validate(ccaps, extentParams.getCurrentParam()); + } + + public static Ccaps buildValidCcapsTree() { + final Ccap ccap = CcapValidatorTest.buildValidCcapTree(); + return new CcapsBuilder() + .setCcap(Collections.singletonList(ccap)) + .build(); + } + + +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/ConnectionValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/ConnectionValidatorTest.java new file mode 100644 index 0000000..3c47502 --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/ccaps/ConnectionValidatorTest.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.ccaps; + +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccap.attributes.Connection; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ccap.attributes.ConnectionBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class ConnectionValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private ConnectionValidator validator = new ConnectionValidator(); + + @Test(expected = ValidationException.class) + public void testNullConnection() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Params.DoNotUseParams + @Test(expected = NullPointerException.class) + public void testNullExtent() throws ValidationException { + validator.validate(null, null); + } + + @Test(expected = ValidationException.class) + public void testNullIpAddress() throws ValidationException { + final Connection connection = new ConnectionBuilder(buildValidConnectionTree()) + .setIpAddress(null) + .build(); + + validator.validate(connection, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void testNullPortNumber() throws ValidationException { + final Connection connection = new ConnectionBuilder(buildValidConnectionTree()) + .setPort(null) + .build(); + + validator.validate(connection, extentParams.getCurrentParam()); + } + + @Test + public void testValid() throws ValidationException { + Connection connection = buildValidConnectionTree(); + validator.validate(connection, extentParams.getCurrentParam()); + } + + public static Connection buildValidConnectionTree() { + return new ConnectionBuilder() + .setIpAddress(new IpAddress(new Ipv4Address("192.168.1.100"))) + .setPort(new PortNumber(6500)) + .build(); + } +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/AppValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/AppValidatorTest.java new file mode 100644 index 0000000..d6ee78f --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/AppValidatorTest.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos; + +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.App; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.AppBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class AppValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final AppValidator validator = new AppValidator(); + + @Test(expected = ValidationException.class) + public void nullSubscribers() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Params.DoNotUseParams + @Test(expected = NullPointerException.class) + public void nullExtent() throws ValidationException { + validator.validate(buildValidApp(), null); + } + + @Test(expected = ValidationException.class) + public void nullAppId() throws ValidationException { + final App app = new AppBuilder(buildValidApp()) + .setAppId(null).setKey(null) + .build(); + + validator.validate(app, extentParams.getCurrentParam()); + } + + @Test + public void valid() throws ValidationException { + validator.validate(buildValidApp(), extentParams.getCurrentParam()); + } + + public static App buildValidApp() { + return new AppBuilder() + .setAppId("unit-test-app") + .setSubscribers(SubscribersValidatorTest.buildValidSubscriber()) + .build(); + } + +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/AppsValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/AppsValidatorTest.java new file mode 100644 index 0000000..3e1cedc --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/AppsValidatorTest.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos; + +import java.util.Collections; +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.Apps; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.AppsBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class AppsValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final AppsValidator validator = new AppsValidator(); + + @Test(expected = ValidationException.class) + public void nullApps() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Params.DoNotUseParams + @Test(expected = NullPointerException.class) + public void nullExtent() throws ValidationException { + validator.validate(buildValidApps(), null); + } + + @Test + public void valid() throws ValidationException { + validator.validate(buildValidApps(), extentParams.getCurrentParam()); + } + + public static Apps buildValidApps() { + return new AppsBuilder() + .setApp(Collections.singletonList(AppValidatorTest.buildValidApp())) + .build(); + } +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateSpecValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateSpecValidatorTest.java new file mode 100644 index 0000000..491512b --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateSpecValidatorTest.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos; + +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ServiceFlowDirection; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.TosByte; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gate.spec.GateSpec; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gate.spec.GateSpecBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class GateSpecValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final GateSpecValidator validator = new GateSpecValidator(); + + @Test(expected = ValidationException.class) + public void nullGateSpec() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Params.DoNotUseParams + @Test(expected = NullPointerException.class) + public void nullExtent() throws ValidationException { + validator.validate(buildValidGateSpec(), null); + } + + @Test + public void nullDirection() throws ValidationException { + // optional expect no exception + GateSpec gateSpec = new GateSpecBuilder(buildValidGateSpec()) + .setDirection(null) + .build(); + validator.validate(gateSpec, extentParams.getCurrentParam()); + } + + @Test + public void nullDscpTosMask() throws ValidationException { + // optional expect no exception + GateSpec gateSpec = new GateSpecBuilder(buildValidGateSpec()) + .setDscpTosMask(null) + .build(); + validator.validate(gateSpec, extentParams.getCurrentParam()); + } + + @Test + public void nullDscpTosOverwrite() throws ValidationException { + // optional expect no exception + GateSpec gateSpec = new GateSpecBuilder(buildValidGateSpec()) + .setDscpTosOverwrite(null) + .build(); + validator.validate(gateSpec, extentParams.getCurrentParam()); + } + + @Test + public void valid() throws ValidationException { + validator.validate(buildValidGateSpec(), extentParams.getCurrentParam()); + } + + public static GateSpec buildValidGateSpec() { + return new GateSpecBuilder() + .setDirection(ServiceFlowDirection.Us) + .setDscpTosMask(new TosByte((short) 0xff)) + .setDscpTosOverwrite(new TosByte((short) 0xa0)) + .build(); + } + +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateValidatorTest.java new file mode 100644 index 0000000..d80df0b --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GateValidatorTest.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos; + +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier.ClassifiersValidatorTest; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.Gate; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.subscribers.subscriber.gates.GateBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class GateValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final GateValidator validator = new GateValidator(); + + @Test(expected = ValidationException.class) + public void nullGate() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Params.DoNotUseParams + @Test(expected = NullPointerException.class) + public void nullExtent() throws ValidationException { + validator.validate(buildValidGate(), null); + } + + @Test(expected = ValidationException.class) + public void nullGateId() throws ValidationException { + Gate gate = new GateBuilder(buildValidGate()).setKey(null).setGateId(null).build(); + validator.validate(gate, extentParams.getCurrentParam()); + } + + @Test + public void nullGateSpec() throws ValidationException { + // gate spec is all optional, no exception expected + Gate gate = new GateBuilder(buildValidGate()).setGateSpec(null).build(); + validator.validate(gate, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullTrafficProfile() throws ValidationException { + Gate gate = new GateBuilder(buildValidGate()).setTrafficProfile(null).build(); + validator.validate(gate, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullClassifiers() throws ValidationException { + Gate gate = new GateBuilder(buildValidGate()).setClassifiers(null).build(); + validator.validate(gate, extentParams.getCurrentParam()); + } + + @Test + public void valid() throws ValidationException { + validator.validate(buildValidGate(), extentParams.getCurrentParam()); + } + + + public static Gate buildValidGate() { + return new GateBuilder() + .setGateId("unit-test-gate-id") + .setGateSpec(GateSpecValidatorTest.buildValidGateSpec()) + .setTrafficProfile(TrafficProfileValidatorTest.buildValidTrafficProfile()) + .setClassifiers(ClassifiersValidatorTest.buildValidClassifiers()) + .build(); + } +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GatesValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GatesValidatorTest.java new file mode 100644 index 0000000..0d8a499 --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/GatesValidatorTest.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos; + +import java.util.Collections; +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.subscribers.subscriber.Gates; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.subscribers.subscriber.GatesBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class GatesValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final GatesValidator validator = new GatesValidator(); + + @Test(expected = ValidationException.class) + public void nullGates() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Params.DoNotUseParams + @Test(expected = NullPointerException.class) + public void nullExtent() throws ValidationException { + validator.validate(buildValidGates(), null); + } + + @Test + public void valid() throws ValidationException { + validator.validate(buildValidGates(), extentParams.getCurrentParam()); + } + + public static Gates buildValidGates() { + return new GatesBuilder() + .setGate(Collections.singletonList(GateValidatorTest.buildValidGate())) + .build(); + } +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscriberValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscriberValidatorTest.java new file mode 100644 index 0000000..cd78b28 --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscriberValidatorTest.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos; + +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.subscribers.Subscriber; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.subscribers.SubscriberBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class SubscriberValidatorTest { + + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final SubscriberValidator validator = new SubscriberValidator(); + + @Test(expected = ValidationException.class) + public void nullSubscriber() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Params.DoNotUseParams + @Test(expected = NullPointerException.class) + public void nullExtent() throws ValidationException { + validator.validate(buildValidSubscriber(), null); + } + + @Test(expected = ValidationException.class) + public void nullSubscriberId() throws ValidationException { + final Subscriber subscriber = new SubscriberBuilder(buildValidSubscriber()) + .setSubscriberId(null).setKey(null) + .build(); + validator.validate(subscriber, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullGates() throws ValidationException { + final Subscriber subscriber = new SubscriberBuilder(buildValidSubscriber()) + .setGates(null) + .build(); + validator.validate(subscriber, extentParams.getCurrentParam()); + } + + @Test + public void valid() throws ValidationException { + validator.validate(buildValidSubscriber(), extentParams.getCurrentParam()); + } + + public static Subscriber buildValidSubscriber() { + return new SubscriberBuilder() + .setSubscriberId("76.76.76.76") + .setGates(GatesValidatorTest.buildValidGates()) + .build(); + } +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscribersValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscribersValidatorTest.java new file mode 100644 index 0000000..a410f10 --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/SubscribersValidatorTest.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos; + +import java.util.Collections; +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.Subscribers; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.gates.apps.app.SubscribersBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class SubscribersValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final SubscribersValidator validator = new SubscribersValidator(); + + @Test(expected = ValidationException.class) + public void nullSubscribers() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Params.DoNotUseParams + @Test(expected = NullPointerException.class) + public void nullExtent() throws ValidationException { + validator.validate(buildValidSubscriber(), null); + } + + @Test + public void valid() throws ValidationException { + validator.validate(buildValidSubscriber(), extentParams.getCurrentParam()); + } + + public static Subscribers buildValidSubscriber() { + return new SubscribersBuilder() + .setSubscriber(Collections.singletonList(SubscriberValidatorTest.buildValidSubscriber())) + .build(); + } + +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/TrafficProfileValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/TrafficProfileValidatorTest.java new file mode 100644 index 0000000..5694278 --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/TrafficProfileValidatorTest.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos; + +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.ServiceClassName; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.traffic.profile.TrafficProfile; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.traffic.profile.TrafficProfileBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class TrafficProfileValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final TrafficProfileValidator validator = new TrafficProfileValidator(); + + @Test(expected = ValidationException.class) + public void nullTrafficProfile() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Params.DoNotUseParams + @Test(expected = NullPointerException.class) + public void nullExtent() throws ValidationException { + validator.validate(buildValidTrafficProfile(), null); + } + + @Test + public void nullServiceClassName() throws ValidationException { + final TrafficProfile trafficProfile = new TrafficProfileBuilder(buildValidTrafficProfile()) + .setServiceClassName(null) + .build(); + validator.validate(buildValidTrafficProfile(), extentParams.getCurrentParam()); + } + + @Test + public void valid() throws ValidationException { + validator.validate(buildValidTrafficProfile(), extentParams.getCurrentParam()); + } + + + public static TrafficProfile buildValidTrafficProfile() { + return new TrafficProfileBuilder() + .setServiceClassName(new ServiceClassName("unit-test-scn")) + .build(); + } +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierChoiceValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierChoiceValidatorTest.java new file mode 100644 index 0000000..0d60aa6 --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierChoiceValidatorTest.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier; + +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.classifiers.classifier.container.ClassifierChoice; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoice; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.classifiers.classifier.container.classifier.choice.ExtClassifierChoiceBuilder; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoice; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.classifiers.classifier.container.classifier.choice.Ipv6ClassifierChoiceBuilder; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.classifiers.classifier.container.classifier.choice.QosClassifierChoiceBuilder; +import org.opendaylight.yangtools.yang.binding.DataContainer; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class ClassifierChoiceValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final ClassifierChoiceValidator validator = new ClassifierChoiceValidator(); + + @Test(expected = ValidationException.class) + public void testNullClassifierChoice() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Params.DoNotUseParams + @Test(expected = NullPointerException.class) + public void testNullExtent() throws ValidationException { + validator.validate(buildValidQosClassifierChoice(), null); + } + + @Test(expected = IllegalStateException.class) + public void testUnknownClassifierChoiceClass() throws ValidationException { + ClassifierChoice unknownChoice = new ClassifierChoice() { + @Override + public Class getImplementedInterface() { + return null; + } + }; + validator.validate(unknownChoice, extentParams.getCurrentParam()); + } + + @Test + public void testValid() throws ValidationException { + validator.validate(buildValidQosClassifierChoice(),extentParams.getCurrentParam()); + } + + @Test + public void testValidExt() throws ValidationException { + validator.validate(buildValidExtClassifierChoice(), extentParams.getCurrentParam()); + } + + @Test + public void testValidIpv6() throws ValidationException { + validator.validate(buildValidIpv6ClassifierChoice(), extentParams.getCurrentParam()); + } + + public static ClassifierChoice buildValidQosClassifierChoice() { + return new QosClassifierChoiceBuilder() + .setClassifier(ClassifierValidatorTest.buildValidClassifierTree()) + .build(); + } + + public static ExtClassifierChoice buildValidExtClassifierChoice() { + return new ExtClassifierChoiceBuilder() + .setExtClassifier(ExtClassifierValidatorTest.buildValidExtClassifier()) + .build(); + } + + public static Ipv6ClassifierChoice buildValidIpv6ClassifierChoice() { + return new Ipv6ClassifierChoiceBuilder() + .setIpv6Classifier(Ipv6ClassifierValidatorTest.buildValidIpv6Classifier()) + .build(); + } + +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierContainerValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierContainerValidatorTest.java new file mode 100644 index 0000000..bdcdc4d --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierContainerValidatorTest.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier; + +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.classifiers.ClassifierContainer; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.classifiers.ClassifierContainerBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class ClassifierContainerValidatorTest { + + private static final short DEFAULT_ID = (short)1; + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final ClassifierContainerValidator validator = new ClassifierContainerValidator(); + + @Test(expected = ValidationException.class) + public void testNullClassifierContainer() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Test(expected = NullPointerException.class) + public void testNullExtent() throws ValidationException { + validator.validate(buildValidClassifierContainer(DEFAULT_ID), null); + } + + @Test + public void validQos() throws ValidationException { + ClassifierContainer classifierContainer = buildValidClassifierContainer(DEFAULT_ID); + + validator.validate(classifierContainer, extentParams.getCurrentParam()); + } + + @Test + public void validExt() throws ValidationException { + ClassifierContainer classifierContainer = buildValidExtClassifierContainer(DEFAULT_ID); + + validator.validate(classifierContainer, extentParams.getCurrentParam()); + } + + @Test + public void validIpv6() throws ValidationException { + ClassifierContainer classifierContainer = buildValidIpv6ClassifierContainer(DEFAULT_ID); + + validator.validate(classifierContainer, extentParams.getCurrentParam()); + } + + + public static ClassifierContainer buildValidClassifierContainer(short id) { + return new ClassifierContainerBuilder() + .setClassifierId(id) + .setClassifierChoice(ClassifierChoiceValidatorTest.buildValidQosClassifierChoice()) + .build(); + } + + public static ClassifierContainer buildValidExtClassifierContainer(short id) { + return new ClassifierContainerBuilder() + .setClassifierId(id) + .setClassifierChoice(ClassifierChoiceValidatorTest.buildValidExtClassifierChoice()) + .build(); + } + + public static ClassifierContainer buildValidIpv6ClassifierContainer(short id) { + return new ClassifierContainerBuilder() + .setClassifierId(id) + .setClassifierChoice(ClassifierChoiceValidatorTest.buildValidIpv6ClassifierChoice()) + .build(); + } + +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierValidatorTest.java new file mode 100644 index 0000000..b32f10c --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifierValidatorTest.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier; + +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.TosByte; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.TpProtocol; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.classifier.Classifier; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.classifier.ClassifierBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class ClassifierValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final ClassifierValidator validator= new ClassifierValidator(); + + @Test(expected = ValidationException.class) + public void nullClassifier() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Params.DoNotUseParams + @Test(expected = NullPointerException.class) + public void nullExtent() throws ValidationException { + validator.validate(buildValidClassifierTree(), null); + } + + @Test(expected = ValidationException.class) + public void nullSrcIp() throws ValidationException { + Classifier classifier = new ClassifierBuilder(buildValidClassifierTree()) + .setSrcIp(null) + .build(); + + validator.validate(classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullSrcPort() throws ValidationException { + Classifier classifier = new ClassifierBuilder(buildValidClassifierTree()) + .setSrcPort(null) + .build(); + + validator.validate(classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullDstIp() throws ValidationException { + Classifier classifier = new ClassifierBuilder(buildValidClassifierTree()) + .setDstIp(null) + .build(); + + validator.validate(classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullDstPort() throws ValidationException { + Classifier classifier = new ClassifierBuilder(buildValidClassifierTree()) + .setDstPort(null) + .build(); + + validator.validate(classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullProtocol() throws ValidationException { + Classifier classifier = new ClassifierBuilder(buildValidClassifierTree()) + .setProtocol(null) + .build(); + + validator.validate(classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullTosByte() throws ValidationException { + Classifier classifier = new ClassifierBuilder(buildValidClassifierTree()) + .setTosByte(null) + .build(); + + validator.validate(classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullTosMask() throws ValidationException { + Classifier classifier = new ClassifierBuilder(buildValidClassifierTree()) + .setTosMask(null) + .build(); + + validator.validate(classifier, extentParams.getCurrentParam()); + } + + @Test + public void valid() throws ValidationException { + Classifier classifier = buildValidClassifierTree(); + validator.validate(classifier, extentParams.getCurrentParam()); + } + + public static Classifier buildValidClassifierTree() { + return new ClassifierBuilder() + .setSrcIp(new Ipv4Address("10.0.0.100")) + .setSrcPort(new PortNumber(7000)) + .setDstIp(new Ipv4Address("10.0.0.200")) + .setDstPort(new PortNumber(8000)) + .setProtocol(new TpProtocol(127)) + .setTosByte(new TosByte((short)0x10)) + .setTosMask(new TosByte((short)0xf0)) + .build(); + } +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifiersValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifiersValidatorTest.java new file mode 100644 index 0000000..aba0c51 --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ClassifiersValidatorTest.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier; + +import com.google.common.collect.Lists; +import java.util.List; +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.Classifiers; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.ClassifiersBuilder; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.classifier.attributes.classifiers.ClassifierContainer; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class ClassifiersValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final ClassifiersValidator validator = new ClassifiersValidator(); + + @Test(expected = ValidationException.class) + public void nullClassifiers() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void badClassifiersList() throws ValidationException { + List classifierChoices = Lists.newArrayList( + ClassifierContainerValidatorTest.buildValidClassifierContainer((short) 1), + ClassifierContainerValidatorTest.buildValidIpv6ClassifierContainer((short)2) + ); + Classifiers classifiers = new ClassifiersBuilder() + .setClassifierContainer(classifierChoices) + .build(); + + validator.validate(classifiers, extentParams.getCurrentParam()); + } + + @Test + public void valid() throws Exception { + Classifiers classifiers = buildValidClassifiers(); + + validator.validate(classifiers, extentParams.getCurrentParam()); + } + + public static Classifiers buildValidClassifiers() { + List classifierChoices = Lists.newArrayList( + ClassifierContainerValidatorTest.buildValidExtClassifierContainer((short)1), + ClassifierContainerValidatorTest.buildValidIpv6ClassifierContainer((short) 2) + ); + return new ClassifiersBuilder() + .setClassifierContainer(classifierChoices) + .build(); + } +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ExtClassifierValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ExtClassifierValidatorTest.java new file mode 100644 index 0000000..05f19ba --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/ExtClassifierValidatorTest.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier; + +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.TosByte; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.TpProtocol; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.ext.classifier.ExtClassifier; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.ext.classifier.ExtClassifierBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class ExtClassifierValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final ExtClassifierValidator validator = new ExtClassifierValidator(); + + @Test(expected = ValidationException.class) + public void nullExtClassifier() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Test(expected = NullPointerException.class) + public void nullExtent() throws ValidationException { + validator.validate(buildValidExtClassifier(), null); + } + + @Test(expected = ValidationException.class) + public void nullSrcIp() throws ValidationException { + ExtClassifier extClassifier = new ExtClassifierBuilder(buildValidExtClassifier()) + .setSrcIp(null) + .build(); + + validator.validate(extClassifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullSrcPortStart() throws ValidationException { + ExtClassifier extClassifier = new ExtClassifierBuilder(buildValidExtClassifier()) + .setSrcPortStart(null) + .build(); + + validator.validate(extClassifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullSrcPortEnd() throws ValidationException { + ExtClassifier extClassifier = new ExtClassifierBuilder(buildValidExtClassifier()) + .setSrcPortEnd(null) + .build(); + + validator.validate(extClassifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullDstIp() throws ValidationException { + ExtClassifier extClassifier = new ExtClassifierBuilder(buildValidExtClassifier()) + .setDstIp(null) + .build(); + + validator.validate(extClassifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullDstPortStart() throws ValidationException { + ExtClassifier extClassifier = new ExtClassifierBuilder(buildValidExtClassifier()) + .setDstPortStart(null) + .build(); + + validator.validate(extClassifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullDstPortEnd() throws ValidationException { + ExtClassifier extClassifier = new ExtClassifierBuilder(buildValidExtClassifier()) + .setDstPortEnd(null) + .build(); + + validator.validate(extClassifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullProtocol() throws ValidationException { + ExtClassifier extClassifier = new ExtClassifierBuilder(buildValidExtClassifier()) + .setProtocol(null) + .build(); + + validator.validate(extClassifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullTosByte() throws ValidationException { + ExtClassifier extClassifier = new ExtClassifierBuilder(buildValidExtClassifier()) + .setTosByte(null) + .build(); + + validator.validate(extClassifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullTosMask() throws ValidationException { + ExtClassifier extClassifier = new ExtClassifierBuilder(buildValidExtClassifier()) + .setTosMask(null) + .build(); + + validator.validate(extClassifier, extentParams.getCurrentParam()); + } + + @Test + public void valid() throws ValidationException { + ExtClassifier extClassifier = buildValidExtClassifier(); + + validator.validate(extClassifier, extentParams.getCurrentParam()); + } + + public static ExtClassifier buildValidExtClassifier() { + return new ExtClassifierBuilder() + .setSrcIp(new Ipv4Address("10.0.0.100")) + .setSrcIpMask(new Ipv4Address("255.255.255.0")) + .setSrcPortStart(new PortNumber(7000)) + .setSrcPortEnd(new PortNumber((7005))) + .setDstIp(new Ipv4Address("10.0.0.200")) + .setDstIpMask(new Ipv4Address("255.255.255.0")) + .setDstPortStart(new PortNumber(7000)) + .setDstPortEnd(new PortNumber(7005)) + .setProtocol(new TpProtocol(127)) + .setTosByte(new TosByte((short)0x10)) + .setTosMask(new TosByte((short)0xf0)) + .build(); + } +} diff --git a/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/Ipv6ClassifierValidatorTest.java b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/Ipv6ClassifierValidatorTest.java new file mode 100644 index 0000000..689c385 --- /dev/null +++ b/packetcable-policy-server/src/test/java/org/opendaylight/controller/packetcable/provider/validation/impl/validators/qos/classifier/Ipv6ClassifierValidatorTest.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2015 CableLabs and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.packetcable.provider.validation.impl.validators.qos.classifier; + +import org.junit.Rule; +import org.junit.Test; +import org.opendaylight.controller.packetcable.provider.test.rules.Params; +import org.opendaylight.controller.packetcable.provider.validation.ValidationException; +import org.opendaylight.controller.packetcable.provider.validation.Validator; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.TosByte; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.TpProtocol; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.ipv6.classifier.Ipv6Classifier; +import org.opendaylight.yang.gen.v1.urn.packetcable.rev151101.pcmm.qos.ipv6.classifier.Ipv6ClassifierBuilder; + +/** + * @author rvail + */ +@Params.AlwaysUseParams +public class Ipv6ClassifierValidatorTest { + + @Rule + public Params extentParams = Params.of(Validator.Extent.class); + + private final Ipv6ClassifierValidator validator = new Ipv6ClassifierValidator(); + + @Test(expected = ValidationException.class) + public void nullIpv6Classifier() throws ValidationException { + validator.validate(null, extentParams.getCurrentParam()); + } + + @Test(expected = NullPointerException.class) + public void nullExtent() throws ValidationException { + validator.validate(buildValidIpv6Classifier(), null); + } + + @Test(expected = ValidationException.class) + public void nullSrcIp6() throws ValidationException { + Ipv6Classifier ipv6Classifier = new Ipv6ClassifierBuilder(buildValidIpv6Classifier()).setSrcIp6(null).build(); + + validator.validate(ipv6Classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullSrcPortStart() throws ValidationException { + Ipv6Classifier ipv6Classifier = + new Ipv6ClassifierBuilder(buildValidIpv6Classifier()).setSrcPortStart(null).build(); + + validator.validate(ipv6Classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullSrcPortEnd() throws ValidationException { + Ipv6Classifier ipv6Classifier = + new Ipv6ClassifierBuilder(buildValidIpv6Classifier()).setSrcPortEnd(null).build(); + + validator.validate(ipv6Classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullDstIp6() throws ValidationException { + Ipv6Classifier ipv6Classifier = new Ipv6ClassifierBuilder(buildValidIpv6Classifier()).setDstIp6(null).build(); + + validator.validate(ipv6Classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullDstPortStart() throws ValidationException { + Ipv6Classifier ipv6Classifier = + new Ipv6ClassifierBuilder(buildValidIpv6Classifier()).setDstPortStart(null).build(); + + validator.validate(ipv6Classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullDstPortEnd() throws ValidationException { + Ipv6Classifier ipv6Classifier = + new Ipv6ClassifierBuilder(buildValidIpv6Classifier()).setDstPortEnd(null).build(); + + validator.validate(ipv6Classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullFlowLabel() throws ValidationException { + Ipv6Classifier ipv6Classifier = new Ipv6ClassifierBuilder(buildValidIpv6Classifier()).setFlowLabel(null).build(); + + validator.validate(ipv6Classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullNextHdr() throws ValidationException { + Ipv6Classifier ipv6Classifier = new Ipv6ClassifierBuilder(buildValidIpv6Classifier()).setNextHdr(null).build(); + + validator.validate(ipv6Classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullTcHigh() throws ValidationException { + Ipv6Classifier ipv6Classifier = new Ipv6ClassifierBuilder(buildValidIpv6Classifier()).setTcHigh(null).build(); + + validator.validate(ipv6Classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullTcLow() throws ValidationException { + Ipv6Classifier ipv6Classifier = new Ipv6ClassifierBuilder(buildValidIpv6Classifier()).setTcLow(null).build(); + + validator.validate(ipv6Classifier, extentParams.getCurrentParam()); + } + + @Test(expected = ValidationException.class) + public void nullTcMask() throws ValidationException { + Ipv6Classifier ipv6Classifier = new Ipv6ClassifierBuilder(buildValidIpv6Classifier()).setTcMask(null).build(); + + validator.validate(ipv6Classifier, extentParams.getCurrentParam()); + } + + @Test + public void valid() throws ValidationException { + Ipv6Classifier ipv6Classifier = buildValidIpv6Classifier(); + + validator.validate(ipv6Classifier, extentParams.getCurrentParam()); + } + + public static Ipv6Classifier buildValidIpv6Classifier() { + return new Ipv6ClassifierBuilder().setSrcIp6(new Ipv6Prefix("2001:4978:030d:1000:0:0:0:0/64")) + .setSrcPortStart(new PortNumber(7000)) + .setSrcPortEnd(new PortNumber((7005))) + .setDstIp6(new Ipv6Prefix("2001:4978:030d:1100:0:0:0:0/64")) + .setDstPortStart(new PortNumber(7000)) + .setDstPortEnd(new PortNumber(7005)) + .setFlowLabel(101L) + .setNextHdr(new TpProtocol(256)) + .setTcHigh(new TosByte((short) 0xc0)) + .setTcLow(new TosByte((short) 0x01)) + .setTcMask(new TosByte((short) 0xe0)) + .build(); + } +}