diff options
Diffstat (limited to 'framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/ConstraintCodecTest.java')
-rw-r--r-- | framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/ConstraintCodecTest.java | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/ConstraintCodecTest.java b/framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/ConstraintCodecTest.java new file mode 100644 index 00000000..2a47d115 --- /dev/null +++ b/framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/ConstraintCodecTest.java @@ -0,0 +1,202 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onosproject.codec.impl; + +import java.io.IOException; +import java.io.InputStream; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.onosproject.codec.JsonCodec; +import org.onosproject.core.CoreService; +import org.onosproject.net.Link; +import org.onosproject.net.intent.Constraint; +import org.onosproject.net.intent.constraint.AnnotationConstraint; +import org.onosproject.net.intent.constraint.AsymmetricPathConstraint; +import org.onosproject.net.intent.constraint.BandwidthConstraint; +import org.onosproject.net.intent.constraint.LambdaConstraint; +import org.onosproject.net.intent.constraint.LatencyConstraint; +import org.onosproject.net.intent.constraint.LinkTypeConstraint; +import org.onosproject.net.intent.constraint.ObstacleConstraint; +import org.onosproject.net.intent.constraint.WaypointConstraint; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.onosproject.net.NetTestTools.APP_ID; +import static org.onosproject.net.NetTestTools.did; + +/** + * Unit tests for Constraint codec. + */ +public class ConstraintCodecTest { + + MockCodecContext context; + JsonCodec<Constraint> constraintCodec; + final CoreService mockCoreService = createMock(CoreService.class); + + /** + * Sets up for each test. Creates a context and fetches the flow rule + * codec. + */ + @Before + public void setUp() { + context = new MockCodecContext(); + constraintCodec = context.codec(Constraint.class); + assertThat(constraintCodec, notNullValue()); + + expect(mockCoreService.registerApplication(FlowRuleCodec.REST_APP_ID)) + .andReturn(APP_ID).anyTimes(); + replay(mockCoreService); + context.registerService(CoreService.class, mockCoreService); + } + + /** + * Reads in a constraint from the given resource and decodes it. + * + * @param resourceName resource to use to read the JSON for the constraint + * @return decoded constraint + */ + private Constraint getConstraint(String resourceName) { + InputStream jsonStream = ConstraintCodecTest.class + .getResourceAsStream(resourceName); + try { + JsonNode json = context.mapper().readTree(jsonStream); + assertThat(json, notNullValue()); + Constraint constraint = constraintCodec.decode((ObjectNode) json, context); + assertThat(constraint, notNullValue()); + return checkNotNull(constraint); + } catch (IOException ioe) { + Assert.fail(ioe.getMessage()); + throw new IllegalStateException("cannot happen"); + } + } + + + /** + * Tests link type constraint. + */ + @Test + public void linkTypeConstraint() { + Constraint constraint = getConstraint("LinkTypeConstraint.json"); + assertThat(constraint, instanceOf(LinkTypeConstraint.class)); + + LinkTypeConstraint linkTypeConstraint = (LinkTypeConstraint) constraint; + assertThat(linkTypeConstraint.isInclusive(), is(false)); + assertThat(linkTypeConstraint.types(), hasSize(2)); + assertThat(linkTypeConstraint.types(), hasItem(Link.Type.OPTICAL)); + assertThat(linkTypeConstraint.types(), hasItem(Link.Type.DIRECT)); + } + + /** + * Tests annotation constraint. + */ + @Test + public void annotationConstraint() { + Constraint constraint = getConstraint("AnnotationConstraint.json"); + assertThat(constraint, instanceOf(AnnotationConstraint.class)); + + AnnotationConstraint annotationConstraint = (AnnotationConstraint) constraint; + assertThat(annotationConstraint.key(), is("key")); + assertThat(annotationConstraint.threshold(), is(123.0D)); + } + + /** + * Tests bandwidth constraint. + */ + @Test + public void bandwidthConstraint() { + Constraint constraint = getConstraint("BandwidthConstraint.json"); + assertThat(constraint, instanceOf(BandwidthConstraint.class)); + + BandwidthConstraint bandwidthConstraint = (BandwidthConstraint) constraint; + assertThat(bandwidthConstraint.bandwidth().toDouble(), is(345.678D)); + } + + /** + * Tests lambda constraint. + */ + @Test + public void lambdaConstraint() { + Constraint constraint = getConstraint("LambdaConstraint.json"); + assertThat(constraint, instanceOf(LambdaConstraint.class)); + + LambdaConstraint lambdaConstraint = (LambdaConstraint) constraint; + assertThat(lambdaConstraint.lambda().toInt(), is(444)); + } + + /** + * Tests latency constraint. + */ + @Test + public void latencyConstraint() { + Constraint constraint = getConstraint("LatencyConstraint.json"); + assertThat(constraint, instanceOf(LatencyConstraint.class)); + + LatencyConstraint latencyConstraint = (LatencyConstraint) constraint; + assertThat(latencyConstraint.latency().toMillis(), is(111L)); + } + + /** + * Tests obstacle constraint. + */ + @Test + public void obstacleConstraint() { + Constraint constraint = getConstraint("ObstacleConstraint.json"); + assertThat(constraint, instanceOf(ObstacleConstraint.class)); + + ObstacleConstraint obstacleConstraint = (ObstacleConstraint) constraint; + + assertThat(obstacleConstraint.obstacles(), hasItem(did("dev1"))); + assertThat(obstacleConstraint.obstacles(), hasItem(did("dev2"))); + assertThat(obstacleConstraint.obstacles(), hasItem(did("dev3"))); + } + + /** + * Tests waypoint constaint. + */ + @Test + public void waypointConstraint() { + Constraint constraint = getConstraint("WaypointConstraint.json"); + assertThat(constraint, instanceOf(WaypointConstraint.class)); + + WaypointConstraint waypointConstraint = (WaypointConstraint) constraint; + + assertThat(waypointConstraint.waypoints(), hasItem(did("devA"))); + assertThat(waypointConstraint.waypoints(), hasItem(did("devB"))); + assertThat(waypointConstraint.waypoints(), hasItem(did("devC"))); + } + + /** + * Tests asymmetric path constraint. + */ + @Test + public void asymmetricPathConstraint() { + Constraint constraint = getConstraint("AsymmetricPathConstraint.json"); + assertThat(constraint, instanceOf(AsymmetricPathConstraint.class)); + } +} |