79b4aeb5e1ddac6b88ff637b065102090c86a1ea
[aaf/authz.git] / auth / auth-cass / src / test / java / org / onap / aaf / auth / dao / cass / JU_ApprovalDAO.java
1 /**
2  * ============LICENSE_START====================================================
3  * org.onap.aaf
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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====================================================
19  *
20  */
21
22 package org.onap.aaf.auth.dao.cass;
23
24 import static org.junit.Assert.assertNull;
25 import static org.junit.Assert.assertTrue;
26 import static org.mockito.MockitoAnnotations.initMocks;
27
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;
33
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;
48
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;
56
57 public class JU_ApprovalDAO {
58
59         @Mock
60     AuthzTrans trans;
61         @Mock
62         Cluster cluster;
63         
64         @Before
65         public void setUp() throws APIException, IOException {
66                 initMocks(this);
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();
71         }
72         
73         @Test
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);
85                 
86                 ApprovalDAOImpl daoObj = new ApprovalDAOImpl(trans, cluster, "test",data, createPS);
87 //              data.id
88                 Result<Data> retVal = daoObj.create(trans, data);
89                 assertTrue(retVal.status == 0);
90                 
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);
95                 
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");
99                 assertNull(retVal1);
100                 
101                 Mockito.doReturn(rs1).when(createPS).read(trans, "ApprovalDAOImpl CREATE", new Object[]{"testApprover"});
102                 retVal1 = daoObj.readByApprover(trans, "testApprover");
103                 assertNull(retVal1);
104                 
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));
107                 assertNull(retVal1);
108                 
109                 Mockito.doReturn(rs1).when(createPS).read(trans, "ApprovalDAOImpl CREATE", new Object[]{"testStatus"});
110                 retVal1 = daoObj.readByStatus(trans, "testStatus");
111                 assertNull(retVal1);
112         }
113         
114         @Test
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();
124
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());
128                 
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);
134                 
135                 ApprovalDAOImpl daoObj = new ApprovalDAOImpl(trans, cluster, "test", createPS, historyDAO);
136 //              data.id
137                 Result<Void> retVal = daoObj.delete(trans, data, true);
138                 assertTrue(retVal.status == 0);
139         
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);
144                 
145                 data.status="approved";
146                 data.memo="test";
147                 retVal = daoObj.delete(trans, data, false);
148                 assertTrue(retVal.status == 0);
149                 
150                 daoObj.async(true);
151                 data.status="denied";
152                 retVal = daoObj.delete(trans, data, false);
153                 assertTrue(retVal.status == 0);
154
155                 data.status=null;
156                 retVal = daoObj.delete(trans, data, false);
157         }
158         
159         @Test
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);
170                 
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());
174                 
175                 ApprovalDAOImpl daoObj = new ApprovalDAOImpl(trans, cluster, "test", createPS, historyDAO);
176                 daoObj.wasModified(trans, CRUD.create, data, new String[] {"test"});
177                 
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"});
182                 
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"});
186         }
187         
188         @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);
199                 
200                 ApprovalDAO daoObj = new ApprovalDAO(trans, historyDAO);
201         }
202 }
203
204 class ResultSetImpl implements ResultSet{
205
206         @Override
207         public boolean isExhausted() {
208                 // TODO Auto-generated method stub
209                 return false;
210         }
211
212         @Override
213         public boolean isFullyFetched() {
214                 // TODO Auto-generated method stub
215                 return false;
216         }
217
218         @Override
219         public int getAvailableWithoutFetching() {
220                 // TODO Auto-generated method stub
221                 return 0;
222         }
223
224         @Override
225         public ListenableFuture<ResultSet> fetchMoreResults() {
226                 // TODO Auto-generated method stub
227                 return null;
228         }
229
230         @Override
231         public List<Row> all() {
232                 // TODO Auto-generated method stub
233                 return null;
234         }
235
236         @Override
237         public Iterator<Row> iterator() {
238                 // TODO Auto-generated method stub
239                 return null;
240         }
241
242         @Override
243         public ExecutionInfo getExecutionInfo() {
244                 // TODO Auto-generated method stub
245                 return null;
246         }
247
248         @Override
249         public List<ExecutionInfo> getAllExecutionInfo() {
250                 // TODO Auto-generated method stub
251                 return null;
252         }
253
254         @Override
255         public Row one() {
256                 // TODO Auto-generated method stub
257                 Row rowObj = Mockito.mock(Row.class);
258                 Mockito.doReturn(Mockito.mock(ColumnDefinitions.class)).when(rowObj).getColumnDefinitions();
259                 return rowObj;
260         }
261
262         @Override
263         public ColumnDefinitions getColumnDefinitions() {
264                 // TODO Auto-generated method stub
265                 return null;
266         }
267
268         @Override
269         public boolean wasApplied() {
270                 // TODO Auto-generated method stub
271                 return false;
272         }
273         
274 }
275
276 class ApprovalDAOImpl extends ApprovalDAO{
277
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");
285         }
286         
287         public ApprovalDAOImpl(AuthzTrans trans, Cluster cluster, String keyspace,PSInfo readPS  ) {
288                 super(trans, cluster, keyspace);
289                 this.readPS = readPS;
290         }
291         
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));
298         }
299         
300         public void setPs(ApprovalDAOImpl approvalDaoObj, PSInfo psInfoObj, String methodName) {
301                 Field nsDaoField;
302                 try {
303                         nsDaoField = ApprovalDAO.class.getDeclaredField(methodName);
304                         
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);
310                 
311                 nsDaoField.set(approvalDaoObj, psInfoObj);
312                 } catch (NoSuchFieldException | SecurityException e) {
313                         // TODO Auto-generated catch block
314                         e.printStackTrace();
315                 } catch (IllegalArgumentException e) {
316                         // TODO Auto-generated catch block
317                         e.printStackTrace();
318                 } catch (IllegalAccessException e) {
319                         // TODO Auto-generated catch block
320                         e.printStackTrace();
321                 }
322         }
323
324         public void setHistoryDao(ApprovalDAOImpl approvalDaoObj, HistoryDAO historyDAO) {
325                 Field nsDaoField;
326                 try {
327                         nsDaoField = ApprovalDAO.class.getDeclaredField("historyDAO");
328                         
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);
334                 
335                 nsDaoField.set(approvalDaoObj, historyDAO);
336                 } catch (NoSuchFieldException | SecurityException e) {
337                         // TODO Auto-generated catch block
338                         e.printStackTrace();
339                 } catch (IllegalArgumentException e) {
340                         // TODO Auto-generated catch block
341                         e.printStackTrace();
342                 } catch (IllegalAccessException e) {
343                         // TODO Auto-generated catch block
344                         e.printStackTrace();
345                 }
346         }
347         public void setSession(ApprovalDAOImpl approvalDaoObj, Session session) {
348                 Field nsDaoField;
349                 try {
350                         nsDaoField = AbsCassDAO.class.getDeclaredField("session");
351                         
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);
357                 
358                 nsDaoField.set(approvalDaoObj, session);
359                 } catch (NoSuchFieldException | SecurityException e) {
360                         // TODO Auto-generated catch block
361                         e.printStackTrace();
362                 } catch (IllegalArgumentException e) {
363                         // TODO Auto-generated catch block
364                         e.printStackTrace();
365                 } catch (IllegalAccessException e) {
366                         // TODO Auto-generated catch block
367                         e.printStackTrace();
368                 }
369         }
370 }