Ray Milkey
Committed by Gerrit Code Review

Unit tests for the distributed group store.

Change-Id: Ie8f00b9bbc1ba46a6f80e70f63d1fd853d64154b
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.store.cluster.messaging;
17 +
18 +import java.util.Set;
19 +import java.util.concurrent.CompletableFuture;
20 +import java.util.concurrent.Executor;
21 +import java.util.concurrent.ExecutorService;
22 +import java.util.function.Consumer;
23 +import java.util.function.Function;
24 +
25 +import org.onosproject.cluster.NodeId;
26 +
27 +/**
28 + * Testing adapter for the cluster communication service.
29 + */
30 +public class ClusterCommunicationServiceAdapter
31 + implements ClusterCommunicationService {
32 +
33 + @Override
34 + public void addSubscriber(MessageSubject subject,
35 + ClusterMessageHandler subscriber,
36 + ExecutorService executor) {
37 + }
38 +
39 + @Override
40 + public void removeSubscriber(MessageSubject subject) {}
41 +
42 + @Override
43 + public <M> void broadcast(M message, MessageSubject subject,
44 + Function<M, byte[]> encoder) {
45 + }
46 +
47 + @Override
48 + public <M> void broadcastIncludeSelf(M message,
49 + MessageSubject subject, Function<M, byte[]> encoder) {
50 + }
51 +
52 + @Override
53 + public <M> CompletableFuture<Void> unicast(M message, MessageSubject subject,
54 + Function<M, byte[]> encoder, NodeId toNodeId) {
55 + return null;
56 + }
57 +
58 + @Override
59 + public <M> void multicast(M message, MessageSubject subject,
60 + Function<M, byte[]> encoder, Set<NodeId> nodes) {
61 + }
62 +
63 + @Override
64 + public <M, R> CompletableFuture<R> sendAndReceive(M message,
65 + MessageSubject subject, Function<M, byte[]> encoder,
66 + Function<byte[], R> decoder, NodeId toNodeId) {
67 + return null;
68 + }
69 +
70 + @Override
71 + public <M, R> void addSubscriber(MessageSubject subject,
72 + Function<byte[], M> decoder, Function<M, R> handler,
73 + Function<R, byte[]> encoder, Executor executor) {
74 + }
75 +
76 + @Override
77 + public <M, R> void addSubscriber(MessageSubject subject,
78 + Function<byte[], M> decoder, Function<M, CompletableFuture<R>> handler,
79 + Function<R, byte[]> encoder) {
80 + }
81 +
82 + @Override
83 + public <M> void addSubscriber(MessageSubject subject,
84 + Function<byte[], M> decoder, Consumer<M> handler,
85 + Executor executor) {
86 +
87 + }
88 +}
...@@ -91,8 +91,10 @@ public final class TestEventuallyConsistentMap<K, V> extends EventuallyConsisten ...@@ -91,8 +91,10 @@ public final class TestEventuallyConsistentMap<K, V> extends EventuallyConsisten
91 EventuallyConsistentMapEvent<K, V> addEvent = 91 EventuallyConsistentMapEvent<K, V> addEvent =
92 new EventuallyConsistentMapEvent<>(mapName, PUT, key, value); 92 new EventuallyConsistentMapEvent<>(mapName, PUT, key, value);
93 notifyListeners(addEvent); 93 notifyListeners(addEvent);
94 + if (peerUpdateFunction != null) {
94 peerUpdateFunction.apply(key, value); 95 peerUpdateFunction.apply(key, value);
95 } 96 }
97 + }
96 98
97 @Override 99 @Override
98 public V remove(K key) { 100 public V remove(K key) {
......
...@@ -1014,7 +1014,7 @@ public class DistributedGroupStore ...@@ -1014,7 +1014,7 @@ public class DistributedGroupStore
1014 /** 1014 /**
1015 * Flattened map key to be used to store group entries. 1015 * Flattened map key to be used to store group entries.
1016 */ 1016 */
1017 - private class GroupStoreMapKey { 1017 + protected static class GroupStoreMapKey {
1018 private final DeviceId deviceId; 1018 private final DeviceId deviceId;
1019 1019
1020 public GroupStoreMapKey(DeviceId deviceId) { 1020 public GroupStoreMapKey(DeviceId deviceId) {
...@@ -1047,7 +1047,7 @@ public class DistributedGroupStore ...@@ -1047,7 +1047,7 @@ public class DistributedGroupStore
1047 } 1047 }
1048 } 1048 }
1049 1049
1050 - private class GroupStoreKeyMapKey extends GroupStoreMapKey { 1050 + protected static class GroupStoreKeyMapKey extends GroupStoreMapKey {
1051 private final GroupKey appCookie; 1051 private final GroupKey appCookie;
1052 public GroupStoreKeyMapKey(DeviceId deviceId, 1052 public GroupStoreKeyMapKey(DeviceId deviceId,
1053 GroupKey appCookie) { 1053 GroupKey appCookie) {
...@@ -1078,7 +1078,7 @@ public class DistributedGroupStore ...@@ -1078,7 +1078,7 @@ public class DistributedGroupStore
1078 } 1078 }
1079 } 1079 }
1080 1080
1081 - private class GroupStoreIdMapKey extends GroupStoreMapKey { 1081 + protected static class GroupStoreIdMapKey extends GroupStoreMapKey {
1082 private final GroupId groupId; 1082 private final GroupId groupId;
1083 public GroupStoreIdMapKey(DeviceId deviceId, 1083 public GroupStoreIdMapKey(DeviceId deviceId,
1084 GroupId groupId) { 1084 GroupId groupId) {
......
...@@ -15,10 +15,22 @@ ...@@ -15,10 +15,22 @@
15 */ 15 */
16 package org.onosproject.store.ecmap; 16 package org.onosproject.store.ecmap;
17 17
18 -import com.google.common.collect.ComparisonChain; 18 +import java.util.ArrayList;
19 -import com.google.common.collect.ImmutableList; 19 +import java.util.Collection;
20 -import com.google.common.collect.ImmutableSet; 20 +import java.util.HashMap;
21 -import com.google.common.util.concurrent.MoreExecutors; 21 +import java.util.HashSet;
22 +import java.util.List;
23 +import java.util.Map;
24 +import java.util.Objects;
25 +import java.util.Optional;
26 +import java.util.Set;
27 +import java.util.concurrent.CompletableFuture;
28 +import java.util.concurrent.CountDownLatch;
29 +import java.util.concurrent.Executor;
30 +import java.util.concurrent.TimeUnit;
31 +import java.util.concurrent.atomic.AtomicLong;
32 +import java.util.function.Consumer;
33 +import java.util.function.Function;
22 34
23 import org.junit.After; 35 import org.junit.After;
24 import org.junit.Before; 36 import org.junit.Before;
...@@ -32,38 +44,35 @@ import org.onosproject.cluster.NodeId; ...@@ -32,38 +44,35 @@ import org.onosproject.cluster.NodeId;
32 import org.onosproject.event.AbstractEvent; 44 import org.onosproject.event.AbstractEvent;
33 import org.onosproject.store.Timestamp; 45 import org.onosproject.store.Timestamp;
34 import org.onosproject.store.cluster.messaging.ClusterCommunicationService; 46 import org.onosproject.store.cluster.messaging.ClusterCommunicationService;
35 -import org.onosproject.store.cluster.messaging.ClusterMessageHandler; 47 +import org.onosproject.store.cluster.messaging.ClusterCommunicationServiceAdapter;
36 import org.onosproject.store.cluster.messaging.MessageSubject; 48 import org.onosproject.store.cluster.messaging.MessageSubject;
37 import org.onosproject.store.impl.LogicalTimestamp; 49 import org.onosproject.store.impl.LogicalTimestamp;
38 -import org.onosproject.store.service.WallClockTimestamp;
39 import org.onosproject.store.serializers.KryoNamespaces; 50 import org.onosproject.store.serializers.KryoNamespaces;
40 import org.onosproject.store.serializers.KryoSerializer; 51 import org.onosproject.store.serializers.KryoSerializer;
41 import org.onosproject.store.service.EventuallyConsistentMap; 52 import org.onosproject.store.service.EventuallyConsistentMap;
42 import org.onosproject.store.service.EventuallyConsistentMapEvent; 53 import org.onosproject.store.service.EventuallyConsistentMapEvent;
43 import org.onosproject.store.service.EventuallyConsistentMapListener; 54 import org.onosproject.store.service.EventuallyConsistentMapListener;
55 +import org.onosproject.store.service.WallClockTimestamp;
44 56
45 -import java.util.ArrayList; 57 +import com.google.common.collect.ComparisonChain;
46 -import java.util.Collection; 58 +import com.google.common.collect.ImmutableList;
47 -import java.util.HashMap; 59 +import com.google.common.collect.ImmutableSet;
48 -import java.util.HashSet; 60 +import com.google.common.util.concurrent.MoreExecutors;
49 -import java.util.List;
50 -import java.util.Map;
51 -import java.util.Objects;
52 -import java.util.Optional;
53 -import java.util.Set;
54 -import java.util.concurrent.CompletableFuture;
55 -import java.util.concurrent.CountDownLatch;
56 -import java.util.concurrent.Executor;
57 -import java.util.concurrent.ExecutorService;
58 -import java.util.concurrent.TimeUnit;
59 -import java.util.concurrent.atomic.AtomicLong;
60 -import java.util.function.Consumer;
61 -import java.util.function.Function;
62 61
63 import static com.google.common.base.Preconditions.checkArgument; 62 import static com.google.common.base.Preconditions.checkArgument;
64 import static junit.framework.TestCase.assertFalse; 63 import static junit.framework.TestCase.assertFalse;
65 -import static org.easymock.EasyMock.*; 64 +import static org.easymock.EasyMock.anyObject;
66 -import static org.junit.Assert.*; 65 +import static org.easymock.EasyMock.createMock;
66 +import static org.easymock.EasyMock.eq;
67 +import static org.easymock.EasyMock.expect;
68 +import static org.easymock.EasyMock.expectLastCall;
69 +import static org.easymock.EasyMock.replay;
70 +import static org.easymock.EasyMock.reset;
71 +import static org.easymock.EasyMock.verify;
72 +import static org.junit.Assert.assertEquals;
73 +import static org.junit.Assert.assertNull;
74 +import static org.junit.Assert.assertTrue;
75 +import static org.junit.Assert.fail;
67 76
68 /** 77 /**
69 * Unit tests for EventuallyConsistentMapImpl. 78 * Unit tests for EventuallyConsistentMapImpl.
...@@ -697,7 +706,7 @@ public class EventuallyConsistentMapImplTest { ...@@ -697,7 +706,7 @@ public class EventuallyConsistentMapImplTest {
697 * Sets up a mock ClusterCommunicationService to expect a specific cluster 706 * Sets up a mock ClusterCommunicationService to expect a specific cluster
698 * message to be broadcast to the cluster. 707 * message to be broadcast to the cluster.
699 * 708 *
700 - * @param m message we expect to be sent 709 + * @param message message we expect to be sent
701 * @param clusterCommunicator a mock ClusterCommunicationService to set up 710 * @param clusterCommunicator a mock ClusterCommunicationService to set up
702 */ 711 */
703 //FIXME rename 712 //FIXME rename
...@@ -776,56 +785,7 @@ public class EventuallyConsistentMapImplTest { ...@@ -776,56 +785,7 @@ public class EventuallyConsistentMapImplTest {
776 * events coming in from other instances. 785 * events coming in from other instances.
777 */ 786 */
778 private final class TestClusterCommunicationService 787 private final class TestClusterCommunicationService
779 - implements ClusterCommunicationService { 788 + extends ClusterCommunicationServiceAdapter {
780 -
781 - @Override
782 - public void addSubscriber(MessageSubject subject,
783 - ClusterMessageHandler subscriber,
784 - ExecutorService executor) {
785 - }
786 -
787 - @Override
788 - public void removeSubscriber(MessageSubject subject) {}
789 -
790 - @Override
791 - public <M> void broadcast(M message, MessageSubject subject,
792 - Function<M, byte[]> encoder) {
793 - }
794 -
795 - @Override
796 - public <M> void broadcastIncludeSelf(M message,
797 - MessageSubject subject, Function<M, byte[]> encoder) {
798 - }
799 -
800 - @Override
801 - public <M> CompletableFuture<Void> unicast(M message, MessageSubject subject,
802 - Function<M, byte[]> encoder, NodeId toNodeId) {
803 - return null;
804 - }
805 -
806 - @Override
807 - public <M> void multicast(M message, MessageSubject subject,
808 - Function<M, byte[]> encoder, Set<NodeId> nodes) {
809 - }
810 -
811 - @Override
812 - public <M, R> CompletableFuture<R> sendAndReceive(M message,
813 - MessageSubject subject, Function<M, byte[]> encoder,
814 - Function<byte[], R> decoder, NodeId toNodeId) {
815 - return null;
816 - }
817 -
818 - @Override
819 - public <M, R> void addSubscriber(MessageSubject subject,
820 - Function<byte[], M> decoder, Function<M, R> handler,
821 - Function<R, byte[]> encoder, Executor executor) {
822 - }
823 -
824 - @Override
825 - public <M, R> void addSubscriber(MessageSubject subject,
826 - Function<byte[], M> decoder, Function<M, CompletableFuture<R>> handler,
827 - Function<R, byte[]> encoder) {
828 - }
829 789
830 @Override 790 @Override
831 public <M> void addSubscriber(MessageSubject subject, 791 public <M> void addSubscriber(MessageSubject subject,
......