2 * ============LICENSE_START====================================================
4 * ===========================================================================
5 * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
6 * ===========================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END====================================================
22 package org.onap.aaf.auth.dao.cass;
24 import static org.junit.Assert.assertNull;
25 import static org.junit.Assert.assertTrue;
26 import static org.mockito.MockitoAnnotations.initMocks;
28 import java.io.IOException;
29 import java.lang.reflect.Field;
30 import java.util.Iterator;
31 import java.util.List;
32 import java.util.UUID;
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.mockito.Mock;
37 import org.mockito.Mockito;
38 import org.onap.aaf.auth.dao.AbsCassDAO;
39 import org.onap.aaf.auth.dao.AbsCassDAO.CRUD;
40 import org.onap.aaf.auth.dao.AbsCassDAO.PSInfo;
41 import org.onap.aaf.auth.dao.cass.ApprovalDAO.Data;
42 import org.onap.aaf.auth.env.AuthzTrans;
43 import org.onap.aaf.auth.layer.Result;
44 import org.onap.aaf.misc.env.APIException;
45 import org.onap.aaf.misc.env.Env;
46 import org.onap.aaf.misc.env.LogTarget;
47 import org.onap.aaf.misc.env.TimeTaken;
49 import com.datastax.driver.core.Cluster;
50 import com.datastax.driver.core.ColumnDefinitions;
51 import com.datastax.driver.core.ExecutionInfo;
52 import com.datastax.driver.core.ResultSet;
53 import com.datastax.driver.core.Row;
54 import com.datastax.driver.core.Session;
55 import com.google.common.util.concurrent.ListenableFuture;
57 public class JU_ApprovalDAO {
65 public void setUp() throws APIException, IOException {
67 Mockito.doReturn(Mockito.mock(LogTarget.class)).when(trans).warn();
68 Mockito.doReturn(Mockito.mock(LogTarget.class)).when(trans).error();
69 Mockito.doReturn(Mockito.mock(LogTarget.class)).when(trans).debug();
70 Mockito.doReturn(Mockito.mock(LogTarget.class)).when(trans).info();
74 public void testInit() {
75 TimeTaken tt = Mockito.mock(TimeTaken.class);
76 Mockito.doReturn(tt).when(trans).start("ApprovalDAO CREATE", Env.REMOTE);
77 Mockito.doReturn(tt).when(trans).start("Clear Reset Deque", Env.SUB);
78 Mockito.doReturn(tt).when(trans).start("New Cassandra Session", Env.SUB);
79 Mockito.doReturn(tt).when(trans).start("Preparing PSInfo CREATE on ApprovalDAO", Env.SUB);
80 Mockito.doNothing().when(tt).done();
81 ApprovalDAO.Data data = new ApprovalDAO.Data();
82 PSInfo createPS = Mockito.mock(PSInfo.class);
83 Result<ResultSet> rs = new Result<ResultSet>(null,0,"test",new String[0]);
84 Mockito.doReturn(rs).when(createPS).exec(trans, "ApprovalDAOImpl CREATE", data);
86 ApprovalDAOImpl daoObj = new ApprovalDAOImpl(trans, cluster, "test",data, createPS);
88 Result<Data> retVal = daoObj.create(trans, data);
89 assertTrue(retVal.status == 0);
91 rs = new Result<ResultSet>(null,1,"test",new String[0]);
92 Mockito.doReturn(rs).when(createPS).exec(trans, "ApprovalDAOImpl CREATE", data);
93 retVal = daoObj.create(trans, data);
94 assertTrue(retVal.status == 1);
96 Result<List<ApprovalDAO.Data>> rs1 = new Result<List<ApprovalDAO.Data>>(null,0,"test",new String[0]);
97 Mockito.doReturn(rs1).when(createPS).read(trans, "ApprovalDAOImpl CREATE", new Object[]{"testUser"});
98 Result<List<ApprovalDAO.Data>> retVal1 = daoObj.readByUser(trans, "testUser");
101 Mockito.doReturn(rs1).when(createPS).read(trans, "ApprovalDAOImpl CREATE", new Object[]{"testApprover"});
102 retVal1 = daoObj.readByApprover(trans, "testApprover");
105 Mockito.doReturn(rs1).when(createPS).read(trans, "ApprovalDAOImpl CREATE", new Object[]{new UUID(0, 0)});
106 retVal1 = daoObj.readByTicket(trans, new UUID(0, 0));
109 Mockito.doReturn(rs1).when(createPS).read(trans, "ApprovalDAOImpl CREATE", new Object[]{"testStatus"});
110 retVal1 = daoObj.readByStatus(trans, "testStatus");
115 public void testDelete() {
116 TimeTaken tt = Mockito.mock(TimeTaken.class);
117 Mockito.doReturn(tt).when(trans).start("ApprovalDAO CREATE", Env.REMOTE);
118 Mockito.doReturn(tt).when(trans).start("Clear Reset Deque", Env.SUB);
119 Mockito.doReturn(tt).when(trans).start("New Cassandra Session", Env.SUB);
120 Mockito.doReturn(tt).when(trans).start("Preparing PSInfo CREATE on ApprovalDAO", Env.SUB);
121 Mockito.doReturn(tt).when(trans).start("DELETE APPROVAL",Env.REMOTE);
122 Mockito.doNothing().when(tt).done();
123 ApprovalDAO.Data data = new ApprovalDAO.Data();
125 HistoryDAO historyDAO = Mockito.mock(HistoryDAO.class);
126 Result<ResultSet> rs1 = new Result<ResultSet>(null,0,"test",new String[0]);
127 Mockito.doReturn(rs1).when(historyDAO).create(Mockito.any(), Mockito.any());
129 PSInfo createPS = Mockito.mock(PSInfo.class);
130 ResultSet rsObj = new ResultSetImpl();
131 Result<ResultSet> rs = new Result<ResultSet>(rsObj,0,"test",new String[0]);
132 Mockito.doReturn(rs).when(createPS).exec(trans, "ApprovalDAOImpl READ", data);
133 Mockito.doReturn(rs).when(createPS).exec(trans, "ApprovalDAOImpl DELETE", data);
135 ApprovalDAOImpl daoObj = new ApprovalDAOImpl(trans, cluster, "test", createPS, historyDAO);
137 Result<Void> retVal = daoObj.delete(trans, data, true);
138 assertTrue(retVal.status == 0);
140 rs = new Result<ResultSet>(rsObj,1,"test",new String[0]);
141 Mockito.doReturn(rs).when(createPS).exec(trans, "ApprovalDAOImpl READ", data);
142 retVal = daoObj.delete(trans, data, true);
143 assertTrue(retVal.status == 1);
145 data.status="approved";
147 retVal = daoObj.delete(trans, data, false);
148 assertTrue(retVal.status == 0);
151 data.status="denied";
152 retVal = daoObj.delete(trans, data, false);
153 assertTrue(retVal.status == 0);
156 retVal = daoObj.delete(trans, data, false);
160 public void testWasMOdified() {
161 TimeTaken tt = Mockito.mock(TimeTaken.class);
162 Mockito.doReturn(tt).when(trans).start("ApprovalDAO CREATE", Env.REMOTE);
163 Mockito.doReturn(tt).when(trans).start("Clear Reset Deque", Env.SUB);
164 Mockito.doReturn(tt).when(trans).start("New Cassandra Session", Env.SUB);
165 Mockito.doReturn(tt).when(trans).start("Preparing PSInfo CREATE on ApprovalDAO", Env.SUB);
166 Mockito.doReturn(tt).when(trans).start("DELETE APPROVAL",Env.REMOTE);
167 Mockito.doNothing().when(tt).done();
168 ApprovalDAO.Data data = new ApprovalDAO.Data();
169 PSInfo createPS = Mockito.mock(PSInfo.class);
171 HistoryDAO historyDAO = Mockito.mock(HistoryDAO.class);
172 Result<ResultSet> rs1 = new Result<ResultSet>(null,0,"test",new String[0]);
173 Mockito.doReturn(rs1).when(historyDAO).create(Mockito.any(), Mockito.any());
175 ApprovalDAOImpl daoObj = new ApprovalDAOImpl(trans, cluster, "test", createPS, historyDAO);
176 daoObj.wasModified(trans, CRUD.create, data, new String[] {"test"});
178 daoObj.wasModified(trans, CRUD.create, data, new String[] {});
179 daoObj.wasModified(trans, CRUD.create, data, new String[] {null});
180 daoObj.wasModified(trans, CRUD.create, data, new String[] {"test",null});
181 daoObj.wasModified(trans, CRUD.create, data, new String[] {"test","test"});
183 rs1 = new Result<ResultSet>(null,1,"test",new String[0]);
184 Mockito.doReturn(rs1).when(historyDAO).create(Mockito.any(), Mockito.any());
185 daoObj.wasModified(trans, CRUD.create, data, new String[] {"test","test"});
189 public void testSecondConstructor() {
190 TimeTaken tt = Mockito.mock(TimeTaken.class);
191 Mockito.doReturn(tt).when(trans).start("ApprovalDAO CREATE", Env.REMOTE);
192 Mockito.doReturn(tt).when(trans).start("Clear Reset Deque", Env.SUB);
193 Mockito.doReturn(tt).when(trans).start("New Cassandra Session", Env.SUB);
194 Mockito.doReturn(tt).when(trans).start("Preparing PSInfo CREATE on ApprovalDAO", Env.SUB);
195 Mockito.doReturn(tt).when(trans).start("DELETE APPROVAL",Env.REMOTE);
196 Mockito.doNothing().when(tt).done();
197 ApprovalDAO.Data data = new ApprovalDAO.Data();
198 HistoryDAO historyDAO = Mockito.mock(HistoryDAO.class);
200 ApprovalDAO daoObj = new ApprovalDAO(trans, historyDAO);
204 class ResultSetImpl implements ResultSet{
207 public boolean isExhausted() {
208 // TODO Auto-generated method stub
213 public boolean isFullyFetched() {
214 // TODO Auto-generated method stub
219 public int getAvailableWithoutFetching() {
220 // TODO Auto-generated method stub
225 public ListenableFuture<ResultSet> fetchMoreResults() {
226 // TODO Auto-generated method stub
231 public List<Row> all() {
232 // TODO Auto-generated method stub
237 public Iterator<Row> iterator() {
238 // TODO Auto-generated method stub
243 public ExecutionInfo getExecutionInfo() {
244 // TODO Auto-generated method stub
249 public List<ExecutionInfo> getAllExecutionInfo() {
250 // TODO Auto-generated method stub
256 // TODO Auto-generated method stub
257 Row rowObj = Mockito.mock(Row.class);
258 Mockito.doReturn(Mockito.mock(ColumnDefinitions.class)).when(rowObj).getColumnDefinitions();
263 public ColumnDefinitions getColumnDefinitions() {
264 // TODO Auto-generated method stub
269 public boolean wasApplied() {
270 // TODO Auto-generated method stub
276 class ApprovalDAOImpl extends ApprovalDAO{
278 public ApprovalDAOImpl(AuthzTrans trans, Cluster cluster, String keyspace,ApprovalDAO.Data data,PSInfo createPS ) {
279 super(trans, cluster, keyspace);
280 this.createPS = createPS;
281 setPs(this, createPS, "psByUser");
282 setPs(this, createPS, "psByApprover");
283 setPs(this, createPS, "psByTicket");
284 setPs(this, createPS, "psByStatus");
287 public ApprovalDAOImpl(AuthzTrans trans, Cluster cluster, String keyspace,PSInfo readPS ) {
288 super(trans, cluster, keyspace);
289 this.readPS = readPS;
292 public ApprovalDAOImpl(AuthzTrans trans, Cluster cluster, String keyspace,PSInfo readPS, HistoryDAO historyDAO ) {
293 super(trans, cluster, keyspace);
294 this.deletePS = readPS;
295 this.readPS = readPS;
296 setHistoryDao(this, historyDAO);
297 setSession(this, Mockito.mock(Session.class));
300 public void setPs(ApprovalDAOImpl approvalDaoObj, PSInfo psInfoObj, String methodName) {
303 nsDaoField = ApprovalDAO.class.getDeclaredField(methodName);
305 nsDaoField.setAccessible(true);
306 // remove final modifier from field
307 Field modifiersField = Field.class.getDeclaredField("modifiers");
308 modifiersField.setAccessible(true);
309 // modifiersField.setInt(nsDaoField, nsDaoField.getModifiers() & ~Modifier.FINAL);
311 nsDaoField.set(approvalDaoObj, psInfoObj);
312 } catch (NoSuchFieldException | SecurityException e) {
313 // TODO Auto-generated catch block
315 } catch (IllegalArgumentException e) {
316 // TODO Auto-generated catch block
318 } catch (IllegalAccessException e) {
319 // TODO Auto-generated catch block
324 public void setHistoryDao(ApprovalDAOImpl approvalDaoObj, HistoryDAO historyDAO) {
327 nsDaoField = ApprovalDAO.class.getDeclaredField("historyDAO");
329 nsDaoField.setAccessible(true);
330 // remove final modifier from field
331 Field modifiersField = Field.class.getDeclaredField("modifiers");
332 modifiersField.setAccessible(true);
333 // modifiersField.setInt(nsDaoField, nsDaoField.getModifiers() & ~Modifier.FINAL);
335 nsDaoField.set(approvalDaoObj, historyDAO);
336 } catch (NoSuchFieldException | SecurityException e) {
337 // TODO Auto-generated catch block
339 } catch (IllegalArgumentException e) {
340 // TODO Auto-generated catch block
342 } catch (IllegalAccessException e) {
343 // TODO Auto-generated catch block
347 public void setSession(ApprovalDAOImpl approvalDaoObj, Session session) {
350 nsDaoField = AbsCassDAO.class.getDeclaredField("session");
352 nsDaoField.setAccessible(true);
353 // remove final modifier from field
354 Field modifiersField = Field.class.getDeclaredField("modifiers");
355 modifiersField.setAccessible(true);
356 // modifiersField.setInt(nsDaoField, nsDaoField.getModifiers() & ~Modifier.FINAL);
358 nsDaoField.set(approvalDaoObj, session);
359 } catch (NoSuchFieldException | SecurityException e) {
360 // TODO Auto-generated catch block
362 } catch (IllegalArgumentException e) {
363 // TODO Auto-generated catch block
365 } catch (IllegalAccessException e) {
366 // TODO Auto-generated catch block