blob: 2cc96311a15f580ef3a1a849a7a25040f8537421 [file] [log] [blame]
Sbhat35ffe02342017-08-09 16:31:17 -07001/*
2 * Copyright 2016-present Open Networking Foundation
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 */
16package org.onosproject.store.primitives.impl;
17
18import org.junit.Before;
19import org.junit.Test;
20import org.onosproject.net.DeviceId;
21import org.onosproject.store.serializers.KryoNamespaces;
22import org.onosproject.store.service.AsyncConsistentMap;
23import org.onosproject.store.service.Serializer;
24
25import java.util.HashMap;
26import java.util.Map;
27import java.util.function.Function;
28
29import static org.hamcrest.Matchers.hasItem;
30import static org.hamcrest.Matchers.is;
31import static org.junit.Assert.assertFalse;
32import static org.junit.Assert.assertNull;
33import static org.junit.Assert.assertThat;
34import static org.junit.Assert.assertTrue;
35
36public class TranscodingAsyncConsistentMapTest {
37
38 private static Serializer serializer;
39 private static AsyncConsistentMap<String, DeviceId> transcodingMap;
40 private static AsyncConsistentMap<String, byte[]> baseMap;
41 private static Map<String, byte[]> map;
42
43
44 private static final String KEY1 = "Key1";
45 private static final String KEY2 = "Key2";
46 private static final String KEY3 = "Key3";
47 private static final DeviceId DEV1 = DeviceId.deviceId("Device1");
48 private static final DeviceId DEV2 = DeviceId.deviceId("Device2");
49 private static final DeviceId DEV3 = DeviceId.deviceId("foo");
50 private static final DeviceId DEV4 = DeviceId.deviceId("bar");
51
52 @Before
53 public void setUp() throws Exception {
54 serializer = Serializer.using(KryoNamespaces.API);
55 map = new HashMap<>();
56 baseMap = new AsyncConsistentMapMock<>();
57
58 transcodingMap = DistributedPrimitives.newTranscodingMap(
59 baseMap,
60 Function.identity(),
61 Function.identity(),
62 serializer::encode,
63 serializer::decode);
64 }
65
66 @Test
67 public void testSize() throws Exception {
68
69 assertThat(transcodingMap.size().join(), is(0));
70 transcodingMap.put(KEY1, DEV1).join();
71 assertThat(transcodingMap.size().join(), is(1));
72 transcodingMap.put(KEY1, DEV2).join();
73 assertThat(transcodingMap.size().join(), is(1));
74
75 transcodingMap.put(KEY2, DEV2).join();
76 assertThat(transcodingMap.size().join(), is(2));
77 for (int i = 0; i < 20; i++) {
78 transcodingMap.put("KEY" + i + 1, DeviceId.deviceId("Device" + i + 1)).join();
79 }
80 assertThat(transcodingMap.size().join(), is(22));
81 }
82
83 @Test
84 public void testEmpty() throws Exception {
85 assertTrue(transcodingMap.isEmpty().join());
86 transcodingMap.put(KEY1, DEV1).join();
87 assertFalse(transcodingMap.isEmpty().join());
88 transcodingMap.remove(KEY1).join();
89 assertTrue(transcodingMap.isEmpty().join());
90 transcodingMap.put(KEY1, DEV1).join();
91
92 transcodingMap.remove(KEY1, DEV1).join();
93 transcodingMap.put(KEY2, DEV2).join();
94
95 transcodingMap.remove(KEY1, 1).join();
96 assertThat(transcodingMap.size().join(), is(1));
97
98 transcodingMap.clear().join();
99 assertThat(transcodingMap.isEmpty().join(), is(true));
100
101 }
102
103 @Test
104 public void testContains() throws Exception {
105 assertFalse(transcodingMap.containsKey(KEY1).join());
106 transcodingMap.put(KEY1, DEV1);
107 assertTrue(transcodingMap.containsKey(KEY1).join());
108 assertTrue(transcodingMap.containsValue(DEV1).join());
109
110 transcodingMap.put(KEY2, DEV2);
111 assertTrue(transcodingMap.containsValue(DEV2).join());
112
113 transcodingMap.remove(KEY1);
114 assertFalse(transcodingMap.containsKey(KEY1).join());
115 assertFalse(transcodingMap.containsValue(DEV1).join());
116 }
117
118 public void testGet() throws Exception {
119 assertNull(transcodingMap.get(KEY1).join().value());
120 transcodingMap.put(KEY2, DEV1).join();
121 transcodingMap.put(KEY2, DEV3).join();
122
123 assertThat(transcodingMap.get(KEY2).join().value(), is(DEV3));
124
125 assertThat(transcodingMap.getOrDefault(KEY1, DeviceId.deviceId("bar")).join().value(),
126 is(DEV4));
127 transcodingMap.put(KEY1, DEV2).join();
128 assertThat(transcodingMap.getOrDefault(KEY1, DEV1).join().value(), is(DEV2));
129 assertThat(transcodingMap.get(KEY1).join().value(), is(DEV2));
130 }
131
132 @Test
133 public void testSwitch() throws Exception {
134 transcodingMap.put(KEY1, DEV1).join();
135 transcodingMap.put(KEY2, DEV2).join();
136
137 transcodingMap.replace(KEY1, DEV1, DEV3).join();
138 assertThat(transcodingMap.containsValue(DEV2).join(), is(true));
139 transcodingMap.putAndGet(KEY1, DEV3).join();
140 assertThat(transcodingMap.get(KEY1).join().value(), is(DEV3));
141
142 transcodingMap.replace(KEY1, DEV1);
143 assertThat(transcodingMap.get(KEY1).join().value(), is(DEV1));
144
145 transcodingMap.replace(KEY1, 1, DEV4);
146 assertThat(transcodingMap.get(KEY1).join().value(), is(DEV4));
147
148 assertNull(transcodingMap.remove("keyTest").join().value());
149
150 }
151
152 @Test
153 public void testEntry() throws Exception {
154 assertThat(transcodingMap.entrySet().join().size(), is(0));
155 transcodingMap.put(KEY2, DEV2).join();
156 transcodingMap.put(KEY1, DEV1).join();
157 assertThat(transcodingMap.entrySet().join().size(), is(2));
158 transcodingMap.put(KEY3, DEV3).join();
159 transcodingMap.put(KEY3, DEV4).join();
160 assertThat(transcodingMap.entrySet().join().size(), (is(3)));
161
162 transcodingMap.put(KEY3, null).join();
163 transcodingMap.putIfAbsent(KEY3, DEV3).join();
164 assertThat(transcodingMap.entrySet().join().size(), is(3));
165 assertThat(transcodingMap.get(KEY3).join().value(), is(DEV3));
166 }
167
168 @Test
169 public void keyTest() throws Exception {
170 assertThat(transcodingMap.keySet().join().size(), is(0));
171 transcodingMap.putIfAbsent(KEY1, DEV1).join();
172 transcodingMap.putIfAbsent(KEY2, DEV2).join();
173 transcodingMap.putIfAbsent(KEY3, DEV3).join();
174 assertThat(transcodingMap.keySet().join().size(), is(3));
175 assertThat(transcodingMap.keySet().join(), hasItem(KEY1));
176 assertThat(transcodingMap.keySet().join(), hasItem(KEY2));
177 }
178
179}