2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.genius.idmanager.test;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertTrue;
12 import static org.mockito.Matchers.any;
13 import static org.mockito.Matchers.anyObject;
14 import static org.mockito.Matchers.eq;
15 import static org.mockito.Mockito.doAnswer;
16 import static org.mockito.Mockito.doReturn;
17 import static org.mockito.Mockito.when;
19 import com.google.common.base.Optional;
20 import com.google.common.util.concurrent.Futures;
21 import java.net.UnknownHostException;
22 import java.util.ArrayList;
23 import java.util.Arrays;
24 import java.util.HashMap;
25 import java.util.List;
27 import java.util.concurrent.Future;
28 import org.junit.Before;
29 import org.junit.Ignore;
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.mockito.Matchers;
33 import org.mockito.Mock;
34 import org.mockito.runners.MockitoJUnitRunner;
35 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
36 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
37 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
38 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
39 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
40 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
41 import org.opendaylight.genius.idmanager.IdManager;
42 import org.opendaylight.genius.idmanager.IdUtils;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdInput;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdInputBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdOutput;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.CreateIdPoolInput;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.CreateIdPoolInputBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.DeleteIdPoolInput;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.DeleteIdPoolInputBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdPools;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdPoolsBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.ReleaseIdInput;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.ReleaseIdInputBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPool;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPoolBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPoolKey;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.AvailableIdsHolder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.AvailableIdsHolderBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ChildPools;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ChildPoolsBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ChildPoolsKey;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.IdEntries;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.IdEntriesBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.IdEntriesKey;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolderBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.released.ids.DelayedIdEntries;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.released.ids.DelayedIdEntriesBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.lockmanager.rev160413.LockInput;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.lockmanager.rev160413.LockManagerService;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.lockmanager.rev160413.UnlockInput;
72 import org.opendaylight.yangtools.yang.binding.DataObject;
73 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
74 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
75 import org.opendaylight.yangtools.yang.common.RpcResult;
76 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
78 @RunWith(MockitoJUnitRunner.class)
79 public class IdManagerTest {
81 Map<InstanceIdentifier<?>, DataObject> configDataStore = new HashMap<>();
82 @Mock DataBroker dataBroker;
83 @Mock ReadOnlyTransaction mockReadTx;
84 @Mock WriteTransaction mockWriteTx;
85 @Mock LockManagerService lockManager;
86 Future<RpcResult<Void>> rpcResult;
90 String allocateIdPoolName = "allocateIdTest";
91 InstanceIdentifier<IdPool> parentPoolIdentifier;
92 InstanceIdentifier<IdPool> localPoolIdentifier;
93 InstanceIdentifier<ChildPools> childPoolIdentifier;
94 final String poolName = "test-pool";
98 String idKey = "test-key";
103 public void setUp() throws Exception {
104 idUtils = new IdUtils();
105 localPoolName = idUtils.getLocalPoolName(poolName);
107 parentPoolIdentifier = buildInstanceIdentifier(poolName);
108 localPoolIdentifier = buildInstanceIdentifier(localPoolName);
109 childPoolIdentifier = buildChildPoolInstanceIdentifier(poolName, localPoolName);
112 private void setupMocks(List<IdPool> idPools) throws ReadFailedException, UnknownHostException {
113 when(dataBroker.newReadOnlyTransaction()).thenReturn(mockReadTx);
114 when(dataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTx);
115 when(lockManager.lock(any(LockInput.class)))
116 .thenReturn(Futures.immediateFuture(RpcResultBuilder.<Void>success().build()));
117 when(lockManager.unlock(any(UnlockInput.class)))
118 .thenReturn(Futures.immediateFuture(RpcResultBuilder.<Void>success().build()));
119 doReturn(Futures.immediateCheckedFuture(null)).when(mockWriteTx).submit();
120 doAnswer(invocation -> {
121 configDataStore.put(invocation.getArgumentAt(1, KeyedInstanceIdentifier.class),
122 invocation.getArgumentAt(2, IdPool.class));
124 }).when(mockWriteTx).put(eq(LogicalDatastoreType.CONFIGURATION), Matchers.any(), any(IdPool.class), eq(true));
125 doAnswer(invocation -> {
126 configDataStore.put(invocation.getArgumentAt(1, KeyedInstanceIdentifier.class),
127 invocation.getArgumentAt(2, IdPool.class));
129 }).when(mockWriteTx).merge(eq(LogicalDatastoreType.CONFIGURATION), Matchers.any(), any(ChildPools.class),
131 doAnswer(invocation -> {
132 configDataStore.put(invocation.getArgumentAt(1, KeyedInstanceIdentifier.class),
133 invocation.getArgumentAt(2, IdPool.class));
135 }).when(mockWriteTx).merge(eq(LogicalDatastoreType.CONFIGURATION), Matchers.any(), any(IdPool.class), eq(true));
136 doAnswer(invocation -> {
137 configDataStore.put(invocation.getArgumentAt(1, KeyedInstanceIdentifier.class), null);
139 }).when(mockWriteTx).delete(eq(LogicalDatastoreType.CONFIGURATION), Matchers.<InstanceIdentifier<IdPool>>any());
141 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx)
142 .read(eq(LogicalDatastoreType.CONFIGURATION), anyObject());
143 if (idPools != null && !idPools.isEmpty()) {
144 Optional<IdPools> optionalIdPools = Optional.of(new IdPoolsBuilder().setIdPool(idPools).build());
145 doReturn(Futures.immediateCheckedFuture(optionalIdPools)).when(mockReadTx)
146 .read(LogicalDatastoreType.CONFIGURATION, idUtils.getIdPools());
148 idManager = new IdManager(dataBroker, new SingleTransactionDataBroker(dataBroker), lockManager, idUtils);
152 public void testCreateIdPool() throws Exception {
154 CreateIdPoolInput createPoolTest = buildCreateIdPool(poolName, idStart, idEnd);
155 long expectedBlockSize = idUtils.computeBlockSize(idStart, idEnd);
157 Future<RpcResult<Void>> result = idManager.createIdPool(createPoolTest);
159 assertTrue(result.get().isSuccessful());
160 // Just to ensure the local pool is also written. Even if it is not triggered Test case will pass.
162 assertTrue(configDataStore.size() > 0);
163 DataObject dataObject = configDataStore.get(localPoolIdentifier);
164 if (dataObject instanceof IdPool) {
165 pool = (IdPool) dataObject;
166 assertEquals(localPoolName, pool.getPoolName());
167 assertEquals(createPoolTest.getPoolName(), pool.getParentPoolName());
168 assertEquals(idStart, pool.getAvailableIdsHolder().getStart().intValue());
169 assertEquals(idStart + expectedBlockSize - 1, pool.getAvailableIdsHolder().getEnd().intValue());
170 assertEquals(idStart - 1, pool.getAvailableIdsHolder().getCursor().intValue());
171 assertEquals(30, pool.getReleasedIdsHolder().getDelayedTimeSec().longValue());
172 assertEquals(0, pool.getReleasedIdsHolder().getAvailableIdCount().longValue());
173 assertEquals(expectedBlockSize, pool.getBlockSize().longValue());
175 dataObject = configDataStore.get(parentPoolIdentifier);
176 if (dataObject instanceof IdPool) {
177 pool = (IdPool) dataObject;
178 assertEquals(createPoolTest.getPoolName(), pool.getPoolName());
179 assertEquals(0, pool.getReleasedIdsHolder().getDelayedTimeSec().longValue());
180 assertEquals(0, pool.getReleasedIdsHolder().getAvailableIdCount().longValue());
181 assertEquals(createPoolTest.getLow(), pool.getAvailableIdsHolder().getStart());
182 assertEquals(createPoolTest.getHigh(), pool.getAvailableIdsHolder().getEnd());
183 assertEquals(createPoolTest.getLow() - 1, pool.getAvailableIdsHolder().getCursor().intValue());
184 assertEquals(expectedBlockSize, pool.getBlockSize().longValue());
186 dataObject = configDataStore.get(childPoolIdentifier);
187 if (dataObject instanceof ChildPools) {
188 ChildPools childPool = (ChildPools) dataObject;
189 assertEquals(localPoolName, childPool.getChildPoolName());
194 public void testAllocateId() throws Exception {
195 List<IdPool> listOfIdPool = new ArrayList<>();
196 IdPool localIdPool = buildLocalIdPool(blockSize, idStart, idStart + blockSize - 1, idStart - 1, localPoolName,
198 listOfIdPool.add(localIdPool);
199 IdPool globalIdPool = buildGlobalIdPool(poolName, idStart, idEnd, idStart + blockSize,
200 buildChildPool(localPoolName)).build();
201 listOfIdPool.add(globalIdPool);
202 setupMocks(listOfIdPool);
203 doReturn(Futures.immediateCheckedFuture(Optional.of(globalIdPool))).when(mockReadTx).read(
204 LogicalDatastoreType.CONFIGURATION, parentPoolIdentifier);
206 AllocateIdInput allocateIdInput = buildAllocateId(poolName, idKey);
207 Future<RpcResult<AllocateIdOutput>> result = idManager.allocateId(allocateIdInput);
208 assertTrue(result.get().isSuccessful());
210 assertTrue(configDataStore.size() > 0);
211 DataObject dataObject = configDataStore.get(localPoolIdentifier);
212 if (dataObject instanceof IdPool) {
213 IdPool pool = (IdPool) dataObject;
214 assertEquals(localPoolName, pool.getPoolName());
215 assertEquals(idStart, pool.getAvailableIdsHolder().getStart().intValue());
216 assertEquals(idStart + blockSize - 1 , pool.getAvailableIdsHolder().getEnd().intValue());
217 assertEquals(idStart, pool.getAvailableIdsHolder().getCursor().intValue());
219 dataObject = configDataStore.get(parentPoolIdentifier);
220 if (dataObject instanceof IdPool) {
221 IdPool parentPool = (IdPool) dataObject;
222 assertEquals(1, parentPool.getIdEntries().size());
224 dataObject = configDataStore.get(childPoolIdentifier);
225 if (dataObject instanceof ChildPools) {
226 ChildPools childPool = (ChildPools) dataObject;
227 assertEquals(localPoolName, childPool.getChildPoolName());
232 public void testReleaseId() throws Exception {
233 List<IdEntries> idEntries = new ArrayList<>();
234 List<Long> idValuesList = new ArrayList<>();
235 idValuesList.add(idValue);
237 List<IdPool> listOfIdPool = new ArrayList<>();
238 IdPool expectedLocalPool = buildLocalIdPool(blockSize, idStart, idStart + blockSize - 1, idStart - 1,
239 localPoolName, poolName).build();
240 IdPool globalIdPool = buildGlobalIdPool(poolName, idStart, idEnd, blockSize, buildChildPool(localPoolName))
241 .setIdEntries(idEntries).build();
242 listOfIdPool.add(expectedLocalPool);
243 listOfIdPool.add(globalIdPool);
244 setupMocks(listOfIdPool);
245 doReturn(Futures.immediateCheckedFuture(Optional.of(globalIdPool))).when(mockReadTx).read(
246 LogicalDatastoreType.CONFIGURATION, parentPoolIdentifier);
248 InstanceIdentifier<IdEntries> idEntriesIdentifier = buildIdEntriesIdentifier(parentPoolIdentifier, idKey);
249 Optional<IdEntries> expectedIdEntry = Optional.of(buildIdEntry(idKey, idValuesList));
250 doReturn(Futures.immediateCheckedFuture(expectedIdEntry)).when(mockReadTx).read(
251 LogicalDatastoreType.CONFIGURATION, idEntriesIdentifier);
253 ReleaseIdInput releaseIdInput = createReleaseIdInput(poolName, idKey);
254 Future<RpcResult<Void>> result = idManager.releaseId(releaseIdInput);
255 assertTrue(result.get().isSuccessful());
257 assertTrue(configDataStore.size() > 0);
258 DataObject dataObject = configDataStore.get(localPoolIdentifier);
259 if (dataObject instanceof IdPool) {
260 IdPool pool = (IdPool) dataObject;
261 assertEquals(1, pool.getReleasedIdsHolder().getAvailableIdCount().intValue());
262 assertEquals(idValue, pool.getReleasedIdsHolder().getDelayedIdEntries().get(0).getId().intValue());
264 dataObject = configDataStore.get(parentPoolIdentifier);
265 if (dataObject instanceof IdPool) {
266 IdPool parentPool = (IdPool) dataObject;
267 assertEquals(0, parentPool.getIdEntries().size());
269 dataObject = configDataStore.get(childPoolIdentifier);
270 if (dataObject instanceof ChildPools) {
271 ChildPools childPool = (ChildPools) dataObject;
272 assertEquals(localPoolName, childPool.getChildPoolName());
277 * Ignoring this test case since cleanup task gets scheduled only after 30
278 * seconds. Therefore in order to validate the pool state the test has to
279 * wait for at least 30 seconds.
282 public void testCleanupReleasedIds() throws Exception {
283 List<Long> idValues = Arrays.asList(1L, 2L, 3L, 4L, 5L);
284 IdEntries idEntry = buildIdEntry(idKey, idValues);
285 List<IdEntries> listOfIdEntries = new ArrayList<>();
286 listOfIdEntries.add(idEntry);
288 IdPool globalIdPool = buildGlobalIdPool(poolName, idStart, idEnd, blockSize, buildChildPool(localPoolName))
289 .setIdEntries(listOfIdEntries).build();
290 IdPool expectedLocalPool = buildLocalIdPool(blockSize, idStart, idStart + blockSize - 1, idStart - 1,
291 localPoolName, poolName).build();
292 List<IdPool> listOfIdPool = new ArrayList<>();
294 listOfIdPool.add(expectedLocalPool);
295 listOfIdPool.add(globalIdPool);
296 setupMocks(listOfIdPool);
298 Optional<IdPool> expectedGlobalPool = Optional.of(globalIdPool);
299 doReturn(Futures.immediateCheckedFuture(expectedGlobalPool)).when(mockReadTx).read(
300 LogicalDatastoreType.CONFIGURATION, parentPoolIdentifier);
302 InstanceIdentifier<IdEntries> idEntriesIdentifier = buildIdEntriesIdentifier(parentPoolIdentifier, idKey);
303 Optional<IdEntries> expectedIdEntry = Optional.of(idEntry);
304 doReturn(Futures.immediateCheckedFuture(expectedIdEntry)).when(mockReadTx).read(
305 LogicalDatastoreType.CONFIGURATION, idEntriesIdentifier);
307 ReleasedIdsHolder releaseIdsHolder = createReleasedIdsHolder(0, new ArrayList<>(), 0);
308 InstanceIdentifier<ReleasedIdsHolder> releaseHolderIdentifier = buildReleaseIdsIdentifier(poolName);
309 doReturn(Futures.immediateCheckedFuture(Optional.of(releaseIdsHolder))).when(mockReadTx).read(
310 LogicalDatastoreType.CONFIGURATION, releaseHolderIdentifier);
312 ReleaseIdInput releaseIdInput = createReleaseIdInput(poolName, idKey);
313 Future<RpcResult<Void>> result = idManager.releaseId(releaseIdInput);
315 assertTrue(result.get().isSuccessful());
316 assertTrue(configDataStore.size() > 0);
318 DataObject dataObject = configDataStore.get(localPoolIdentifier);
319 if (dataObject instanceof IdPool) {
320 IdPool pool = (IdPool) dataObject;
321 assertEquals(2, pool.getReleasedIdsHolder().getAvailableIdCount().intValue());
324 dataObject = configDataStore.get(parentPoolIdentifier);
325 if (dataObject instanceof IdPool) {
326 IdPool parentPool = (IdPool) dataObject;
327 assertEquals(0, parentPool.getIdEntries().size());
330 dataObject = configDataStore.get(childPoolIdentifier);
331 if (dataObject instanceof ChildPools) {
332 ChildPools childPool = (ChildPools) dataObject;
333 assertEquals(localPoolName, childPool.getChildPoolName());
336 InstanceIdentifier<ReleasedIdsHolder> releaseIdsIdentifier = buildReleaseIdsIdentifier(poolName);
337 dataObject = configDataStore.get(releaseIdsIdentifier);
338 if (dataObject instanceof ReleasedIdsHolder) {
339 ReleasedIdsHolder releasedIds = (ReleasedIdsHolder) dataObject;
340 assertEquals(3, releasedIds.getAvailableIdCount().intValue());
341 assertEquals(3, releasedIds.getDelayedIdEntries().size());
346 public void testAllocateIdBlockFromReleasedIds() throws Exception {
347 List<DelayedIdEntries> delayedIdEntries = buildDelayedIdEntries(new long[] {150, 151, 152});
348 ReleasedIdsHolder expectedReleasedIds = createReleasedIdsHolder(3, delayedIdEntries , 0);
349 IdPool globalIdPool = buildGlobalIdPool(poolName, idStart, idEnd, blockSize, buildChildPool(localPoolName))
350 .setReleasedIdsHolder(expectedReleasedIds).build();
351 IdPool localPool = buildLocalIdPool(blockSize, idStart, idStart + blockSize - 1, idStart + blockSize - 1,
352 localPoolName, poolName).build();
353 Optional<IdPool> expected = Optional.of(globalIdPool);
354 List<IdPool> listOfIdPool = new ArrayList<>();
355 listOfIdPool.add(localPool);
356 listOfIdPool.add(globalIdPool);
357 InstanceIdentifier<IdPool> parentPoolIdentifier = buildInstanceIdentifier(poolName);
358 doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx).read(
359 LogicalDatastoreType.CONFIGURATION, parentPoolIdentifier);
361 setupMocks(listOfIdPool);
362 doReturn(Futures.immediateCheckedFuture(Optional.of(globalIdPool))).when(mockReadTx).read(
363 LogicalDatastoreType.CONFIGURATION, parentPoolIdentifier);
365 AllocateIdInput allocateIdInput = buildAllocateId(poolName, idKey);
366 Future<RpcResult<AllocateIdOutput>> result = idManager.allocateId(allocateIdInput);
367 assertTrue(result.get().isSuccessful());
369 assertTrue(configDataStore.size() > 0);
370 InstanceIdentifier<IdPool> localPoolIdentifier = buildInstanceIdentifier(localPoolName);
371 DataObject dataObject = configDataStore.get(localPoolIdentifier);
372 if (dataObject instanceof IdPool) {
373 IdPool pool = (IdPool) dataObject;
374 assertEquals(localPoolName, pool.getPoolName());
375 assertEquals(1, pool.getReleasedIdsHolder().getDelayedIdEntries().size());
376 assertEquals(1, pool.getReleasedIdsHolder().getAvailableIdCount().intValue());
379 InstanceIdentifier<ReleasedIdsHolder> releaseIdsIdentifier = buildReleaseIdsIdentifier(poolName);
380 dataObject = configDataStore.get(releaseIdsIdentifier);
381 if (dataObject instanceof ReleasedIdsHolder) {
382 ReleasedIdsHolder releasedIds = (ReleasedIdsHolder) dataObject;
383 assertEquals(1, releasedIds.getAvailableIdCount().intValue());
384 assertEquals(1, releasedIds.getDelayedIdEntries().size());
387 InstanceIdentifier<ChildPools> childPoolIdentifier = buildChildPoolInstanceIdentifier(poolName, localPoolName);
388 dataObject = configDataStore.get(childPoolIdentifier);
389 if (dataObject instanceof ChildPools) {
390 ChildPools childPool = (ChildPools) dataObject;
391 assertEquals(localPoolName, childPool.getChildPoolName());
396 public void testDeletePool() throws Exception {
397 IdPool globalIdPool = buildGlobalIdPool(poolName, idStart, idEnd, blockSize, buildChildPool(localPoolName))
399 IdPool localPool = buildLocalIdPool(blockSize, idStart, idStart + blockSize - 1, idStart + blockSize - 1,
400 localPoolName, poolName).build();
401 List<IdPool> listOfIdPool = new ArrayList<>();
402 listOfIdPool.add(localPool);
403 listOfIdPool.add(globalIdPool);
404 setupMocks(listOfIdPool);
405 Optional<IdPool> expected = Optional.of(globalIdPool);
406 doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx).read(
407 LogicalDatastoreType.CONFIGURATION, parentPoolIdentifier);
408 DeleteIdPoolInput deleteIdPoolInput = createDeleteIdPoolInput(poolName);
409 Future<RpcResult<Void>> result = idManager.deleteIdPool(deleteIdPoolInput);
411 assertTrue(result.get().isSuccessful());
412 assertTrue(configDataStore.size() > 0);
413 DataObject dataObject = configDataStore.get(localPoolIdentifier);
414 assertEquals(dataObject, null);
415 dataObject = configDataStore.get(parentPoolIdentifier);
416 assertEquals(dataObject, null);
419 private InstanceIdentifier<ReleasedIdsHolder> buildReleaseIdsIdentifier(
421 InstanceIdentifier<ReleasedIdsHolder> releasedIds = InstanceIdentifier
422 .builder(IdPools.class).child(IdPool.class,
423 new IdPoolKey(poolName)).child(ReleasedIdsHolder.class).build();
427 private InstanceIdentifier<ChildPools> buildChildPoolInstanceIdentifier(String poolName, String childPoolName) {
428 InstanceIdentifier<ChildPools> childPool = InstanceIdentifier
429 .builder(IdPools.class).child(IdPool.class,
430 new IdPoolKey(poolName)).child(ChildPools.class, new ChildPoolsKey(childPoolName)).build();
434 private ReleaseIdInput createReleaseIdInput(String poolName, String idKey) {
435 return new ReleaseIdInputBuilder().setIdKey(idKey).setPoolName(poolName).build();
438 private IdEntries buildIdEntry(String idKey, List<Long> idValuesList) {
439 return new IdEntriesBuilder().setIdKey(idKey).setIdValue(idValuesList).build();
442 private InstanceIdentifier<IdEntries> buildIdEntriesIdentifier(InstanceIdentifier<IdPool> identifier,
444 InstanceIdentifier.InstanceIdentifierBuilder<IdEntries> idEntriesBuilder = identifier
445 .builder().child(IdEntries.class, new IdEntriesKey(idKey));
446 InstanceIdentifier<IdEntries> idEntry = idEntriesBuilder.build();
450 private CreateIdPoolInput buildCreateIdPool(String poolName, long low, long high) {
451 CreateIdPoolInput createPool = new CreateIdPoolInputBuilder().setPoolName(poolName)
458 private IdPoolBuilder buildGlobalIdPool(String poolName, long idStart, long poolSize, int blockSize,
459 List<ChildPools> childPools) {
460 AvailableIdsHolder availableIdsHolder = createAvailableIdsHolder(idStart, poolSize, idStart - 1);
461 ReleasedIdsHolder releasedIdsHolder = createReleasedIdsHolder(0, null, 0);
462 return new IdPoolBuilder().setKey(new IdPoolKey(poolName))
463 .setPoolName(poolName)
464 .setBlockSize(blockSize)
465 .setChildPools(childPools)
466 .setAvailableIdsHolder(availableIdsHolder)
467 .setReleasedIdsHolder(releasedIdsHolder);
470 private IdPoolBuilder buildLocalIdPool(int blockSize, int start, int end, int cursor, String localPoolName,
471 String parentPoolName) {
472 ReleasedIdsHolder releasedIdsHolder = createReleasedIdsHolder(0, null, 30);
473 return new IdPoolBuilder().setBlockSize(blockSize)
474 .setKey(new IdPoolKey(localPoolName))
475 .setParentPoolName(parentPoolName)
476 .setReleasedIdsHolder(releasedIdsHolder)
477 .setAvailableIdsHolder(createAvailableIdsHolder(start, end, cursor));
480 private AllocateIdInput buildAllocateId(String poolName, String idKey) {
481 AllocateIdInput getIdInput = new AllocateIdInputBuilder().setPoolName(poolName)
482 .setIdKey(idKey).build();
486 private InstanceIdentifier<IdPool> buildInstanceIdentifier(String poolName) {
487 InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
488 InstanceIdentifier.builder(IdPools.class).child(IdPool.class, new IdPoolKey(poolName));
489 InstanceIdentifier<IdPool> id = idBuilder.build();
493 private AvailableIdsHolder createAvailableIdsHolder(long low, long high, long cursor) {
494 AvailableIdsHolder availableIdsHolder = new AvailableIdsHolderBuilder()
495 .setStart(low).setEnd(high).setCursor(cursor).build();
496 return availableIdsHolder;
499 private ReleasedIdsHolder createReleasedIdsHolder(long availableIdCount, List<DelayedIdEntries> delayedIdEntries,
501 ReleasedIdsHolder releasedIdsHolder = new ReleasedIdsHolderBuilder()
502 .setAvailableIdCount(availableIdCount)
503 .setDelayedIdEntries(delayedIdEntries)
504 .setDelayedTimeSec(delayTime).build();
505 return releasedIdsHolder;
508 private DeleteIdPoolInput createDeleteIdPoolInput(String poolName) {
509 return new DeleteIdPoolInputBuilder().setPoolName(poolName).build();
512 private List<DelayedIdEntries> buildDelayedIdEntries(long[] idValues) {
513 List<DelayedIdEntries> delayedIdEntriesList = new ArrayList<>();
514 for (long idValue : idValues) {
515 DelayedIdEntries delayedIdEntries = new DelayedIdEntriesBuilder().setId(idValue).setReadyTimeSec(0L)
517 delayedIdEntriesList.add(delayedIdEntries);
519 return delayedIdEntriesList;
522 private List<ChildPools> buildChildPool(String childPoolName) {
523 ChildPools childPools = new ChildPoolsBuilder().setChildPoolName(childPoolName).build();
524 List<ChildPools> childPoolsList = new ArrayList<>();
525 childPoolsList.add(childPools);
526 return childPoolsList;