JUnit for IdManager
[vpnservice.git] / idmanager / idmanager-impl / src / test / java / org / opendaylight / idmanager / test / IdManagerTest.java
1 package org.opendaylight.idmanager.test;
2
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;
7 import org.junit.Test;
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;
30 import java.util.*;
31 import java.util.concurrent.Future;
32
33
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;
44     IdManager idManager;
45     IdPool idPoolTest;
46     InstanceIdentifier<IdPool> identifier;
47
48     @Before
49     public void setUp() throws Exception {
50
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);
55             }
56             protected  <T extends DataObject> void asyncUpdate(LogicalDatastoreType datastoreType,
57                                                               InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
58                 updated.put(path, data);
59             }
60
61         };
62         setupMocks();
63     }
64
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);
72     }
73
74     @Test
75     public void testCreateIdPool()
76     {
77         doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
78                 LogicalDatastoreType.OPERATIONAL, identifier);
79
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) {
85                 IdPool pool = null;
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());
91                 }
92             }
93     }
94
95     @Test
96     public void testUniqueId()
97     {
98         Optional<IdPool> expected = Optional.of(idPoolTest);
99         doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx).read(
100                 LogicalDatastoreType.OPERATIONAL, identifier);
101
102         idManager.getUniqueId(getIdInputTest);
103         Collection<DataObject> idPoolVal  = new ArrayList< >();
104         idPoolVal = updated.values();
105         assertEquals(1,updated.size());
106             for (DataObject poolData: idPoolVal) {
107                 IdPool pool = null;
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());
113                 }
114             }
115     }
116
117     private CreateIdPoolInput buildCreateIdPool(String poolName, long idStart, long poolSize) {
118         CreateIdPoolInput createPool = new CreateIdPoolInputBuilder().setPoolName(poolName)
119                 .setIdStart(idStart)
120                 .setPoolSize(BigInteger.valueOf(poolSize))
121                 .build();
122         return createPool;
123     }
124
125     private IdPool buildIdPool(String poolName, long idStart, long poolSize) {
126         IdPool idPool = new IdPoolBuilder().setPoolName(poolName)
127                 .setIdStart(idStart)
128                 .setPoolSize(BigInteger.valueOf(poolSize))
129                 .build();
130         return idPool;
131     }
132
133     private GetUniqueIdInput buildUniqueId(String poolName, String idKey) {
134         GetUniqueIdInput getIdInput = new GetUniqueIdInputBuilder().setPoolName(poolName)
135                 .setIdKey(idKey).build();
136         return getIdInput;
137     }
138
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();
143         return id;
144     }
145 }
146