1 package org.opendaylight.idmanager.test;
3 import static org.junit.Assert.assertEquals;
4 import static org.mockito.Mockito.doReturn;
5 import static org.mockito.Mockito.when;
6 import org.junit.Before;
8 import org.junit.runner.RunWith;
9 import org.mockito.Mock;
10 import org.mockito.runners.MockitoJUnitRunner;
11 import com.google.common.base.Optional;
12 import com.google.common.util.concurrent.FutureCallback;
13 import com.google.common.util.concurrent.Futures;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
16 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
17 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
18 import org.opendaylight.idmanager.IdManager;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.*;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPool;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPoolBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPoolKey;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.id.pool.GeneratedIds;
24 import org.opendaylight.yangtools.yang.binding.DataObject;
25 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
26 import org.opendaylight.yangtools.yang.common.RpcResult;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29 import java.math.BigInteger;
31 import java.util.concurrent.Future;
34 @RunWith(MockitoJUnitRunner.class)
35 public class IdManagerTest {
36 private static final Logger LOG = LoggerFactory.getLogger(IdManagerTest.class);
37 Map<InstanceIdentifier<?>,DataObject> written = new HashMap<>();
38 Map<InstanceIdentifier<?>,DataObject> updated = new HashMap<>();
39 @Mock DataBroker dataBroker;
40 @Mock ReadOnlyTransaction mockReadTx;
41 @Mock WriteTransaction mockWriteTx;
42 CreateIdPoolInput createPoolTest;
43 GetUniqueIdInput getIdInputTest;
46 InstanceIdentifier<IdPool> identifier;
49 public void setUp() throws Exception {
51 idManager = new IdManager(dataBroker) {
52 protected <T extends DataObject> void asyncWrite(LogicalDatastoreType datastoreType,
53 InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
54 written.put(path, data);
56 protected <T extends DataObject> void asyncUpdate(LogicalDatastoreType datastoreType,
57 InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
58 updated.put(path, data);
65 private void setupMocks() {
66 createPoolTest = buildCreateIdPool("vpn", 100, 100);
67 getIdInputTest = buildUniqueId("vpn", "vpn1");
68 idPoolTest = buildIdPool("vpn", 100, 100);
69 identifier = buildInstanceIdentifier("vpn");
70 when(dataBroker.newReadOnlyTransaction()).thenReturn(mockReadTx);
71 when(dataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTx);
75 public void testCreateIdPool()
77 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
78 LogicalDatastoreType.OPERATIONAL, identifier);
80 Future<RpcResult<Void>> result = idManager.createIdPool(createPoolTest);
81 Collection<DataObject> idPoolVal = new ArrayList< >();
82 idPoolVal = written.values();
83 assertEquals(1,written.size());
84 for (DataObject poolData: idPoolVal) {
86 if (poolData instanceof IdPool) {
87 pool = (IdPool) poolData;
88 assertEquals(createPoolTest.getPoolName(), pool.getPoolName());
89 assertEquals(createPoolTest.getIdStart(), pool.getIdStart());
90 assertEquals(createPoolTest.getPoolSize(), pool.getPoolSize());
96 public void testUniqueId()
98 Optional<IdPool> expected = Optional.of(idPoolTest);
99 doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx).read(
100 LogicalDatastoreType.OPERATIONAL, identifier);
102 idManager.getUniqueId(getIdInputTest);
103 Collection<DataObject> idPoolVal = new ArrayList< >();
104 idPoolVal = updated.values();
105 assertEquals(1,updated.size());
106 for (DataObject poolData: idPoolVal) {
108 if (poolData instanceof IdPool) {
109 pool = (IdPool) poolData;
110 assertEquals(getIdInputTest.getPoolName(), pool.getPoolName());
111 List <GeneratedIds> genIds = pool.getGeneratedIds();
112 assertEquals(1,genIds.size());
117 private CreateIdPoolInput buildCreateIdPool(String poolName, long idStart, long poolSize) {
118 CreateIdPoolInput createPool = new CreateIdPoolInputBuilder().setPoolName(poolName)
120 .setPoolSize(BigInteger.valueOf(poolSize))
125 private IdPool buildIdPool(String poolName, long idStart, long poolSize) {
126 IdPool idPool = new IdPoolBuilder().setPoolName(poolName)
128 .setPoolSize(BigInteger.valueOf(poolSize))
133 private GetUniqueIdInput buildUniqueId(String poolName, String idKey) {
134 GetUniqueIdInput getIdInput = new GetUniqueIdInputBuilder().setPoolName(poolName)
135 .setIdKey(idKey).build();
139 private InstanceIdentifier<IdPool> buildInstanceIdentifier(String poolName){
140 InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
141 InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey(poolName));
142 InstanceIdentifier<IdPool> id = idBuilder.build();