Fix cast error on execution of "flow -j" command
This resolves ONOS-2037.
Change-Id: Ie6bf0c7ca0644ae8029df72d3ea7084fa0297aca
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/CriterionCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/CriterionCodec.java
index 0421e02..1670361 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/CriterionCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/CriterionCodec.java
@@ -19,6 +19,7 @@
import org.onosproject.codec.CodecContext;
import org.onosproject.codec.JsonCodec;
+import org.onosproject.net.OchSignal;
import org.onosproject.net.flow.criteria.Criterion;
import org.onosproject.net.flow.criteria.EthCriterion;
import org.onosproject.net.flow.criteria.EthTypeCriterion;
@@ -34,9 +35,9 @@
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.LambdaCriterion;
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.PortCriterion;
import org.onosproject.net.flow.criteria.SctpPortCriterion;
@@ -325,9 +326,15 @@
private static class FormatOchSigId implements CriterionTypeFormatter {
@Override
public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
- final LambdaCriterion lambdaCriterion =
- (LambdaCriterion) criterion;
- return root.put("lambda", lambdaCriterion.lambda());
+ OchSignal ochSignal = ((OchSignalCriterion) criterion).lambda();
+ ObjectNode child = root.putObject("ochSignalId");
+
+ child.put("gridType", ochSignal.gridType().name());
+ child.put("channelSpacing", ochSignal.channelSpacing().name());
+ child.put("spacingMultiplier", ochSignal.spacingMultiplier());
+ child.put("slotGranularity", ochSignal.slotGranularity());
+
+ return root;
}
}
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 6b3d40a..919719c 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
@@ -26,6 +26,9 @@
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;
@@ -406,8 +409,9 @@
* Tests lambda criterion.
*/
@Test
- public void matchLambdaTest() {
- Criterion criterion = Criteria.matchLambda((short) 40000);
+ 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));
}
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 df0f3c6..8233826 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
@@ -15,8 +15,10 @@
*/
package org.onosproject.codec.impl;
+import com.google.common.base.Joiner;
import org.hamcrest.Description;
import org.hamcrest.TypeSafeDiagnosingMatcher;
+import org.onosproject.net.OchSignal;
import org.onosproject.net.flow.criteria.Criterion;
import com.fasterxml.jackson.databind.JsonNode;
@@ -34,9 +36,9 @@
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.LambdaCriterion;
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.PortCriterion;
import org.onosproject.net.flow.criteria.SctpPortCriterion;
@@ -45,6 +47,8 @@
import org.onosproject.net.flow.criteria.VlanIdCriterion;
import org.onosproject.net.flow.criteria.VlanPcpCriterion;
+import java.util.Objects;
+
/**
* Hamcrest matcher for criterion objects.
*/
@@ -448,16 +452,29 @@
}
/**
- * Matches a lambda criterion object.
+ * Matches an Och signal criterion object.
*
* @param criterion criterion to match
* @return true if the JSON matches the criterion, false otherwise.
*/
- private boolean matchCriterion(LambdaCriterion criterion) {
- final int lambda = criterion.lambda();
- final int jsonLambda = jsonCriterion.get("lambda").intValue();
- if (lambda != jsonLambda) {
- description.appendText("lambda was " + Integer.toString(lambda));
+ 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;
@@ -572,7 +589,7 @@
(IPv6ExthdrFlagsCriterion) criterion);
case OCH_SIGID:
- return matchCriterion((LambdaCriterion) criterion);
+ return matchCriterion((OchSignalCriterion) criterion);
case OCH_SIGTYPE:
return matchCriterion((OchSignalTypeCriterion) criterion);
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java
index 2c2e488..95866bf 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java
@@ -27,9 +27,12 @@
import org.onosproject.codec.JsonCodec;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.DefaultApplicationId;
+import org.onosproject.net.ChannelSpacing;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
+import org.onosproject.net.GridType;
import org.onosproject.net.HostId;
+import org.onosproject.net.Lambda;
import org.onosproject.net.NetTestTools;
import org.onosproject.net.OchSignalType;
import org.onosproject.net.PortNumber;
@@ -138,11 +141,12 @@
DeviceId did1 = did("device1");
DeviceId did2 = did("device2");
DeviceId did3 = did("device3");
+ Lambda ochSignal = Lambda.ochSignal(GridType.DWDM, ChannelSpacing.CHL_100GHZ, 4, 8);
final TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPProtocol((byte) 3)
.matchMplsLabel(MplsLabel.mplsLabel(4))
.add(Criteria.matchOchSignalType(OchSignalType.FIXED_GRID))
- .matchLambda((short) 6)
+ .add(Criteria.matchLambda(ochSignal))
.matchEthDst(MacAddress.BROADCAST)
.matchIPDst(IpPrefix.valueOf("1.2.3.4/24"))
.build();