Sho SHIMIZU

Fix cast error on execution of "flow -j" command

This resolves ONOS-2037.

Change-Id: Ie6bf0c7ca0644ae8029df72d3ea7084fa0297aca
...@@ -19,6 +19,7 @@ import java.util.EnumMap; ...@@ -19,6 +19,7 @@ import java.util.EnumMap;
19 19
20 import org.onosproject.codec.CodecContext; 20 import org.onosproject.codec.CodecContext;
21 import org.onosproject.codec.JsonCodec; 21 import org.onosproject.codec.JsonCodec;
22 +import org.onosproject.net.OchSignal;
22 import org.onosproject.net.flow.criteria.Criterion; 23 import org.onosproject.net.flow.criteria.Criterion;
23 import org.onosproject.net.flow.criteria.EthCriterion; 24 import org.onosproject.net.flow.criteria.EthCriterion;
24 import org.onosproject.net.flow.criteria.EthTypeCriterion; 25 import org.onosproject.net.flow.criteria.EthTypeCriterion;
...@@ -34,9 +35,9 @@ import org.onosproject.net.flow.criteria.IcmpCodeCriterion; ...@@ -34,9 +35,9 @@ import org.onosproject.net.flow.criteria.IcmpCodeCriterion;
34 import org.onosproject.net.flow.criteria.IcmpTypeCriterion; 35 import org.onosproject.net.flow.criteria.IcmpTypeCriterion;
35 import org.onosproject.net.flow.criteria.Icmpv6CodeCriterion; 36 import org.onosproject.net.flow.criteria.Icmpv6CodeCriterion;
36 import org.onosproject.net.flow.criteria.Icmpv6TypeCriterion; 37 import org.onosproject.net.flow.criteria.Icmpv6TypeCriterion;
37 -import org.onosproject.net.flow.criteria.LambdaCriterion;
38 import org.onosproject.net.flow.criteria.MetadataCriterion; 38 import org.onosproject.net.flow.criteria.MetadataCriterion;
39 import org.onosproject.net.flow.criteria.MplsCriterion; 39 import org.onosproject.net.flow.criteria.MplsCriterion;
40 +import org.onosproject.net.flow.criteria.OchSignalCriterion;
40 import org.onosproject.net.flow.criteria.OchSignalTypeCriterion; 41 import org.onosproject.net.flow.criteria.OchSignalTypeCriterion;
41 import org.onosproject.net.flow.criteria.PortCriterion; 42 import org.onosproject.net.flow.criteria.PortCriterion;
42 import org.onosproject.net.flow.criteria.SctpPortCriterion; 43 import org.onosproject.net.flow.criteria.SctpPortCriterion;
...@@ -325,9 +326,15 @@ public final class CriterionCodec extends JsonCodec<Criterion> { ...@@ -325,9 +326,15 @@ public final class CriterionCodec extends JsonCodec<Criterion> {
325 private static class FormatOchSigId implements CriterionTypeFormatter { 326 private static class FormatOchSigId implements CriterionTypeFormatter {
326 @Override 327 @Override
327 public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) { 328 public ObjectNode encodeCriterion(ObjectNode root, Criterion criterion) {
328 - final LambdaCriterion lambdaCriterion = 329 + OchSignal ochSignal = ((OchSignalCriterion) criterion).lambda();
329 - (LambdaCriterion) criterion; 330 + ObjectNode child = root.putObject("ochSignalId");
330 - return root.put("lambda", lambdaCriterion.lambda()); 331 +
332 + child.put("gridType", ochSignal.gridType().name());
333 + child.put("channelSpacing", ochSignal.channelSpacing().name());
334 + child.put("spacingMultiplier", ochSignal.spacingMultiplier());
335 + child.put("slotGranularity", ochSignal.slotGranularity());
336 +
337 + return root;
331 } 338 }
332 } 339 }
333 340
......
...@@ -26,6 +26,9 @@ import org.onlab.packet.MplsLabel; ...@@ -26,6 +26,9 @@ import org.onlab.packet.MplsLabel;
26 import org.onlab.packet.VlanId; 26 import org.onlab.packet.VlanId;
27 import org.onosproject.codec.CodecContext; 27 import org.onosproject.codec.CodecContext;
28 import org.onosproject.codec.JsonCodec; 28 import org.onosproject.codec.JsonCodec;
29 +import org.onosproject.net.ChannelSpacing;
30 +import org.onosproject.net.GridType;
31 +import org.onosproject.net.Lambda;
29 import org.onosproject.net.OchSignalType; 32 import org.onosproject.net.OchSignalType;
30 import org.onosproject.net.PortNumber; 33 import org.onosproject.net.PortNumber;
31 import org.onosproject.net.flow.criteria.Criteria; 34 import org.onosproject.net.flow.criteria.Criteria;
...@@ -406,8 +409,9 @@ public class CriterionCodecTest { ...@@ -406,8 +409,9 @@ public class CriterionCodecTest {
406 * Tests lambda criterion. 409 * Tests lambda criterion.
407 */ 410 */
408 @Test 411 @Test
409 - public void matchLambdaTest() { 412 + public void matchOchSignal() {
410 - Criterion criterion = Criteria.matchLambda((short) 40000); 413 + Lambda ochSignal = Lambda.ochSignal(GridType.DWDM, ChannelSpacing.CHL_100GHZ, 4, 8);
414 + Criterion criterion = Criteria.matchLambda(ochSignal);
411 ObjectNode result = criterionCodec.encode(criterion, context); 415 ObjectNode result = criterionCodec.encode(criterion, context);
412 assertThat(result, matchesCriterion(criterion)); 416 assertThat(result, matchesCriterion(criterion));
413 } 417 }
......
...@@ -15,8 +15,10 @@ ...@@ -15,8 +15,10 @@
15 */ 15 */
16 package org.onosproject.codec.impl; 16 package org.onosproject.codec.impl;
17 17
18 +import com.google.common.base.Joiner;
18 import org.hamcrest.Description; 19 import org.hamcrest.Description;
19 import org.hamcrest.TypeSafeDiagnosingMatcher; 20 import org.hamcrest.TypeSafeDiagnosingMatcher;
21 +import org.onosproject.net.OchSignal;
20 import org.onosproject.net.flow.criteria.Criterion; 22 import org.onosproject.net.flow.criteria.Criterion;
21 23
22 import com.fasterxml.jackson.databind.JsonNode; 24 import com.fasterxml.jackson.databind.JsonNode;
...@@ -34,9 +36,9 @@ import org.onosproject.net.flow.criteria.IcmpCodeCriterion; ...@@ -34,9 +36,9 @@ import org.onosproject.net.flow.criteria.IcmpCodeCriterion;
34 import org.onosproject.net.flow.criteria.IcmpTypeCriterion; 36 import org.onosproject.net.flow.criteria.IcmpTypeCriterion;
35 import org.onosproject.net.flow.criteria.Icmpv6CodeCriterion; 37 import org.onosproject.net.flow.criteria.Icmpv6CodeCriterion;
36 import org.onosproject.net.flow.criteria.Icmpv6TypeCriterion; 38 import org.onosproject.net.flow.criteria.Icmpv6TypeCriterion;
37 -import org.onosproject.net.flow.criteria.LambdaCriterion;
38 import org.onosproject.net.flow.criteria.MetadataCriterion; 39 import org.onosproject.net.flow.criteria.MetadataCriterion;
39 import org.onosproject.net.flow.criteria.MplsCriterion; 40 import org.onosproject.net.flow.criteria.MplsCriterion;
41 +import org.onosproject.net.flow.criteria.OchSignalCriterion;
40 import org.onosproject.net.flow.criteria.OchSignalTypeCriterion; 42 import org.onosproject.net.flow.criteria.OchSignalTypeCriterion;
41 import org.onosproject.net.flow.criteria.PortCriterion; 43 import org.onosproject.net.flow.criteria.PortCriterion;
42 import org.onosproject.net.flow.criteria.SctpPortCriterion; 44 import org.onosproject.net.flow.criteria.SctpPortCriterion;
...@@ -45,6 +47,8 @@ import org.onosproject.net.flow.criteria.UdpPortCriterion; ...@@ -45,6 +47,8 @@ import org.onosproject.net.flow.criteria.UdpPortCriterion;
45 import org.onosproject.net.flow.criteria.VlanIdCriterion; 47 import org.onosproject.net.flow.criteria.VlanIdCriterion;
46 import org.onosproject.net.flow.criteria.VlanPcpCriterion; 48 import org.onosproject.net.flow.criteria.VlanPcpCriterion;
47 49
50 +import java.util.Objects;
51 +
48 /** 52 /**
49 * Hamcrest matcher for criterion objects. 53 * Hamcrest matcher for criterion objects.
50 */ 54 */
...@@ -448,16 +452,29 @@ public final class CriterionJsonMatcher extends ...@@ -448,16 +452,29 @@ public final class CriterionJsonMatcher extends
448 } 452 }
449 453
450 /** 454 /**
451 - * Matches a lambda criterion object. 455 + * Matches an Och signal criterion object.
452 * 456 *
453 * @param criterion criterion to match 457 * @param criterion criterion to match
454 * @return true if the JSON matches the criterion, false otherwise. 458 * @return true if the JSON matches the criterion, false otherwise.
455 */ 459 */
456 - private boolean matchCriterion(LambdaCriterion criterion) { 460 + private boolean matchCriterion(OchSignalCriterion criterion) {
457 - final int lambda = criterion.lambda(); 461 + final OchSignal ochSignal = criterion.lambda();
458 - final int jsonLambda = jsonCriterion.get("lambda").intValue(); 462 + final JsonNode jsonOchSignal = jsonCriterion.get("ochSignalId");
459 - if (lambda != jsonLambda) { 463 + String jsonGridType = jsonOchSignal.get("gridType").textValue();
460 - description.appendText("lambda was " + Integer.toString(lambda)); 464 + String jsonChannelSpacing = jsonOchSignal.get("channelSpacing").textValue();
465 + int jsonSpacingMultiplier = jsonOchSignal.get("spacingMultiplier").intValue();
466 + int jsonSlotGranularity = jsonOchSignal.get("slotGranularity").intValue();
467 +
468 + boolean equality = Objects.equals(ochSignal.gridType().name(), jsonGridType)
469 + && Objects.equals(ochSignal.channelSpacing().name(), jsonChannelSpacing)
470 + && Objects.equals(ochSignal.spacingMultiplier(), jsonSpacingMultiplier)
471 + && Objects.equals(ochSignal.slotGranularity(), jsonSlotGranularity);
472 +
473 + if (!equality) {
474 + String joined = Joiner.on(", ")
475 + .join(jsonGridType, jsonChannelSpacing, jsonSpacingMultiplier, jsonSlotGranularity);
476 +
477 + description.appendText("och signal id was " + joined);
461 return false; 478 return false;
462 } 479 }
463 return true; 480 return true;
...@@ -572,7 +589,7 @@ public final class CriterionJsonMatcher extends ...@@ -572,7 +589,7 @@ public final class CriterionJsonMatcher extends
572 (IPv6ExthdrFlagsCriterion) criterion); 589 (IPv6ExthdrFlagsCriterion) criterion);
573 590
574 case OCH_SIGID: 591 case OCH_SIGID:
575 - return matchCriterion((LambdaCriterion) criterion); 592 + return matchCriterion((OchSignalCriterion) criterion);
576 593
577 case OCH_SIGTYPE: 594 case OCH_SIGTYPE:
578 return matchCriterion((OchSignalTypeCriterion) criterion); 595 return matchCriterion((OchSignalTypeCriterion) criterion);
......
...@@ -27,9 +27,12 @@ import org.onlab.util.Bandwidth; ...@@ -27,9 +27,12 @@ import org.onlab.util.Bandwidth;
27 import org.onosproject.codec.JsonCodec; 27 import org.onosproject.codec.JsonCodec;
28 import org.onosproject.core.ApplicationId; 28 import org.onosproject.core.ApplicationId;
29 import org.onosproject.core.DefaultApplicationId; 29 import org.onosproject.core.DefaultApplicationId;
30 +import org.onosproject.net.ChannelSpacing;
30 import org.onosproject.net.ConnectPoint; 31 import org.onosproject.net.ConnectPoint;
31 import org.onosproject.net.DeviceId; 32 import org.onosproject.net.DeviceId;
33 +import org.onosproject.net.GridType;
32 import org.onosproject.net.HostId; 34 import org.onosproject.net.HostId;
35 +import org.onosproject.net.Lambda;
33 import org.onosproject.net.NetTestTools; 36 import org.onosproject.net.NetTestTools;
34 import org.onosproject.net.OchSignalType; 37 import org.onosproject.net.OchSignalType;
35 import org.onosproject.net.PortNumber; 38 import org.onosproject.net.PortNumber;
...@@ -138,11 +141,12 @@ public class IntentCodecTest extends AbstractIntentTest { ...@@ -138,11 +141,12 @@ public class IntentCodecTest extends AbstractIntentTest {
138 DeviceId did1 = did("device1"); 141 DeviceId did1 = did("device1");
139 DeviceId did2 = did("device2"); 142 DeviceId did2 = did("device2");
140 DeviceId did3 = did("device3"); 143 DeviceId did3 = did("device3");
144 + Lambda ochSignal = Lambda.ochSignal(GridType.DWDM, ChannelSpacing.CHL_100GHZ, 4, 8);
141 final TrafficSelector selector = DefaultTrafficSelector.builder() 145 final TrafficSelector selector = DefaultTrafficSelector.builder()
142 .matchIPProtocol((byte) 3) 146 .matchIPProtocol((byte) 3)
143 .matchMplsLabel(MplsLabel.mplsLabel(4)) 147 .matchMplsLabel(MplsLabel.mplsLabel(4))
144 .add(Criteria.matchOchSignalType(OchSignalType.FIXED_GRID)) 148 .add(Criteria.matchOchSignalType(OchSignalType.FIXED_GRID))
145 - .matchLambda((short) 6) 149 + .add(Criteria.matchLambda(ochSignal))
146 .matchEthDst(MacAddress.BROADCAST) 150 .matchEthDst(MacAddress.BROADCAST)
147 .matchIPDst(IpPrefix.valueOf("1.2.3.4/24")) 151 .matchIPDst(IpPrefix.valueOf("1.2.3.4/24"))
148 .build(); 152 .build();
......