Kryo related fixes
- ProviderIdSerializer fix (ancillary) - minor improvements - add test cases Change-Id: I6d969ac6518c44499f0fac167db4bdf1964f6aaa
Showing
4 changed files
with
55 additions
and
7 deletions
| ... | @@ -22,7 +22,7 @@ public class MastershipTermSerializer extends Serializer<MastershipTerm> { | ... | @@ -22,7 +22,7 @@ public class MastershipTermSerializer extends Serializer<MastershipTerm> { |
| 22 | 22 | ||
| 23 | @Override | 23 | @Override |
| 24 | public MastershipTerm read(Kryo kryo, Input input, Class<MastershipTerm> type) { | 24 | public MastershipTerm read(Kryo kryo, Input input, Class<MastershipTerm> type) { |
| 25 | - final NodeId node = new NodeId(kryo.readObject(input, String.class)); | 25 | + final NodeId node = new NodeId(input.readString()); |
| 26 | final int term = input.readInt(); | 26 | final int term = input.readInt(); |
| 27 | return MastershipTerm.of(node, term); | 27 | return MastershipTerm.of(node, term); |
| 28 | } | 28 | } | ... | ... |
| ... | @@ -22,12 +22,12 @@ public final class NodeIdSerializer extends Serializer<NodeId> { | ... | @@ -22,12 +22,12 @@ public final class NodeIdSerializer extends Serializer<NodeId> { |
| 22 | 22 | ||
| 23 | @Override | 23 | @Override |
| 24 | public void write(Kryo kryo, Output output, NodeId object) { | 24 | public void write(Kryo kryo, Output output, NodeId object) { |
| 25 | - kryo.writeObject(output, object.toString()); | 25 | + output.writeString(object.toString()); |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | @Override | 28 | @Override |
| 29 | public NodeId read(Kryo kryo, Input input, Class<NodeId> type) { | 29 | public NodeId read(Kryo kryo, Input input, Class<NodeId> type) { |
| 30 | - final String id = kryo.readObject(input, String.class); | 30 | + final String id = input.readString(); |
| 31 | return new NodeId(id); | 31 | return new NodeId(id); |
| 32 | } | 32 | } |
| 33 | } | 33 | } | ... | ... |
| ... | @@ -24,13 +24,15 @@ public class ProviderIdSerializer extends Serializer<ProviderId> { | ... | @@ -24,13 +24,15 @@ public class ProviderIdSerializer extends Serializer<ProviderId> { |
| 24 | public void write(Kryo kryo, Output output, ProviderId object) { | 24 | public void write(Kryo kryo, Output output, ProviderId object) { |
| 25 | output.writeString(object.scheme()); | 25 | output.writeString(object.scheme()); |
| 26 | output.writeString(object.id()); | 26 | output.writeString(object.id()); |
| 27 | + output.writeBoolean(object.isAncillary()); | ||
| 27 | } | 28 | } |
| 28 | 29 | ||
| 29 | @Override | 30 | @Override |
| 30 | public ProviderId read(Kryo kryo, Input input, Class<ProviderId> type) { | 31 | public ProviderId read(Kryo kryo, Input input, Class<ProviderId> type) { |
| 31 | String scheme = input.readString(); | 32 | String scheme = input.readString(); |
| 32 | String id = input.readString(); | 33 | String id = input.readString(); |
| 33 | - return new ProviderId(scheme, id); | 34 | + boolean isAncillary = input.readBoolean(); |
| 35 | + return new ProviderId(scheme, id, isAncillary); | ||
| 34 | } | 36 | } |
| 35 | 37 | ||
| 36 | } | 38 | } | ... | ... |
| 1 | package org.onlab.onos.store.serializers; | 1 | package org.onlab.onos.store.serializers; |
| 2 | 2 | ||
| 3 | +import static org.junit.Assert.assertEquals; | ||
| 3 | import static org.onlab.onos.net.DeviceId.deviceId; | 4 | import static org.onlab.onos.net.DeviceId.deviceId; |
| 4 | import static org.onlab.onos.net.PortNumber.portNumber; | 5 | import static org.onlab.onos.net.PortNumber.portNumber; |
| 5 | 6 | ||
| 6 | import java.nio.ByteBuffer; | 7 | import java.nio.ByteBuffer; |
| 8 | + | ||
| 7 | import org.junit.After; | 9 | import org.junit.After; |
| 8 | import org.junit.Before; | 10 | import org.junit.Before; |
| 9 | import org.junit.BeforeClass; | 11 | import org.junit.BeforeClass; |
| 10 | import org.junit.Test; | 12 | import org.junit.Test; |
| 13 | +import org.onlab.onos.cluster.MastershipTerm; | ||
| 11 | import org.onlab.onos.cluster.NodeId; | 14 | import org.onlab.onos.cluster.NodeId; |
| 15 | +import org.onlab.onos.net.Annotations; | ||
| 12 | import org.onlab.onos.net.ConnectPoint; | 16 | import org.onlab.onos.net.ConnectPoint; |
| 17 | +import org.onlab.onos.net.DefaultAnnotations; | ||
| 13 | import org.onlab.onos.net.DefaultDevice; | 18 | import org.onlab.onos.net.DefaultDevice; |
| 14 | import org.onlab.onos.net.DefaultLink; | 19 | import org.onlab.onos.net.DefaultLink; |
| 15 | import org.onlab.onos.net.DefaultPort; | 20 | import org.onlab.onos.net.DefaultPort; |
| ... | @@ -17,8 +22,11 @@ import org.onlab.onos.net.Device; | ... | @@ -17,8 +22,11 @@ import org.onlab.onos.net.Device; |
| 17 | import org.onlab.onos.net.DeviceId; | 22 | import org.onlab.onos.net.DeviceId; |
| 18 | import org.onlab.onos.net.Link; | 23 | import org.onlab.onos.net.Link; |
| 19 | import org.onlab.onos.net.LinkKey; | 24 | import org.onlab.onos.net.LinkKey; |
| 25 | +import org.onlab.onos.net.MastershipRole; | ||
| 20 | import org.onlab.onos.net.PortNumber; | 26 | import org.onlab.onos.net.PortNumber; |
| 27 | +import org.onlab.onos.net.SparseAnnotations; | ||
| 21 | import org.onlab.onos.net.provider.ProviderId; | 28 | import org.onlab.onos.net.provider.ProviderId; |
| 29 | +import org.onlab.packet.IpAddress; | ||
| 22 | import org.onlab.packet.IpPrefix; | 30 | import org.onlab.packet.IpPrefix; |
| 23 | import org.onlab.util.KryoPool; | 31 | import org.onlab.util.KryoPool; |
| 24 | 32 | ||
| ... | @@ -28,6 +36,7 @@ import com.google.common.testing.EqualsTester; | ... | @@ -28,6 +36,7 @@ import com.google.common.testing.EqualsTester; |
| 28 | 36 | ||
| 29 | public class KryoSerializerTests { | 37 | public class KryoSerializerTests { |
| 30 | private static final ProviderId PID = new ProviderId("of", "foo"); | 38 | private static final ProviderId PID = new ProviderId("of", "foo"); |
| 39 | + private static final ProviderId PIDA = new ProviderId("of", "foo", true); | ||
| 31 | private static final DeviceId DID1 = deviceId("of:foo"); | 40 | private static final DeviceId DID1 = deviceId("of:foo"); |
| 32 | private static final DeviceId DID2 = deviceId("of:bar"); | 41 | private static final DeviceId DID2 = deviceId("of:bar"); |
| 33 | private static final PortNumber P1 = portNumber(1); | 42 | private static final PortNumber P1 = portNumber(1); |
| ... | @@ -40,6 +49,14 @@ public class KryoSerializerTests { | ... | @@ -40,6 +49,14 @@ public class KryoSerializerTests { |
| 40 | private static final String SW2 = "3.9.5"; | 49 | private static final String SW2 = "3.9.5"; |
| 41 | private static final String SN = "43311-12345"; | 50 | private static final String SN = "43311-12345"; |
| 42 | private static final Device DEV1 = new DefaultDevice(PID, DID1, Device.Type.SWITCH, MFR, HW, SW1, SN); | 51 | private static final Device DEV1 = new DefaultDevice(PID, DID1, Device.Type.SWITCH, MFR, HW, SW1, SN); |
| 52 | + private static final SparseAnnotations A1 = DefaultAnnotations.builder() | ||
| 53 | + .set("A1", "a1") | ||
| 54 | + .set("B1", "b1") | ||
| 55 | + .build(); | ||
| 56 | + private static final SparseAnnotations A1_2 = DefaultAnnotations.builder() | ||
| 57 | + .remove("A1") | ||
| 58 | + .set("B3", "b3") | ||
| 59 | + .build(); | ||
| 43 | 60 | ||
| 44 | private static KryoPool kryos; | 61 | private static KryoPool kryos; |
| 45 | 62 | ||
| ... | @@ -49,9 +66,6 @@ public class KryoSerializerTests { | ... | @@ -49,9 +66,6 @@ public class KryoSerializerTests { |
| 49 | .register(KryoPoolUtil.API) | 66 | .register(KryoPoolUtil.API) |
| 50 | .register(ImmutableMap.class, new ImmutableMapSerializer()) | 67 | .register(ImmutableMap.class, new ImmutableMapSerializer()) |
| 51 | .register(ImmutableSet.class, new ImmutableSetSerializer()) | 68 | .register(ImmutableSet.class, new ImmutableSetSerializer()) |
| 52 | - | ||
| 53 | - | ||
| 54 | - | ||
| 55 | .build(); | 69 | .build(); |
| 56 | } | 70 | } |
| 57 | 71 | ||
| ... | @@ -82,6 +96,8 @@ public class KryoSerializerTests { | ... | @@ -82,6 +96,8 @@ public class KryoSerializerTests { |
| 82 | testSerialized(new ConnectPoint(DID1, P1)); | 96 | testSerialized(new ConnectPoint(DID1, P1)); |
| 83 | testSerialized(new DefaultLink(PID, CP1, CP2, Link.Type.DIRECT)); | 97 | testSerialized(new DefaultLink(PID, CP1, CP2, Link.Type.DIRECT)); |
| 84 | testSerialized(new DefaultPort(DEV1, P1, true)); | 98 | testSerialized(new DefaultPort(DEV1, P1, true)); |
| 99 | + testSerialized(new DefaultLink(PID, CP1, CP2, Link.Type.DIRECT, A1)); | ||
| 100 | + testSerialized(new DefaultPort(DEV1, P1, true, A1_2)); | ||
| 85 | testSerialized(DID1); | 101 | testSerialized(DID1); |
| 86 | testSerialized(ImmutableMap.of(DID1, DEV1, DID2, DEV1)); | 102 | testSerialized(ImmutableMap.of(DID1, DEV1, DID2, DEV1)); |
| 87 | testSerialized(ImmutableMap.of(DID1, DEV1)); | 103 | testSerialized(ImmutableMap.of(DID1, DEV1)); |
| ... | @@ -90,10 +106,40 @@ public class KryoSerializerTests { | ... | @@ -90,10 +106,40 @@ public class KryoSerializerTests { |
| 90 | testSerialized(ImmutableSet.of(DID1)); | 106 | testSerialized(ImmutableSet.of(DID1)); |
| 91 | testSerialized(ImmutableSet.of()); | 107 | testSerialized(ImmutableSet.of()); |
| 92 | testSerialized(IpPrefix.valueOf("192.168.0.1/24")); | 108 | testSerialized(IpPrefix.valueOf("192.168.0.1/24")); |
| 109 | + testSerialized(IpAddress.valueOf("192.168.0.1")); | ||
| 93 | testSerialized(new LinkKey(CP1, CP2)); | 110 | testSerialized(new LinkKey(CP1, CP2)); |
| 94 | testSerialized(new NodeId("SomeNodeIdentifier")); | 111 | testSerialized(new NodeId("SomeNodeIdentifier")); |
| 95 | testSerialized(P1); | 112 | testSerialized(P1); |
| 96 | testSerialized(PID); | 113 | testSerialized(PID); |
| 114 | + testSerialized(PIDA); | ||
| 115 | + testSerialized(new NodeId("bar")); | ||
| 116 | + testSerialized(MastershipTerm.of(new NodeId("foo"), 2)); | ||
| 117 | + for (MastershipRole role : MastershipRole.values()) { | ||
| 118 | + testSerialized(role); | ||
| 119 | + } | ||
| 120 | + } | ||
| 121 | + | ||
| 122 | + public final void testAnnotations() { | ||
| 123 | + // Annotations does not have equals defined, manually test equality | ||
| 124 | + final byte[] a1Bytes = kryos.serialize(A1); | ||
| 125 | + SparseAnnotations copiedA1 = kryos.deserialize(a1Bytes); | ||
| 126 | + assertAnnotationsEquals(copiedA1, A1); | ||
| 127 | + | ||
| 128 | + final byte[] a12Bytes = kryos.serialize(A1_2); | ||
| 129 | + SparseAnnotations copiedA12 = kryos.deserialize(a12Bytes); | ||
| 130 | + assertAnnotationsEquals(copiedA12, A1_2); | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + // code clone | ||
| 134 | + public static void assertAnnotationsEquals(Annotations actual, SparseAnnotations... annotations) { | ||
| 135 | + DefaultAnnotations expected = DefaultAnnotations.builder().build(); | ||
| 136 | + for (SparseAnnotations a : annotations) { | ||
| 137 | + expected = DefaultAnnotations.merge(expected, a); | ||
| 138 | + } | ||
| 139 | + assertEquals(expected.keys(), actual.keys()); | ||
| 140 | + for (String key : expected.keys()) { | ||
| 141 | + assertEquals(expected.value(key), actual.value(key)); | ||
| 142 | + } | ||
| 97 | } | 143 | } |
| 98 | 144 | ||
| 99 | } | 145 | } | ... | ... |
-
Please register or login to post a comment