blob: 6466c12b0525127139bf6869daeb8b812b46db05 [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
Yuta HIGUCHIfbd9ae92018-01-24 23:39:06 -0800118 @Test
Sbhat35ffe02342017-08-09 16:31:17 -0700119 public void testGet() throws Exception {
120 assertNull(transcodingMap.get(KEY1).join().value());
121 transcodingMap.put(KEY2, DEV1).join();
122 transcodingMap.put(KEY2, DEV3).join();
123
124 assertThat(transcodingMap.get(KEY2).join().value(), is(DEV3));
125
126 assertThat(transcodingMap.getOrDefault(KEY1, DeviceId.deviceId("bar")).join().value(),
127 is(DEV4));
128 transcodingMap.put(KEY1, DEV2).join();
129 assertThat(transcodingMap.getOrDefault(KEY1, DEV1).join().value(), is(DEV2));
130 assertThat(transcodingMap.get(KEY1).join().value(), is(DEV2));
131 }
132
133 @Test
134 public void testSwitch() throws Exception {
135 transcodingMap.put(KEY1, DEV1).join();
136 transcodingMap.put(KEY2, DEV2).join();
137
138 transcodingMap.replace(KEY1, DEV1, DEV3).join();
139 assertThat(transcodingMap.containsValue(DEV2).join(), is(true));
140 transcodingMap.putAndGet(KEY1, DEV3).join();
141 assertThat(transcodingMap.get(KEY1).join().value(), is(DEV3));
142
143 transcodingMap.replace(KEY1, DEV1);
144 assertThat(transcodingMap.get(KEY1).join().value(), is(DEV1));
145
146 transcodingMap.replace(KEY1, 1, DEV4);
147 assertThat(transcodingMap.get(KEY1).join().value(), is(DEV4));
148
149 assertNull(transcodingMap.remove("keyTest").join().value());
150
151 }
152
153 @Test
154 public void testEntry() throws Exception {
155 assertThat(transcodingMap.entrySet().join().size(), is(0));
156 transcodingMap.put(KEY2, DEV2).join();
157 transcodingMap.put(KEY1, DEV1).join();
158 assertThat(transcodingMap.entrySet().join().size(), is(2));
159 transcodingMap.put(KEY3, DEV3).join();
160 transcodingMap.put(KEY3, DEV4).join();
161 assertThat(transcodingMap.entrySet().join().size(), (is(3)));
162
163 transcodingMap.put(KEY3, null).join();
164 transcodingMap.putIfAbsent(KEY3, DEV3).join();
165 assertThat(transcodingMap.entrySet().join().size(), is(3));
166 assertThat(transcodingMap.get(KEY3).join().value(), is(DEV3));
167 }
168
169 @Test
170 public void keyTest() throws Exception {
171 assertThat(transcodingMap.keySet().join().size(), is(0));
172 transcodingMap.putIfAbsent(KEY1, DEV1).join();
173 transcodingMap.putIfAbsent(KEY2, DEV2).join();
174 transcodingMap.putIfAbsent(KEY3, DEV3).join();
175 assertThat(transcodingMap.keySet().join().size(), is(3));
176 assertThat(transcodingMap.keySet().join(), hasItem(KEY1));
177 assertThat(transcodingMap.keySet().join(), hasItem(KEY2));
178 }
179
180}