diff options
Diffstat (limited to 'framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java')
-rw-r--r-- | framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java | 657 |
1 files changed, 0 insertions, 657 deletions
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java b/framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java deleted file mode 100644 index 7d8580a6..00000000 --- a/framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java +++ /dev/null @@ -1,657 +0,0 @@ -/* - * 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.Objects; - -import org.hamcrest.Description; -import org.hamcrest.TypeSafeDiagnosingMatcher; -import org.onlab.util.HexString; -import org.onosproject.net.OchSignal; -import org.onosproject.net.OduSignalId; -import org.onosproject.net.flow.criteria.Criterion; -import org.onosproject.net.flow.criteria.EthCriterion; -import org.onosproject.net.flow.criteria.EthTypeCriterion; -import org.onosproject.net.flow.criteria.IPCriterion; -import org.onosproject.net.flow.criteria.IPDscpCriterion; -import org.onosproject.net.flow.criteria.IPEcnCriterion; -import org.onosproject.net.flow.criteria.IPProtocolCriterion; -import org.onosproject.net.flow.criteria.IPv6ExthdrFlagsCriterion; -import org.onosproject.net.flow.criteria.IPv6FlowLabelCriterion; -import org.onosproject.net.flow.criteria.IPv6NDLinkLayerAddressCriterion; -import org.onosproject.net.flow.criteria.IPv6NDTargetAddressCriterion; -import org.onosproject.net.flow.criteria.IcmpCodeCriterion; -import org.onosproject.net.flow.criteria.IcmpTypeCriterion; -import org.onosproject.net.flow.criteria.Icmpv6CodeCriterion; -import org.onosproject.net.flow.criteria.Icmpv6TypeCriterion; -import org.onosproject.net.flow.criteria.MetadataCriterion; -import org.onosproject.net.flow.criteria.MplsCriterion; -import org.onosproject.net.flow.criteria.OchSignalCriterion; -import org.onosproject.net.flow.criteria.OchSignalTypeCriterion; -import org.onosproject.net.flow.criteria.OduSignalIdCriterion; -import org.onosproject.net.flow.criteria.OduSignalTypeCriterion; -import org.onosproject.net.flow.criteria.PortCriterion; -import org.onosproject.net.flow.criteria.SctpPortCriterion; -import org.onosproject.net.flow.criteria.TcpPortCriterion; -import org.onosproject.net.flow.criteria.UdpPortCriterion; -import org.onosproject.net.flow.criteria.VlanIdCriterion; -import org.onosproject.net.flow.criteria.VlanPcpCriterion; - -import com.fasterxml.jackson.databind.JsonNode; -import com.google.common.base.Joiner; - -/** - * Hamcrest matcher for criterion objects. - */ -public final class CriterionJsonMatcher extends - TypeSafeDiagnosingMatcher<JsonNode> { - - final Criterion criterion; - Description description; - JsonNode jsonCriterion; - - /** - * Constructs a matcher object. - * - * @param criterionValue criterion to match - */ - private CriterionJsonMatcher(Criterion criterionValue) { - criterion = criterionValue; - } - - /** - * Factory to allocate an criterion matcher. - * - * @param criterion criterion object we are looking for - * @return matcher - */ - public static CriterionJsonMatcher matchesCriterion(Criterion criterion) { - return new CriterionJsonMatcher(criterion); - } - - /** - * Matches a port criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(PortCriterion criterion) { - final long port = criterion.port().toLong(); - final long jsonPort = jsonCriterion.get("port").asLong(); - if (port != jsonPort) { - description.appendText("port was " + Long.toString(jsonPort)); - return false; - } - return true; - } - - /** - * Matches a metadata criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(MetadataCriterion criterion) { - final long metadata = criterion.metadata(); - final long jsonMetadata = jsonCriterion.get("metadata").asLong(); - if (metadata != jsonMetadata) { - description.appendText("metadata was " - + Long.toString(jsonMetadata)); - return false; - } - return true; - } - - /** - * Matches an eth criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(EthCriterion criterion) { - final String mac = criterion.mac().toString(); - final String jsonMac = jsonCriterion.get("mac").textValue(); - if (!mac.equals(jsonMac)) { - description.appendText("mac was " + jsonMac); - return false; - } - return true; - } - - /** - * Matches an eth type criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(EthTypeCriterion criterion) { - final int ethType = criterion.ethType().toShort() & 0xffff; - final int jsonEthType = Integer.decode(jsonCriterion.get("ethType").textValue()) & 0xffff; - if (ethType != jsonEthType) { - description.appendText("ethType was " - + Integer.toString(jsonEthType)); - return false; - } - return true; - } - - /** - * Matches a VLAN ID criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(VlanIdCriterion criterion) { - final short vlanId = criterion.vlanId().toShort(); - final short jsonVlanId = jsonCriterion.get("vlanId").shortValue(); - if (vlanId != jsonVlanId) { - description.appendText("vlanId was " + Short.toString(jsonVlanId)); - return false; - } - return true; - } - - /** - * Matches a VLAN PCP criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(VlanPcpCriterion criterion) { - final byte priority = criterion.priority(); - final byte jsonPriority = - (byte) jsonCriterion.get("priority").shortValue(); - if (priority != jsonPriority) { - description.appendText("priority was " + Byte.toString(jsonPriority)); - return false; - } - return true; - } - - /** - * Matches an IP DSCP criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(IPDscpCriterion criterion) { - final byte ipDscp = criterion.ipDscp(); - final byte jsonIpDscp = (byte) jsonCriterion.get("ipDscp").shortValue(); - if (ipDscp != jsonIpDscp) { - description.appendText("IP DSCP was " + Byte.toString(jsonIpDscp)); - return false; - } - return true; - } - - /** - * Matches an IP ECN criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(IPEcnCriterion criterion) { - final byte ipEcn = criterion.ipEcn(); - final byte jsonIpEcn = (byte) jsonCriterion.get("ipEcn").shortValue(); - if (ipEcn != jsonIpEcn) { - description.appendText("IP ECN was " + Byte.toString(jsonIpEcn)); - return false; - } - return true; - } - - /** - * Matches an IP protocol criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(IPProtocolCriterion criterion) { - final short protocol = criterion.protocol(); - final short jsonProtocol = jsonCriterion.get("protocol").shortValue(); - if (protocol != jsonProtocol) { - description.appendText("protocol was " - + Short.toString(jsonProtocol)); - return false; - } - return true; - } - - /** - * Matches an IP address criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(IPCriterion criterion) { - final String ip = criterion.ip().toString(); - final String jsonIp = jsonCriterion.get("ip").textValue(); - if (!ip.equals(jsonIp)) { - description.appendText("ip was " + jsonIp); - return false; - } - return true; - } - - /** - * Matches a TCP port criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(TcpPortCriterion criterion) { - final int tcpPort = criterion.tcpPort().toInt(); - final int jsonTcpPort = jsonCriterion.get("tcpPort").intValue(); - if (tcpPort != jsonTcpPort) { - description.appendText("tcp port was " - + Integer.toString(jsonTcpPort)); - return false; - } - return true; - } - - /** - * Matches a UDP port criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(UdpPortCriterion criterion) { - final int udpPort = criterion.udpPort().toInt(); - final int jsonUdpPort = jsonCriterion.get("udpPort").intValue(); - if (udpPort != jsonUdpPort) { - description.appendText("udp port was " - + Integer.toString(jsonUdpPort)); - return false; - } - return true; - } - - /** - * Matches an SCTP port criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(SctpPortCriterion criterion) { - final int sctpPort = criterion.sctpPort().toInt(); - final int jsonSctpPort = jsonCriterion.get("sctpPort").intValue(); - if (sctpPort != jsonSctpPort) { - description.appendText("sctp port was " - + Integer.toString(jsonSctpPort)); - return false; - } - return true; - } - - /** - * Matches an ICMP type criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(IcmpTypeCriterion criterion) { - final short icmpType = criterion.icmpType(); - final short jsonIcmpType = jsonCriterion.get("icmpType").shortValue(); - if (icmpType != jsonIcmpType) { - description.appendText("icmp type was " - + Short.toString(jsonIcmpType)); - return false; - } - return true; - } - - /** - * Matches an ICMP code criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(IcmpCodeCriterion criterion) { - final short icmpCode = criterion.icmpCode(); - final short jsonIcmpCode = jsonCriterion.get("icmpCode").shortValue(); - if (icmpCode != jsonIcmpCode) { - description.appendText("icmp code was " - + Short.toString(jsonIcmpCode)); - return false; - } - return true; - } - - /** - * Matches an IPV6 flow label criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(IPv6FlowLabelCriterion criterion) { - final int flowLabel = criterion.flowLabel(); - final int jsonFlowLabel = jsonCriterion.get("flowLabel").intValue(); - if (flowLabel != jsonFlowLabel) { - description.appendText("IPv6 flow label was " - + Integer.toString(jsonFlowLabel)); - return false; - } - return true; - } - - /** - * Matches an ICMP V6 type criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(Icmpv6TypeCriterion criterion) { - final short icmpv6Type = criterion.icmpv6Type(); - final short jsonIcmpv6Type = - jsonCriterion.get("icmpv6Type").shortValue(); - if (icmpv6Type != jsonIcmpv6Type) { - description.appendText("icmpv6 type was " - + Short.toString(jsonIcmpv6Type)); - return false; - } - return true; - } - - /** - * Matches an IPV6 code criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(Icmpv6CodeCriterion criterion) { - final short icmpv6Code = criterion.icmpv6Code(); - final short jsonIcmpv6Code = - jsonCriterion.get("icmpv6Code").shortValue(); - if (icmpv6Code != jsonIcmpv6Code) { - description.appendText("icmpv6 code was " - + Short.toString(jsonIcmpv6Code)); - return false; - } - return true; - } - - /** - * Matches an IPV6 ND target criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(IPv6NDTargetAddressCriterion criterion) { - final String targetAddress = - criterion.targetAddress().toString(); - final String jsonTargetAddress = - jsonCriterion.get("targetAddress").textValue(); - if (!targetAddress.equals(jsonTargetAddress)) { - description.appendText("target address was " + - jsonTargetAddress); - return false; - } - return true; - } - - /** - * Matches an IPV6 ND link layer criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(IPv6NDLinkLayerAddressCriterion criterion) { - final String llAddress = - criterion.mac().toString(); - final String jsonLlAddress = - jsonCriterion.get("mac").textValue(); - if (!llAddress.equals(jsonLlAddress)) { - description.appendText("mac was " + jsonLlAddress); - return false; - } - return true; - } - - /** - * Matches an MPLS label criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(MplsCriterion criterion) { - final int label = criterion.label().toInt(); - final int jsonLabel = jsonCriterion.get("label").intValue(); - if (label != jsonLabel) { - description.appendText("label was " + Integer.toString(jsonLabel)); - return false; - } - return true; - } - - /** - * Matches an IPV6 exthdr criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(IPv6ExthdrFlagsCriterion criterion) { - final int exthdrFlags = criterion.exthdrFlags(); - final int jsonExthdrFlags = - jsonCriterion.get("exthdrFlags").intValue(); - if (exthdrFlags != jsonExthdrFlags) { - description.appendText("exthdrFlags was " - + Long.toHexString(jsonExthdrFlags)); - return false; - } - return true; - } - - /** - * Matches an Och signal criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(OchSignalCriterion criterion) { - final OchSignal ochSignal = criterion.lambda(); - final JsonNode jsonOchSignal = jsonCriterion.get("ochSignalId"); - String jsonGridType = jsonOchSignal.get("gridType").textValue(); - String jsonChannelSpacing = jsonOchSignal.get("channelSpacing").textValue(); - int jsonSpacingMultiplier = jsonOchSignal.get("spacingMultiplier").intValue(); - int jsonSlotGranularity = jsonOchSignal.get("slotGranularity").intValue(); - - boolean equality = Objects.equals(ochSignal.gridType().name(), jsonGridType) - && Objects.equals(ochSignal.channelSpacing().name(), jsonChannelSpacing) - && Objects.equals(ochSignal.spacingMultiplier(), jsonSpacingMultiplier) - && Objects.equals(ochSignal.slotGranularity(), jsonSlotGranularity); - - if (!equality) { - String joined = Joiner.on(", ") - .join(jsonGridType, jsonChannelSpacing, jsonSpacingMultiplier, jsonSlotGranularity); - - description.appendText("och signal id was " + joined); - return false; - } - return true; - } - - /** - * Matches an Och signal type criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(OchSignalTypeCriterion criterion) { - final String signalType = criterion.signalType().name(); - final String jsonSignalType = jsonCriterion.get("ochSignalType").textValue(); - if (!signalType.equals(jsonSignalType)) { - description.appendText("signal type was " + jsonSignalType); - return false; - } - return true; - } - - /** - * Matches an ODU signal ID criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(OduSignalIdCriterion criterion) { - final OduSignalId oduSignal = criterion.oduSignalId(); - final JsonNode jsonOduSignal = jsonCriterion.get(CriterionCodec.ODU_SIGNAL_ID); - int jsonTpn = jsonOduSignal.get(CriterionCodec.TRIBUTARY_PORT_NUMBER).intValue(); - int jsonTsLen = jsonOduSignal.get(CriterionCodec.TRIBUTARY_SLOT_LEN).intValue(); - byte[] jsonTributaryBitMap = HexString.fromHexString( - jsonOduSignal.get(CriterionCodec.TRIBUTARY_SLOT_BITMAP).asText()); - OduSignalId jsonOduSignalId = OduSignalId.oduSignalId(jsonTpn, jsonTsLen, jsonTributaryBitMap); - if (!oduSignal.equals(jsonOduSignalId)) { - description.appendText("oduSignalId was " + criterion); - return false; - } - return true; - } - - /** - * Matches an ODU signal Type criterion object. - * - * @param criterion criterion to match - * @return true if the JSON matches the criterion, false otherwise. - */ - private boolean matchCriterion(OduSignalTypeCriterion criterion) { - final String signalType = criterion.signalType().name(); - final String jsonOduSignalType = jsonCriterion.get("oduSignalType").textValue(); - if (!signalType.equals(jsonOduSignalType)) { - description.appendText("signalType was " + signalType); - return false; - } - return true; - } - - - @Override - public boolean matchesSafely(JsonNode jsonCriterion, - Description description) { - this.description = description; - this.jsonCriterion = jsonCriterion; - final String type = criterion.type().name(); - final String jsonType = jsonCriterion.get("type").asText(); - if (!type.equals(jsonType)) { - description.appendText("type was " + type); - return false; - } - - switch (criterion.type()) { - - case IN_PORT: - case IN_PHY_PORT: - return matchCriterion((PortCriterion) criterion); - - case METADATA: - return matchCriterion((MetadataCriterion) criterion); - - case ETH_DST: - case ETH_SRC: - return matchCriterion((EthCriterion) criterion); - - case ETH_TYPE: - return matchCriterion((EthTypeCriterion) criterion); - - case VLAN_VID: - return matchCriterion((VlanIdCriterion) criterion); - - case VLAN_PCP: - return matchCriterion((VlanPcpCriterion) criterion); - - case IP_DSCP: - return matchCriterion((IPDscpCriterion) criterion); - - case IP_ECN: - return matchCriterion((IPEcnCriterion) criterion); - - case IP_PROTO: - return matchCriterion((IPProtocolCriterion) criterion); - - case IPV4_SRC: - case IPV4_DST: - case IPV6_SRC: - case IPV6_DST: - return matchCriterion((IPCriterion) criterion); - - case TCP_SRC: - case TCP_DST: - return matchCriterion((TcpPortCriterion) criterion); - - case UDP_SRC: - case UDP_DST: - return matchCriterion((UdpPortCriterion) criterion); - - case SCTP_SRC: - case SCTP_DST: - return matchCriterion((SctpPortCriterion) criterion); - - case ICMPV4_TYPE: - return matchCriterion((IcmpTypeCriterion) criterion); - - case ICMPV4_CODE: - return matchCriterion((IcmpCodeCriterion) criterion); - - case IPV6_FLABEL: - return matchCriterion((IPv6FlowLabelCriterion) criterion); - - case ICMPV6_TYPE: - return matchCriterion((Icmpv6TypeCriterion) criterion); - - case ICMPV6_CODE: - return matchCriterion((Icmpv6CodeCriterion) criterion); - - case IPV6_ND_TARGET: - return matchCriterion( - (IPv6NDTargetAddressCriterion) criterion); - - case IPV6_ND_SLL: - case IPV6_ND_TLL: - return matchCriterion( - (IPv6NDLinkLayerAddressCriterion) criterion); - - case MPLS_LABEL: - return matchCriterion((MplsCriterion) criterion); - - case IPV6_EXTHDR: - return matchCriterion( - (IPv6ExthdrFlagsCriterion) criterion); - - case OCH_SIGID: - return matchCriterion((OchSignalCriterion) criterion); - - case OCH_SIGTYPE: - return matchCriterion((OchSignalTypeCriterion) criterion); - - case ODU_SIGID: - return matchCriterion((OduSignalIdCriterion) criterion); - - case ODU_SIGTYPE: - return matchCriterion((OduSignalTypeCriterion) criterion); - - default: - // Don't know how to format this type - description.appendText("unknown criterion type " + - criterion.type()); - return false; - } - } - - @Override - public void describeTo(Description description) { - description.appendText(criterion.toString()); - } -} |