diff options
Diffstat (limited to 'framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java')
-rw-r--r-- | framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java | 445 |
1 files changed, 445 insertions, 0 deletions
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java b/framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java new file mode 100644 index 00000000..6bf46803 --- /dev/null +++ b/framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java @@ -0,0 +1,445 @@ +/* + * 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.util.EnumMap; + +import org.junit.Before; +import org.junit.Test; +import org.onlab.packet.Ip6Address; +import org.onlab.packet.IpPrefix; +import org.onlab.packet.MacAddress; +import org.onlab.packet.MplsLabel; +import org.onlab.packet.TpPort; +import org.onlab.packet.VlanId; +import org.onosproject.codec.CodecContext; +import org.onosproject.codec.JsonCodec; +import org.onosproject.net.ChannelSpacing; +import org.onosproject.net.GridType; +import org.onosproject.net.Lambda; +import org.onosproject.net.OchSignalType; +import org.onosproject.net.PortNumber; +import org.onosproject.net.flow.criteria.Criteria; +import org.onosproject.net.flow.criteria.Criterion; + +import com.fasterxml.jackson.databind.node.ObjectNode; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.onlab.junit.TestUtils.getField; +import static org.onlab.junit.TestUtils.setField; +import static org.onosproject.codec.impl.CriterionJsonMatcher.matchesCriterion; + +/** + * Unit tests for criterion codec. + */ +public class CriterionCodecTest { + + CodecContext context; + JsonCodec<Criterion> criterionCodec; + final PortNumber port = PortNumber.portNumber(1); + final IpPrefix ipPrefix4 = IpPrefix.valueOf("10.1.1.0/24"); + final IpPrefix ipPrefix6 = IpPrefix.valueOf("fe80::/64"); + final MacAddress mac1 = MacAddress.valueOf("00:00:11:00:00:01"); + final TpPort tpPort = TpPort.tpPort(40000); + + /** + * Sets up for each test. Creates a context and fetches the criterion + * codec. + */ + @Before + public void setUp() { + context = new MockCodecContext(); + criterionCodec = context.codec(Criterion.class); + assertThat(criterionCodec, notNullValue()); + } + + + /** + * Checks that all criterion types are covered by the codec. + */ + @Test + public void checkCriterionTypes() throws Exception { + EncodeCriterionCodecHelper encoder = new EncodeCriterionCodecHelper( + Criteria.dummy(), context); + EnumMap<Criterion.Type, Object> formatMap = + getField(encoder, "formatMap"); + assertThat(formatMap, notNullValue()); + + for (Criterion.Type type : Criterion.Type.values()) { + assertThat("Entry not found for " + type.toString(), + formatMap.get(type), notNullValue()); + } + } + + /** + * Tests in port criterion. + */ + @Test + public void matchInPortTest() { + Criterion criterion = Criteria.matchInPort(port); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests in physical port criterion. + */ + @Test + public void matchInPhyPortTest() { + Criterion criterion = Criteria.matchInPhyPort(port); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests metadata criterion. + */ + @Test + public void matchMetadataTest() { + Criterion criterion = Criteria.matchMetadata(0xabcdL); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests ethernet destination criterion. + */ + @Test + public void matchEthDstTest() { + Criterion criterion = Criteria.matchEthDst(mac1); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests ethernet source criterion. + */ + @Test + public void matchEthSrcTest() { + Criterion criterion = Criteria.matchEthSrc(mac1); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests ethernet type criterion. + */ + @Test + public void matchEthTypeTest() { + Criterion criterion = Criteria.matchEthType((short) 0x8844); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests VLAN Id criterion. + */ + @Test + public void matchVlanIdTest() { + Criterion criterion = Criteria.matchVlanId(VlanId.ANY); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests VLAN PCP criterion. + */ + @Test + public void matchVlanPcpTest() { + Criterion criterion = Criteria.matchVlanPcp((byte) 7); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests IP DSCP criterion. + */ + @Test + public void matchIPDscpTest() { + Criterion criterion = Criteria.matchIPDscp((byte) 63); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests IP ECN criterion. + */ + @Test + public void matchIPEcnTest() { + Criterion criterion = Criteria.matchIPEcn((byte) 3); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests IP protocol criterion. + */ + @Test + public void matchIPProtocolTest() { + Criterion criterion = Criteria.matchIPProtocol((byte) 250); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests IP source criterion. + */ + @Test + public void matchIPSrcTest() { + Criterion criterion = Criteria.matchIPSrc(ipPrefix4); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests IP destination criterion. + */ + @Test + public void matchIPDstTest() { + Criterion criterion = Criteria.matchIPDst(ipPrefix4); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests source TCP port criterion. + */ + @Test + public void matchTcpSrcTest() { + Criterion criterion = Criteria.matchTcpSrc(tpPort); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests destination TCP port criterion. + */ + @Test + public void matchTcpDstTest() { + Criterion criterion = Criteria.matchTcpDst(tpPort); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests source UDP port criterion. + */ + @Test + public void matchUdpSrcTest() { + Criterion criterion = Criteria.matchUdpSrc(tpPort); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests destination UDP criterion. + */ + @Test + public void matchUdpDstTest() { + Criterion criterion = Criteria.matchUdpDst(tpPort); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests source SCTP criterion. + */ + @Test + public void matchSctpSrcTest() { + Criterion criterion = Criteria.matchSctpSrc(tpPort); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests destination SCTP criterion. + */ + @Test + public void matchSctpDstTest() { + Criterion criterion = Criteria.matchSctpDst(tpPort); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests ICMP type criterion. + */ + @Test + public void matchIcmpTypeTest() { + Criterion criterion = Criteria.matchIcmpType((byte) 250); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests ICMP code criterion. + */ + @Test + public void matchIcmpCodeTest() { + Criterion criterion = Criteria.matchIcmpCode((byte) 250); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests IPv6 source criterion. + */ + @Test + public void matchIPv6SrcTest() { + Criterion criterion = Criteria.matchIPv6Src(ipPrefix6); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests IPv6 destination criterion. + */ + @Test + public void matchIPv6DstTest() { + Criterion criterion = Criteria.matchIPv6Dst(ipPrefix6); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests IPv6 flow label criterion. + */ + @Test + public void matchIPv6FlowLabelTest() { + Criterion criterion = Criteria.matchIPv6FlowLabel(0xffffe); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests ICMP v6 type criterion. + */ + @Test + public void matchIcmpv6TypeTest() { + Criterion criterion = Criteria.matchIcmpv6Type((byte) 250); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests ICMP v6 code criterion. + */ + @Test + public void matchIcmpv6CodeTest() { + Criterion criterion = Criteria.matchIcmpv6Code((byte) 250); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests IPV6 target address criterion. + */ + @Test + public void matchIPv6NDTargetAddressTest() { + Criterion criterion = + Criteria.matchIPv6NDTargetAddress( + Ip6Address.valueOf("1111:2222::")); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests IPV6 SLL criterion. + */ + @Test + public void matchIPv6NDSourceLinkLayerAddressTest() { + Criterion criterion = Criteria.matchIPv6NDSourceLinkLayerAddress(mac1); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests IPV6 TLL criterion. + */ + @Test + public void matchIPv6NDTargetLinkLayerAddressTest() { + Criterion criterion = Criteria.matchIPv6NDTargetLinkLayerAddress(mac1); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests MPLS label criterion. + */ + @Test + public void matchMplsLabelTest() { + Criterion criterion = Criteria.matchMplsLabel(MplsLabel.mplsLabel(0xffffe)); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests IPv6 Extension Header pseudo-field flags criterion. + */ + @Test + public void matchIPv6ExthdrFlagsTest() { + int exthdrFlags = + Criterion.IPv6ExthdrFlags.NONEXT.getValue() | + Criterion.IPv6ExthdrFlags.ESP.getValue() | + Criterion.IPv6ExthdrFlags.AUTH.getValue() | + Criterion.IPv6ExthdrFlags.DEST.getValue() | + Criterion.IPv6ExthdrFlags.FRAG.getValue() | + Criterion.IPv6ExthdrFlags.ROUTER.getValue() | + Criterion.IPv6ExthdrFlags.HOP.getValue() | + Criterion.IPv6ExthdrFlags.UNREP.getValue() | + Criterion.IPv6ExthdrFlags.UNSEQ.getValue(); + Criterion criterion = Criteria.matchIPv6ExthdrFlags(exthdrFlags); + ObjectNode result = criterionCodec.encode(criterion, context); + + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests lambda criterion. + */ + @Test + public void matchOchSignal() { + Lambda ochSignal = Lambda.ochSignal(GridType.DWDM, ChannelSpacing.CHL_100GHZ, 4, 8); + Criterion criterion = Criteria.matchLambda(ochSignal); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests Och signal type criterion. + */ + @Test + public void matchOchSignalTypeTest() { + Criterion criterion = Criteria.matchOchSignalType(OchSignalType.FIXED_GRID); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result, matchesCriterion(criterion)); + } + + /** + * Tests that an unimplemented criterion type only returns the type and + * no other data. + */ + @Test + public void matchUnknownTypeTest() throws Exception { + Criterion criterion = Criteria.matchOpticalSignalType((byte) 250); + setField(criterion, "type", Criterion.Type.UNASSIGNED_40); + ObjectNode result = criterionCodec.encode(criterion, context); + assertThat(result.get("type").textValue(), is(criterion.type().toString())); + assertThat(result.size(), is(1)); + } +} |