diff options
author | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
---|---|---|
committer | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
commit | 13d05bc8458758ee39cb829098241e89616717ee (patch) | |
tree | 22a4d1ce65f15952f07a3df5af4b462b4697cb3a /framework/src/onos/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java | |
parent | 6139282e1e93c2322076de4b91b1c85d0bc4a8b3 (diff) |
ONOS checkin based on commit tag e796610b1f721d02f9b0e213cf6f7790c10ecd60
Change-Id: Ife8810491034fe7becdba75dda20de4267bd15cd
Diffstat (limited to 'framework/src/onos/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java')
-rw-r--r-- | framework/src/onos/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java | 470 |
1 files changed, 470 insertions, 0 deletions
diff --git a/framework/src/onos/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java b/framework/src/onos/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java new file mode 100644 index 00000000..97ccb836 --- /dev/null +++ b/framework/src/onos/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java @@ -0,0 +1,470 @@ +/* + * Copyright 2014-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.store.serializers; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.testing.EqualsTester; + +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.onlab.packet.VlanId; +import org.onlab.util.Bandwidth; +import org.onlab.util.Frequency; +import org.onosproject.cluster.NodeId; +import org.onosproject.cluster.RoleInfo; +import org.onosproject.core.DefaultApplicationId; +import org.onosproject.core.DefaultGroupId; +import org.onosproject.mastership.MastershipTerm; +import org.onosproject.net.Annotations; +import org.onosproject.net.ChannelSpacing; +import org.onosproject.net.ConnectPoint; +import org.onosproject.net.DefaultAnnotations; +import org.onosproject.net.DefaultDevice; +import org.onosproject.net.DefaultLink; +import org.onosproject.net.DefaultPort; +import org.onosproject.net.Device; +import org.onosproject.net.DeviceId; +import org.onosproject.net.GridType; +import org.onosproject.net.HostLocation; +import org.onosproject.net.Link; +import org.onosproject.net.Link.Type; +import org.onosproject.net.LinkKey; +import org.onosproject.net.OchPort; +import org.onosproject.net.OchSignal; +import org.onosproject.net.OduCltPort; +import org.onosproject.net.OmsPort; +import org.onosproject.net.PortNumber; +import org.onosproject.net.OduSignalType; +import org.onosproject.net.SparseAnnotations; +import org.onosproject.net.flow.DefaultFlowRule; +import org.onosproject.net.flow.DefaultTrafficSelector; +import org.onosproject.net.flow.DefaultTrafficTreatment; +import org.onosproject.net.flow.FlowId; +import org.onosproject.net.flow.FlowRule; +import org.onosproject.net.flow.FlowRuleBatchEntry; +import org.onosproject.net.intent.IntentId; +import org.onosproject.net.newresource.ResourcePath; +import org.onosproject.net.provider.ProviderId; +import org.onosproject.net.resource.link.BandwidthResource; +import org.onosproject.net.resource.link.BandwidthResourceAllocation; +import org.onosproject.net.resource.link.DefaultLinkResourceAllocations; +import org.onosproject.net.resource.link.DefaultLinkResourceRequest; +import org.onosproject.net.resource.link.LambdaResource; +import org.onosproject.net.resource.link.LambdaResourceAllocation; +import org.onosproject.net.resource.link.LinkResourceRequest; +import org.onosproject.net.resource.ResourceAllocation; +import org.onosproject.net.intent.constraint.AnnotationConstraint; +import org.onosproject.net.intent.constraint.BandwidthConstraint; +import org.onosproject.net.intent.constraint.LambdaConstraint; +import org.onosproject.net.intent.constraint.LatencyConstraint; +import org.onosproject.net.intent.constraint.LinkTypeConstraint; +import org.onosproject.net.intent.constraint.ObstacleConstraint; +import org.onosproject.net.intent.constraint.WaypointConstraint; +import org.onlab.packet.ChassisId; +import org.onlab.packet.IpAddress; +import org.onlab.packet.Ip4Address; +import org.onlab.packet.Ip6Address; +import org.onlab.packet.IpPrefix; +import org.onlab.packet.Ip4Prefix; +import org.onlab.packet.Ip6Prefix; +import org.onlab.packet.MacAddress; +import org.onlab.util.KryoNamespace; + +import java.nio.ByteBuffer; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.time.Duration; + +import static java.util.Arrays.asList; +import static org.junit.Assert.*; +import static org.onosproject.net.DeviceId.deviceId; +import static org.onosproject.net.PortNumber.portNumber; + +public class KryoSerializerTest { + + private static final ProviderId PID = new ProviderId("of", "foo"); + private static final ProviderId PIDA = new ProviderId("of", "foo", true); + private static final DeviceId DID1 = deviceId("of:foo"); + private static final DeviceId DID2 = deviceId("of:bar"); + private static final PortNumber P1 = portNumber(1); + private static final PortNumber P2 = portNumber(2); + private static final ConnectPoint CP1 = new ConnectPoint(DID1, P1); + private static final ConnectPoint CP2 = new ConnectPoint(DID2, P2); + private static final String MFR = "whitebox"; + private static final String HW = "1.1.x"; + private static final String SW1 = "3.8.1"; + private static final String SW2 = "3.9.5"; + private static final String SN = "43311-12345"; + private static final ChassisId CID = new ChassisId(); + private static final Device DEV1 = new DefaultDevice(PID, DID1, Device.Type.SWITCH, MFR, HW, + SW1, SN, CID); + private static final SparseAnnotations A1 = DefaultAnnotations.builder() + .set("A1", "a1") + .set("B1", "b1") + .build(); + private static final SparseAnnotations A1_2 = DefaultAnnotations.builder() + .remove("A1") + .set("B3", "b3") + .build(); + private static final OchSignal OCH_SIGNAL1 = (OchSignal) org.onosproject.net.Lambda.ochSignal( + GridType.DWDM, ChannelSpacing.CHL_100GHZ, -8, 4); + private static final VlanId VLAN1 = VlanId.vlanId((short) 100); + + private KryoSerializer serializer; + + @BeforeClass + public static void setUpBeforeClass() throws Exception { + } + + @Before + public void setUp() throws Exception { + serializer = new KryoSerializer() { + + @Override + protected void setupKryoPool() { + serializerPool = KryoNamespace.newBuilder() + .register(KryoNamespaces.API) + .nextId(KryoNamespaces.BEGIN_USER_CUSTOM_ID) + .build(); + } + }; + } + + @After + public void tearDown() throws Exception { + } + + private <T> void testSerializedEquals(T original) { + ByteBuffer buffer = ByteBuffer.allocate(1 * 1024 * 1024); + serializer.encode(original, buffer); + buffer.flip(); + T copy = serializer.decode(buffer); + + T copy2 = serializer.decode(serializer.encode(original)); + + new EqualsTester() + .addEqualityGroup(original, copy, copy2) + .testEquals(); + } + + private <T> void testSerializable(T original) { + byte[] bs = serializer.encode(original); + T copy = serializer.decode(bs); + assertNotNull(copy); + } + + + @Test + public void testConnectPoint() { + testSerializedEquals(new ConnectPoint(DID1, P1)); + } + + @Test + public void testDefaultLink() { + testSerializedEquals(new DefaultLink(PID, CP1, CP2, Link.Type.DIRECT)); + testSerializedEquals(new DefaultLink(PID, CP1, CP2, Link.Type.DIRECT, A1)); + } + + @Test + public void testDefaultPort() { + testSerializedEquals(new DefaultPort(DEV1, P1, true)); + testSerializedEquals(new DefaultPort(DEV1, P1, true, A1_2)); + } + + @Test + public void testOmsPort() { + testSerializedEquals(new OmsPort(DEV1, P1, true, Frequency.ofGHz(190_100), Frequency.ofGHz(197_300), + Frequency.ofGHz(100))); + testSerializedEquals(new OmsPort(DEV1, P1, true, Frequency.ofGHz(190_100), Frequency.ofGHz(197_300), + Frequency.ofGHz(100), A1_2)); + } + + @Test + public void testOchPort() { + testSerializedEquals(new OchPort(DEV1, P1, true, OduSignalType.ODU0, false, OCH_SIGNAL1)); + testSerializedEquals(new OchPort(DEV1, P1, true, OduSignalType.ODU0, false, OCH_SIGNAL1, A1_2)); + } + + @Test + public void testOduCltPort() { + testSerializedEquals(new OduCltPort(DEV1, P1, true, OduCltPort.SignalType.CLT_10GBE)); + testSerializedEquals(new OduCltPort(DEV1, P1, true, OduCltPort.SignalType.CLT_10GBE, A1_2)); + } + + @Test + public void testDeviceId() { + testSerializedEquals(DID1); + } + + @Test + public void testImmutableMap() { + testSerializedEquals(ImmutableMap.of(DID1, DEV1, DID2, DEV1)); + testSerializedEquals(ImmutableMap.of(DID1, DEV1)); + testSerializedEquals(ImmutableMap.of()); + } + + @Test + public void testImmutableSet() { + testSerializedEquals(ImmutableSet.of(DID1, DID2)); + testSerializedEquals(ImmutableSet.of(DID1)); + testSerializedEquals(ImmutableSet.of()); + } + + @Test + public void testImmutableList() { + testSerializedEquals(ImmutableList.of(DID1, DID2)); + testSerializedEquals(ImmutableList.of(DID1)); + testSerializedEquals(ImmutableList.of()); + } + + @Test + public void testFlowRuleBatchEntry() { + final FlowRule rule1 = + DefaultFlowRule.builder() + .forDevice(DID1) + .withSelector(DefaultTrafficSelector.emptySelector()) + .withTreatment(DefaultTrafficTreatment.emptyTreatment()) + .withPriority(0) + .fromApp(new DefaultApplicationId(1, "1")) + .makeTemporary(1) + .build(); + + final FlowRuleBatchEntry entry1 = + new FlowRuleBatchEntry(FlowRuleBatchEntry.FlowRuleOperation.ADD, rule1); + final FlowRuleBatchEntry entry2 = + new FlowRuleBatchEntry(FlowRuleBatchEntry.FlowRuleOperation.ADD, rule1, 100L); + + testSerializedEquals(entry1); + testSerializedEquals(entry2); + } + + @Test + public void testIpPrefix() { + testSerializedEquals(IpPrefix.valueOf("192.168.0.1/24")); + } + + @Test + public void testIp4Prefix() { + testSerializedEquals(Ip4Prefix.valueOf("192.168.0.1/24")); + } + + @Test + public void testIp6Prefix() { + testSerializedEquals(Ip6Prefix.valueOf("1111:2222::/120")); + } + + @Test + public void testIpAddress() { + testSerializedEquals(IpAddress.valueOf("192.168.0.1")); + } + + @Test + public void testIp4Address() { + testSerializedEquals(Ip4Address.valueOf("192.168.0.1")); + } + + @Test + public void testIp6Address() { + testSerializedEquals(Ip6Address.valueOf("1111:2222::")); + } + + @Test + public void testMacAddress() { + testSerializedEquals(MacAddress.valueOf("12:34:56:78:90:ab")); + } + + @Test + public void testLinkKey() { + testSerializedEquals(LinkKey.linkKey(CP1, CP2)); + } + + @Test + public void testNodeId() { + testSerializedEquals(new NodeId("SomeNodeIdentifier")); + } + + @Test + public void testPortNumber() { + testSerializedEquals(P1); + } + + @Test + public void testProviderId() { + testSerializedEquals(PID); + testSerializedEquals(PIDA); + } + + @Test + public void testMastershipTerm() { + testSerializedEquals(MastershipTerm.of(new NodeId("foo"), 2)); + testSerializedEquals(MastershipTerm.of(null, 0)); + } + + @Test + public void testHostLocation() { + testSerializedEquals(new HostLocation(CP1, 1234L)); + } + + @Test + public void testFlowId() { + testSerializedEquals(FlowId.valueOf(0x12345678L)); + } + + @Test + public void testRoleInfo() { + testSerializedEquals(new RoleInfo(new NodeId("master"), + asList(new NodeId("stby1"), new NodeId("stby2")))); + } + + @Test + public void testIndexedLambda() { + testSerializedEquals(org.onosproject.net.Lambda.indexedLambda(10L)); + } + + @Test + public void testOchSignal() { + testSerializedEquals(org.onosproject.net.Lambda.ochSignal( + GridType.DWDM, ChannelSpacing.CHL_100GHZ, 1, 1 + )); + } + + @Test + public void testDefaultLinkResourceRequest() { + testSerializable(DefaultLinkResourceRequest.builder(IntentId.valueOf(2501), ImmutableList.of()) + .addLambdaRequest() + .addBandwidthRequest(32.195) + .build() + ); + } + + @Test + public void testDefaultLinkResourceAllocations() { + LinkResourceRequest request = DefaultLinkResourceRequest + .builder(IntentId.valueOf(2501), ImmutableList.of()) + .addLambdaRequest() + .addBandwidthRequest(32.195) + .build(); + Map<Link, Set<ResourceAllocation>> allocations = new HashMap<>(); + allocations.put(new DefaultLink(PID, CP1, CP2, Type.DIRECT), + ImmutableSet.of(new BandwidthResourceAllocation(new BandwidthResource(Bandwidth.bps(10.0))), + new LambdaResourceAllocation(LambdaResource.valueOf(1)))); + testSerializable(new DefaultLinkResourceAllocations(request, allocations)); + } + + @Test + public void testResourcePath() { + testSerializedEquals(new ResourcePath(LinkKey.linkKey(CP1, CP2), VLAN1)); + } + + @Test + public void testResourceAllocation() { + testSerializedEquals(new org.onosproject.net.newresource.ResourceAllocation( + new ResourcePath(LinkKey.linkKey(CP1, CP2), VLAN1), + IntentId.valueOf(30))); + } + + @Test + public void testFrequency() { + testSerializedEquals(Frequency.ofGHz(100)); + } + + @Test + public void testBandwidth() { + testSerializedEquals(Bandwidth.mbps(1000.0)); + } + + @Test + public void testLambdaConstraint() { + testSerializable(new LambdaConstraint(LambdaResource.valueOf(1))); + } + + @Test + public void testBandwidthConstraint() { + testSerializable(new BandwidthConstraint(new BandwidthResource(Bandwidth.bps(1000.0)))); + } + + @Test + public void testLinkTypeConstraint() { + testSerializable(new LinkTypeConstraint(true, Link.Type.DIRECT)); + } + + @Test + public void testLatencyConstraint() { + testSerializable(new LatencyConstraint(Duration.ofSeconds(10))); + } + + @Test + public void testWaypointConstraint() { + testSerializable(new WaypointConstraint(deviceId("of:1"), deviceId("of:2"))); + } + + @Test + public void testObstacleConstraint() { + testSerializable(new ObstacleConstraint(deviceId("of:1"), deviceId("of:2"))); + } + + @Test + public void testArraysAsList() { + testSerializedEquals(Arrays.asList(1, 2, 3)); + } + + @Test + public void testAnnotationConstraint() { + testSerializable(new AnnotationConstraint("distance", 100.0)); + } + + @Test + public void testDefaultGroupId() { + testSerializedEquals(new DefaultGroupId(99)); + } + + @Test + public void testEmptySet() { + testSerializedEquals(Collections.emptySet()); + } + + @Test + public void testAnnotations() { + // Annotations does not have equals defined, manually test equality + final byte[] a1Bytes = serializer.encode(A1); + SparseAnnotations copiedA1 = serializer.decode(a1Bytes); + assertAnnotationsEquals(copiedA1, A1); + + final byte[] a12Bytes = serializer.encode(A1_2); + SparseAnnotations copiedA12 = serializer.decode(a12Bytes); + assertAnnotationsEquals(copiedA12, A1_2); + } + + // code clone + protected static void assertAnnotationsEquals(Annotations actual, SparseAnnotations... annotations) { + SparseAnnotations expected = DefaultAnnotations.builder().build(); + for (SparseAnnotations a : annotations) { + expected = DefaultAnnotations.union(expected, a); + } + assertEquals(expected.keys(), actual.keys()); + for (String key : expected.keys()) { + assertEquals(expected.value(key), actual.value(key)); + } + } + +} |