Fix to properly encode several MASKED criterion into JSON.
Change-Id: I6a3b16c3382d60275de0fc0c61087e79038e5ebb
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java
index f2fd5e5..1542f0d 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java
@@ -74,6 +74,7 @@
final MacAddress mcastMac = MacAddress.valueOf("01:00:5E:00:00:01");
final MacAddress mcastMacMask = MacAddress.valueOf("FF:FF:FF:80:00:00");
final TpPort tpPort = TpPort.tpPort(40000);
+ final TpPort tpPortMask = TpPort.tpPort(65472);
final int tributaryPortNumber = 11;
final int tributarySlotLen = 80;
final byte[] tributarySlotBitmap = new byte[] {1, 2, 3, 4, 2, 3, 4, 2, 3, 4};
@@ -169,6 +170,16 @@
}
/**
+ * Tests masked ethernet source criterion (Criterion.Type.ETH_SRC_MASKED).
+ */
+ @Test
+ public void matchEthSrcMaskTest() {
+ Criterion criterion = Criteria.matchEthSrcMasked(mcastMac, mcastMacMask);
+ ObjectNode result = criterionCodec.encode(criterion, context);
+ assertThat(result, matchesCriterion(criterion));
+ }
+
+ /**
* Tests ethernet type criterion.
*/
@Test
@@ -259,6 +270,16 @@
}
/**
+ * Tests source TCP port masked criterion.
+ */
+ @Test
+ public void matchTcpSrcMaskedTest() {
+ Criterion criterion = Criteria.matchTcpSrcMasked(tpPort, tpPortMask);
+ ObjectNode result = criterionCodec.encode(criterion, context);
+ assertThat(result, matchesCriterion(criterion));
+ }
+
+ /**
* Tests destination TCP port criterion.
*/
@Test
@@ -269,6 +290,16 @@
}
/**
+ * Tests destination TCP port masked criterion.
+ */
+ @Test
+ public void matchTcpDstMaskedTest() {
+ Criterion criterion = Criteria.matchTcpDstMasked(tpPort, tpPortMask);
+ ObjectNode result = criterionCodec.encode(criterion, context);
+ assertThat(result, matchesCriterion(criterion));
+ }
+
+ /**
* Tests source UDP port criterion.
*/
@Test
@@ -279,6 +310,16 @@
}
/**
+ * Tests source UDP port masked criterion.
+ */
+ @Test
+ public void matchUdpSrcMaskedTest() {
+ Criterion criterion = Criteria.matchUdpSrcMasked(tpPort, tpPortMask);
+ ObjectNode result = criterionCodec.encode(criterion, context);
+ assertThat(result, matchesCriterion(criterion));
+ }
+
+ /**
* Tests destination UDP criterion.
*/
@Test
@@ -289,6 +330,16 @@
}
/**
+ * Tests destination UDP port masked criterion.
+ */
+ @Test
+ public void matchUdpDstMaskedTest() {
+ Criterion criterion = Criteria.matchUdpDstMasked(tpPort, tpPortMask);
+ ObjectNode result = criterionCodec.encode(criterion, context);
+ assertThat(result, matchesCriterion(criterion));
+ }
+
+ /**
* Tests source SCTP criterion.
*/
@Test
@@ -299,6 +350,16 @@
}
/**
+ * Tests source SCTP port masked criterion.
+ */
+ @Test
+ public void matchSctpSrcMaskedTest() {
+ Criterion criterion = Criteria.matchSctpSrcMasked(tpPort, tpPortMask);
+ ObjectNode result = criterionCodec.encode(criterion, context);
+ assertThat(result, matchesCriterion(criterion));
+ }
+
+ /**
* Tests destination SCTP criterion.
*/
@Test
@@ -309,6 +370,16 @@
}
/**
+ * Tests destination SCTP port masked criterion.
+ */
+ @Test
+ public void matchSctpDstMaskedTest() {
+ Criterion criterion = Criteria.matchSctpDstMasked(tpPort, tpPortMask);
+ ObjectNode result = criterionCodec.encode(criterion, context);
+ assertThat(result, matchesCriterion(criterion));
+ }
+
+ /**
* Tests ICMP type criterion.
*/
@Test
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java b/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
index d1e1f19..9113124 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
@@ -138,7 +138,7 @@
description.appendText("mac was " + jsonMac);
return false;
}
- if (criterion.type() == Criterion.Type.ETH_DST_MASKED) {
+ if (criterion.type() == Criterion.Type.ETH_SRC_MASKED || criterion.type() == Criterion.Type.ETH_DST_MASKED) {
final String macMask = criterion.mask().toString();
final String jsonMacMask = jsonCriterion.get("macMask").textValue();
if (!macMask.equals(jsonMacMask)) {
@@ -278,6 +278,15 @@
+ Integer.toString(jsonTcpPort));
return false;
}
+ if (criterion.type() == Criterion.Type.TCP_SRC_MASKED || criterion.type() == Criterion.Type.TCP_DST_MASKED) {
+ final int tcpMask = criterion.mask().toInt();
+ final int jsonTcpMask = jsonCriterion.get("tcpMask").intValue();
+ if (tcpMask != jsonTcpMask) {
+ description.appendText("tcp mask was "
+ + Integer.toString(jsonTcpMask));
+ return false;
+ }
+ }
return true;
}
@@ -295,6 +304,16 @@
+ Integer.toString(jsonUdpPort));
return false;
}
+
+ if (criterion.type() == Criterion.Type.UDP_SRC_MASKED || criterion.type() == Criterion.Type.UDP_DST_MASKED) {
+ final int udpMask = criterion.mask().toInt();
+ final int jsonUdpMask = jsonCriterion.get("udpMask").intValue();
+ if (udpMask != jsonUdpMask) {
+ description.appendText("udp mask was "
+ + Integer.toString(jsonUdpMask));
+ return false;
+ }
+ }
return true;
}
@@ -312,6 +331,15 @@
+ Integer.toString(jsonSctpPort));
return false;
}
+ if (criterion.type() == Criterion.Type.SCTP_SRC_MASKED || criterion.type() == Criterion.Type.SCTP_DST_MASKED) {
+ final int sctpMask = criterion.mask().toInt();
+ final int jsonSctpMask = jsonCriterion.get("sctpMask").intValue();
+ if (sctpMask != jsonSctpMask) {
+ description.appendText("sctp mask was "
+ + Integer.toString(jsonSctpMask));
+ return false;
+ }
+ }
return true;
}
@@ -676,6 +704,7 @@
case ETH_DST:
case ETH_DST_MASKED:
case ETH_SRC:
+ case ETH_SRC_MASKED:
return matchCriterion((EthCriterion) criterion);
case ETH_TYPE:
@@ -703,15 +732,21 @@
return matchCriterion((IPCriterion) criterion);
case TCP_SRC:
+ case TCP_SRC_MASKED:
case TCP_DST:
+ case TCP_DST_MASKED:
return matchCriterion((TcpPortCriterion) criterion);
case UDP_SRC:
+ case UDP_SRC_MASKED:
case UDP_DST:
+ case UDP_DST_MASKED:
return matchCriterion((UdpPortCriterion) criterion);
case SCTP_SRC:
+ case SCTP_SRC_MASKED:
case SCTP_DST:
+ case SCTP_DST_MASKED:
return matchCriterion((SctpPortCriterion) criterion);
case ICMPV4_TYPE: