Remove Tabs, per Jococo
[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 }