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.assertTrue;
25 import static org.mockito.MockitoAnnotations.initMocks;
27 import java.io.ByteArrayInputStream;
28 import java.io.ByteArrayOutputStream;
29 import java.io.DataInputStream;
30 import java.io.DataOutputStream;
31 import java.io.IOException;
32 import java.lang.reflect.Constructor;
33 import java.lang.reflect.Field;
34 import java.lang.reflect.InvocationTargetException;
35 import java.lang.reflect.Method;
36 import java.nio.ByteBuffer;
37 import java.util.HashSet;
38 import java.util.List;
39 import java.util.TreeSet;
41 import org.junit.Before;
42 import org.junit.Test;
43 import org.mockito.Mock;
44 import org.mockito.Mockito;
45 import org.onap.aaf.auth.dao.AbsCassDAO;
46 import org.onap.aaf.auth.dao.AbsCassDAO.CRUD;
47 import org.onap.aaf.auth.dao.AbsCassDAO.PSInfo;
48 import org.onap.aaf.auth.dao.CassAccess;
49 import org.onap.aaf.auth.dao.CassDAOImpl;
50 import org.onap.aaf.auth.dao.cass.RoleDAO.Data;
51 import org.onap.aaf.auth.dao.hl.Question;
52 import org.onap.aaf.auth.env.AuthzTrans;
53 import org.onap.aaf.auth.layer.Result;
54 import org.onap.aaf.cadi.config.Config;
55 import org.onap.aaf.misc.env.APIException;
56 import org.onap.aaf.misc.env.Env;
57 import org.onap.aaf.misc.env.LogTarget;
58 import org.onap.aaf.misc.env.TimeTaken;
60 import com.datastax.driver.core.Cluster;
61 import com.datastax.driver.core.ResultSet;
62 import com.datastax.driver.core.Row;
63 import com.datastax.driver.core.Session;
65 public class JU_RoleDAO {
75 public void setUp() throws APIException, IOException {
77 Mockito.doReturn(Mockito.mock(LogTarget.class)).when(trans).warn();
78 Mockito.doReturn(Mockito.mock(LogTarget.class)).when(trans).error();
79 Mockito.doReturn(Mockito.mock(LogTarget.class)).when(trans).debug();
80 Mockito.doReturn(Mockito.mock(LogTarget.class)).when(trans).info();
81 Mockito.doReturn(Mockito.mock(LogTarget.class)).when(trans).init();
82 Mockito.doReturn("100").when(trans).getProperty(Config.CADI_LATITUDE);
83 Mockito.doReturn("100").when(trans).getProperty(Config.CADI_LONGITUDE);
84 Mockito.doReturn(session).when(cluster).connect("test");
88 public void testInit() {
89 TimeTaken tt = Mockito.mock(TimeTaken.class);
90 Mockito.doReturn(tt).when(trans).start("RoleDAO CREATE", Env.REMOTE);
91 Mockito.doReturn(tt).when(trans).start("Clear Reset Deque", Env.SUB);
92 Mockito.doReturn(tt).when(trans).start("New Cassandra Session", Env.SUB);
93 Mockito.doReturn(tt).when(trans).start("Preparing PSInfo CREATE on RoleDAO", Env.SUB);
95 new RoleDAO(trans, cluster, "test");
96 } catch (APIException | IOException e) {
97 // TODO Auto-generated catch block
103 public void testReadByStartAndTarget() {
104 TimeTaken tt = Mockito.mock(TimeTaken.class);
105 Mockito.doReturn(tt).when(trans).start("RoleDAO CREATE", Env.REMOTE);
106 Mockito.doReturn(tt).when(trans).start("Clear Reset Deque", Env.SUB);
107 Mockito.doReturn(tt).when(trans).start("New Cassandra Session", Env.SUB);
108 Mockito.doReturn(tt).when(trans).start("Preparing PSInfo CREATE on RoleDAO", Env.SUB);
109 RoleDAO daoObj = null;
111 daoObj = new RoleDAO(trans, cluster, "test");
112 } catch (APIException | IOException e) {
113 // TODO Auto-generated catch block
117 PSInfo psObj = Mockito.mock(PSInfo.class);
118 setPsByStartAndTarget(daoObj, psObj, "psName");
120 Result<List<RoleDAO.Data>> rs1 = new Result<List<RoleDAO.Data>>(null,0,"test",new Object[0]);
121 Mockito.doReturn(rs1).when(psObj).read(trans, "RoleDAO READ", new Object[]{"test"});
123 daoObj.readName(trans, "test");
126 public void testReadChildren() {
127 TimeTaken tt = Mockito.mock(TimeTaken.class);
128 Mockito.doReturn(tt).when(trans).start("RoleDAO CREATE", Env.REMOTE);
129 Mockito.doReturn(tt).when(trans).start("Clear Reset Deque", Env.SUB);
130 Mockito.doReturn(tt).when(trans).start("New Cassandra Session", Env.SUB);
131 Mockito.doReturn(tt).when(trans).start("Preparing PSInfo CREATE on RoleDAO", Env.SUB);
132 RoleDAO daoObj = null;
134 daoObj = new RoleDAO(trans, cluster, "test");
135 } catch (APIException | IOException e) {
136 // TODO Auto-generated catch block
140 PSInfo psObj = Mockito.mock(PSInfo.class);
141 setPsByStartAndTarget(daoObj, psObj, "psChildren");
143 Result<List<RoleDAO.Data>> rs1 = new Result<List<RoleDAO.Data>>(null,0,"test",new Object[0]);
144 Mockito.doReturn(rs1).when(psObj).read(trans, "RoleDAO READ", new Object[]{"test"});
146 daoObj.readChildren(trans, "test", "test");
148 daoObj.readChildren(trans, "test", "*");
149 daoObj.readChildren(trans, "test", "");
152 public void testReadNs() {
153 TimeTaken tt = Mockito.mock(TimeTaken.class);
154 Mockito.doReturn(tt).when(trans).start("RoleDAO CREATE", Env.REMOTE);
155 Mockito.doReturn(tt).when(trans).start("Clear Reset Deque", Env.SUB);
156 Mockito.doReturn(tt).when(trans).start("New Cassandra Session", Env.SUB);
157 Mockito.doReturn(tt).when(trans).start("Preparing PSInfo CREATE on RoleDAO", Env.SUB);
158 RoleDAO daoObj = null;
160 daoObj = new RoleDAO(trans, cluster, "test");
161 } catch (APIException | IOException e) {
162 // TODO Auto-generated catch block
166 PSInfo psObj = Mockito.mock(PSInfo.class);
167 setPsByStartAndTarget(daoObj, psObj, "psNS");
169 Result<List<RoleDAO.Data>> rs1 = new Result<List<RoleDAO.Data>>(null,0,"test",new Object[0]);
170 Mockito.doReturn(rs1).when(psObj).read(trans, "RoleDAO READ", new Object[]{"test"});
172 daoObj.readNS(trans, "test");
175 public void testAddRole() {
176 PSInfo psObj = Mockito.mock(PSInfo.class);
177 HistoryDAO historyDAO = Mockito.mock(HistoryDAO.class);
178 RoleDAO.Data data = new RoleDAO.Data();
179 CacheInfoDAO cacheInfoDAO = Mockito.mock(CacheInfoDAO.class);
180 RoleDAOImpl daoObj=null;
182 daoObj = new RoleDAOImpl(trans, historyDAO, cacheInfoDAO, psObj, Mockito.mock(Session.class));
183 } catch (APIException | IOException e) {
184 // TODO Auto-generated catch block
188 TimeTaken tt = Mockito.mock(TimeTaken.class);
189 Mockito.doReturn(tt).when(trans).start("RoleDAO CREATE", Env.REMOTE);
190 Mockito.doReturn(tt).when(trans).start("Clear Reset Deque", Env.SUB);
191 Mockito.doReturn(tt).when(trans).start("New Cassandra Session", Env.SUB);
192 Mockito.doReturn(tt).when(trans).start("Preparing PSInfo CREATE on RoleDAO", Env.SUB);
194 Mockito.doReturn("100").when(trans).getProperty(CassAccess.CASSANDRA_CLUSTERS_PORT,"100");
195 Mockito.doReturn("100").when(trans).getProperty(CassAccess.CASSANDRA_CLUSTERS_PORT,"9042");
196 Mockito.doReturn("100").when(trans).getProperty(CassAccess.CASSANDRA_CLUSTERS_USER_NAME,"100");
197 Mockito.doReturn("100").when(trans).getProperty(CassAccess.CASSANDRA_CLUSTERS_USER_NAME,null);
199 Result<List<Data>> rs1 = new Result<List<Data>>(null,0,"test",new Object[0]);
200 Mockito.doReturn(rs1).when(psObj).exec(trans, "RoleDAOImpl CREATE", data);
201 Mockito.doReturn(rs1).when(psObj).exec(trans, "RoleDAOImpl UPDATE", data);
202 Mockito.doReturn(rs1).when(psObj).read(trans, "RoleDAOImpl READ", data);
203 Mockito.doReturn(rs1).when(psObj).exec(trans, "RoleDAOImpl DELETE", data);
204 Mockito.doReturn(rs1).when(historyDAO).create(Mockito.any(), Mockito.any());
206 Result<Void> rs2 = new Result<Void>(null,0,"test",new Object[0]);
207 Mockito.doReturn(rs2).when(cacheInfoDAO).touch(Mockito.any(AuthzTrans.class),Mockito.anyString(), Mockito.anyVararg());
209 rs1 = new Result<List<Data>>(null,1,"test",new Object[0]);
210 Mockito.doReturn(rs1).when(cacheInfoDAO).touch(Mockito.any(), Mockito.anyString(), Mockito.anyInt());
211 Mockito.doReturn("test user").when(trans).user();
214 cbField = CassAccess.class.getDeclaredField("cb");
215 cbField.setAccessible(true);
216 cbField.set(daoObj, null);
217 } catch (NoSuchFieldException | SecurityException e) {
218 // TODO Auto-generated catch block
220 } catch (IllegalArgumentException e) {
221 // TODO Auto-generated catch block
223 } catch (IllegalAccessException e) {
224 // TODO Auto-generated catch block
228 PermDAO.Data perm = new PermDAO.Data();
229 RoleDAO.Data role = new RoleDAO.Data();
230 Result<Void> retVal = daoObj.addPerm(trans, role, perm);
231 assertTrue(retVal.status == 9);
235 owningField = AbsCassDAO.class.getDeclaredField("owningDAO");
236 owningField.setAccessible(true);
237 owningField.set(daoObj, null);
238 } catch (NoSuchFieldException | SecurityException e) {
239 // TODO Auto-generated catch block
241 } catch (IllegalArgumentException e) {
242 // TODO Auto-generated catch block
244 } catch (IllegalAccessException e) {
245 // TODO Auto-generated catch block
248 retVal = daoObj.addPerm(trans, role, perm);
249 assertTrue(retVal.status == 0);
253 public void testDelRole() {
254 PSInfo psObj = Mockito.mock(PSInfo.class);
255 HistoryDAO historyDAO = Mockito.mock(HistoryDAO.class);
256 RoleDAO.Data data = new RoleDAO.Data();
257 CacheInfoDAO cacheInfoDAO = Mockito.mock(CacheInfoDAO.class);
258 RoleDAOImpl daoObj=null;
260 daoObj = new RoleDAOImpl(trans, historyDAO, cacheInfoDAO, psObj, Mockito.mock(Session.class));
261 } catch (APIException | IOException e) {
262 // TODO Auto-generated catch block
266 TimeTaken tt = Mockito.mock(TimeTaken.class);
267 Mockito.doReturn(tt).when(trans).start("RoleDAO CREATE", Env.REMOTE);
268 Mockito.doReturn(tt).when(trans).start("Clear Reset Deque", Env.SUB);
269 Mockito.doReturn(tt).when(trans).start("New Cassandra Session", Env.SUB);
270 Mockito.doReturn(tt).when(trans).start("Preparing PSInfo CREATE on RoleDAO", Env.SUB);
272 Mockito.doReturn("100").when(trans).getProperty(CassAccess.CASSANDRA_CLUSTERS_PORT,"100");
273 Mockito.doReturn("100").when(trans).getProperty(CassAccess.CASSANDRA_CLUSTERS_PORT,"9042");
274 Mockito.doReturn("100").when(trans).getProperty(CassAccess.CASSANDRA_CLUSTERS_USER_NAME,"100");
275 Mockito.doReturn("100").when(trans).getProperty(CassAccess.CASSANDRA_CLUSTERS_USER_NAME,null);
277 Result<List<Data>> rs1 = new Result<List<Data>>(null,0,"test",new Object[0]);
278 Mockito.doReturn(rs1).when(psObj).exec(trans, "RoleDAOImpl CREATE", data);
279 Mockito.doReturn(rs1).when(psObj).exec(trans, "RoleDAOImpl UPDATE", data);
280 Mockito.doReturn(rs1).when(psObj).read(trans, "RoleDAOImpl READ", data);
281 Mockito.doReturn(rs1).when(psObj).exec(trans, "RoleDAOImpl DELETE", data);
282 Mockito.doReturn(rs1).when(historyDAO).create(Mockito.any(), Mockito.any());
284 Result<Void> rs2 = new Result<Void>(null,0,"test",new String[0]);
285 Mockito.doReturn(rs2).when(cacheInfoDAO).touch(Mockito.any(AuthzTrans.class),Mockito.anyString(), Mockito.anyVararg());
287 rs1 = new Result<List<Data>>(null,1,"test",new String[0]);
288 Mockito.doReturn(rs1).when(cacheInfoDAO).touch(Mockito.any(), Mockito.anyString(), Mockito.anyInt());
289 Mockito.doReturn("test user").when(trans).user();
291 PermDAO.Data perm = new PermDAO.Data();
294 cbField = CassAccess.class.getDeclaredField("cb");
295 cbField.setAccessible(true);
296 cbField.set(daoObj, null);
297 } catch (NoSuchFieldException | SecurityException e) {
298 // TODO Auto-generated catch block
300 } catch (IllegalArgumentException e) {
301 // TODO Auto-generated catch block
303 } catch (IllegalAccessException e) {
304 // TODO Auto-generated catch block
307 RoleDAO.Data role = new RoleDAO.Data();
308 Result<Void> retVal = daoObj.delPerm(trans, role, perm);
309 assertTrue(retVal.status == 9);
311 Field owningDaoField;
313 owningDaoField = AbsCassDAO.class.getDeclaredField("owningDAO");
314 owningDaoField.setAccessible(true);
315 owningDaoField.set(daoObj, null);
316 } catch (NoSuchFieldException | SecurityException e) {
317 // TODO Auto-generated catch block
319 } catch (IllegalArgumentException e) {
320 // TODO Auto-generated catch block
322 } catch (IllegalAccessException e) {
323 // TODO Auto-generated catch block
326 retVal = daoObj.delPerm(trans,role, perm);
327 assertTrue(retVal.status == 0);
331 public void testAddDescription() {
332 PSInfo psObj = Mockito.mock(PSInfo.class);
333 HistoryDAO historyDAO = Mockito.mock(HistoryDAO.class);
334 RoleDAO.Data data = new RoleDAO.Data();
335 CacheInfoDAO cacheInfoDAO = Mockito.mock(CacheInfoDAO.class);
336 RoleDAOImpl daoObj=null;
338 daoObj = new RoleDAOImpl(trans, historyDAO, cacheInfoDAO, psObj, Mockito.mock(Session.class));
339 } catch (APIException | IOException e) {
340 // TODO Auto-generated catch block
344 TimeTaken tt = Mockito.mock(TimeTaken.class);
345 Mockito.doReturn(tt).when(trans).start("RoleDAO CREATE", Env.REMOTE);
346 Mockito.doReturn(tt).when(trans).start("Clear Reset Deque", Env.SUB);
347 Mockito.doReturn(tt).when(trans).start("New Cassandra Session", Env.SUB);
348 Mockito.doReturn(tt).when(trans).start("Preparing PSInfo CREATE on RoleDAO", Env.SUB);
350 Mockito.doReturn("100").when(trans).getProperty(CassAccess.CASSANDRA_CLUSTERS_PORT,"100");
351 Mockito.doReturn("100").when(trans).getProperty(CassAccess.CASSANDRA_CLUSTERS_PORT,"9042");
352 Mockito.doReturn("100").when(trans).getProperty(CassAccess.CASSANDRA_CLUSTERS_USER_NAME,"100");
353 Mockito.doReturn("100").when(trans).getProperty(CassAccess.CASSANDRA_CLUSTERS_USER_NAME,null);
355 Result<List<Data>> rs1 = new Result<List<Data>>(null,0,"test",new String[0]);
356 Mockito.doReturn(rs1).when(psObj).exec(trans, "RoleDAOImpl CREATE", data);
357 Mockito.doReturn(rs1).when(psObj).exec(trans, "RoleDAOImpl UPDATE", data);
358 Mockito.doReturn(rs1).when(psObj).read(trans, "RoleDAOImpl READ", data);
359 Mockito.doReturn(rs1).when(psObj).exec(trans, "RoleDAOImpl DELETE", data);
360 Mockito.doReturn(rs1).when(historyDAO).create(Mockito.any(), Mockito.any());
362 Result<Void> rs2 = new Result<Void>(null,1,"test",new String[0]);
363 Mockito.doReturn(rs2).when(cacheInfoDAO).touch(Mockito.any(AuthzTrans.class),Mockito.anyString(), Mockito.anyVararg());
365 rs1 = new Result<List<Data>>(null,1,"test",new String[0]);
366 Mockito.doReturn(rs1).when(cacheInfoDAO).touch(Mockito.any(), Mockito.anyString(), Mockito.anyInt());
367 Mockito.doReturn("test user").when(trans).user();
369 RoleDAO.Data perm = new RoleDAO.Data();
372 cbField = CassAccess.class.getDeclaredField("cb");
373 cbField.setAccessible(true);
374 cbField.set(daoObj, null);
375 } catch (NoSuchFieldException | SecurityException e) {
376 // TODO Auto-generated catch block
378 } catch (IllegalArgumentException e) {
379 // TODO Auto-generated catch block
381 } catch (IllegalAccessException e) {
382 // TODO Auto-generated catch block
386 Result<Void> retVal = daoObj.addDescription(trans, "test", "test", "test");
387 assertTrue(retVal.status == 9);
389 Field owningDaoField;
391 owningDaoField = AbsCassDAO.class.getDeclaredField("owningDAO");
392 owningDaoField.setAccessible(true);
393 owningDaoField.set(daoObj, null);
394 } catch (NoSuchFieldException | SecurityException e) {
395 // TODO Auto-generated catch block
397 } catch (IllegalArgumentException e) {
398 // TODO Auto-generated catch block
400 } catch (IllegalAccessException e) {
401 // TODO Auto-generated catch block
404 retVal = daoObj.addDescription(trans, "test", "test", "test");
405 assertTrue(retVal.status == 0);
408 public void setPsByStartAndTarget(RoleDAO RoleDAOObj, PSInfo psInfoObj, String fieldName) {
411 RoleDAOField = RoleDAO.class.getDeclaredField(fieldName);
413 RoleDAOField.setAccessible(true);
414 // remove final modifier from field
415 Field modifiersField = Field.class.getDeclaredField("modifiers");
416 modifiersField.setAccessible(true);
417 // modifiersField.setInt(RoleDAOField, RoleDAOField.getModifiers() & ~Modifier.FINAL);
419 RoleDAOField.set(RoleDAOObj, psInfoObj);
420 } catch (NoSuchFieldException | SecurityException e) {
421 // TODO Auto-generated catch block
423 } catch (IllegalArgumentException e) {
424 // TODO Auto-generated catch block
426 } catch (IllegalAccessException e) {
427 // TODO Auto-generated catch block
433 public void testWasModified() {
434 TimeTaken tt = Mockito.mock(TimeTaken.class);
435 Mockito.doReturn(tt).when(trans).start("RoleDAO CREATE", Env.REMOTE);
436 Mockito.doReturn(tt).when(trans).start("Clear Reset Deque", Env.SUB);
437 Mockito.doReturn(tt).when(trans).start("New Cassandra Session", Env.SUB);
438 Mockito.doReturn(tt).when(trans).start("Preparing PSInfo CREATE on RoleDAO", Env.SUB);
439 Mockito.doReturn(tt).when(trans).start("DELETE Future",Env.REMOTE);
440 Mockito.doReturn(Mockito.mock(LogTarget.class)).when(trans).error();
441 Mockito.doNothing().when(tt).done();
442 RoleDAO.Data data = new RoleDAO.Data();
443 PSInfo createPS = Mockito.mock(PSInfo.class);
445 HistoryDAO historyDAO = Mockito.mock(HistoryDAO.class);
446 Result<ResultSet> rs1 = new Result<ResultSet>(null,0,"test",new String[0]);
447 Result<Void> rs2 = new Result<Void>(null,0,"test",new String[0]);
448 Mockito.doReturn(rs1).when(historyDAO).create(Mockito.any(), Mockito.any());
450 CacheInfoDAO cacheInfoDAO = Mockito.mock(CacheInfoDAO.class);
451 Mockito.doReturn(rs2).when(cacheInfoDAO).touch(Mockito.any(AuthzTrans.class),Mockito.anyString(), Mockito.anyVararg());
453 RoleDAOImpl daoObj = null;
455 daoObj = new RoleDAOImpl(trans, historyDAO, cacheInfoDAO, createPS );
456 } catch (APIException | IOException e) {
457 // TODO Auto-generated catch block
460 daoObj.wasModified(trans, CRUD.create, data, new String[] {"test"});
462 daoObj.wasModified(trans, CRUD.create, data, new String[] {});
463 daoObj.wasModified(trans, CRUD.create, data, new String[] {null});
464 daoObj.wasModified(trans, CRUD.create, data, new String[] {"test",null});
465 daoObj.wasModified(trans, CRUD.create, data, new String[] {"test","test"});
467 rs1 = new Result<ResultSet>(null,1,"test",new String[0]);
468 Mockito.doReturn(rs1).when(historyDAO).create(Mockito.any(), Mockito.any());
469 daoObj.wasModified(trans, CRUD.delete, data, new String[] {"test","test"});
473 public void testSecondConstructor() {
474 HistoryDAO historyDAO = Mockito.mock(HistoryDAO.class);
475 CacheInfoDAO cacheInfoDAO = Mockito.mock(CacheInfoDAO.class);
477 RoleDAO daoObj = new RoleDAO(trans, historyDAO, cacheInfoDAO);
482 public void testFutureLoader(){
483 Class<?> innerClass = null;
484 Class<?>[] innerClassArr = RoleDAO.class.getDeclaredClasses();
485 for(Class indCls:innerClassArr) {
486 if(indCls.getName().contains("RoleLoader")) {
492 Constructor<?> constructor = innerClass.getDeclaredConstructors()[0];
493 constructor.setAccessible(true);
497 Object obj = constructor.newInstance(1);
498 Method innnerClassMtd;
500 RoleDAO.Data data = new RoleDAO.Data();
501 Row row = Mockito.mock(Row.class);
502 ByteBuffer bbObj = ByteBuffer.allocateDirect(10);
504 bbObj.put(0, new Byte("0"));
505 bbObj.put(1, new Byte("1"));
506 bbObj.put(2, new Byte("2"));
507 Mockito.doReturn(bbObj).when(row).getBytesUnsafe(1);
509 innnerClassMtd = innerClass.getMethod("load", new Class[] {RoleDAO.Data.class, Row.class});
510 innnerClassMtd.invoke(obj, new Object[] {data, row});
512 innnerClassMtd = innerClass.getDeclaredMethod("key", new Class[] {RoleDAO.Data.class, Integer.TYPE, Object[].class });
513 innnerClassMtd.invoke(obj, new Object[] {data, 1, new Object[] {"test","test","test","test","test"} });
515 innnerClassMtd = innerClass.getDeclaredMethod("body", new Class[] {RoleDAO.Data.class, Integer.TYPE, Object[].class });
516 innnerClassMtd.invoke(obj, new Object[] {data, 1, new Object[] {"test","test","test","test","test","test","test","test","test","test","test"} });
518 ByteArrayOutputStream baos = new ByteArrayOutputStream();
519 DataOutputStream dos = new DataOutputStream(baos);
520 innnerClassMtd = innerClass.getDeclaredMethod("marshal", new Class[] {RoleDAO.Data.class, DataOutputStream.class });
521 innnerClassMtd.invoke(obj, new Object[] {data, dos });
523 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
524 DataInputStream dis = new DataInputStream(bais);
525 innnerClassMtd = innerClass.getDeclaredMethod("unmarshal", new Class[] {RoleDAO.Data.class, DataInputStream.class });
526 innnerClassMtd.invoke(obj, new Object[] {data, dis });
528 } catch (InstantiationException e) {
529 // TODO Auto-generated catch block
531 } catch (IllegalAccessException e) {
532 // TODO Auto-generated catch block
534 } catch (IllegalArgumentException e) {
535 // TODO Auto-generated catch block
537 } catch (InvocationTargetException e) {
538 // TODO Auto-generated catch block
540 } catch (NoSuchMethodException e) {
541 // TODO Auto-generated catch block
543 } catch (SecurityException e) {
544 // TODO Auto-generated catch block
550 public void testData() {
551 RoleDAO.Data data = new RoleDAO.Data();
552 NsSplit nss = new NsSplit("test", "test");
553 data = new RoleDAO.Data();
558 Question q = Mockito.mock( Question.class);
560 Result<NsSplit> rs = new Result<NsSplit>(nss,0,"test",new Object[0]);
561 Mockito.doReturn(rs).when(q).deriveNsSplit(trans, "test");
562 Result<Data> retVal= RoleDAO.Data.decode(trans, q, "test|||");
563 assertTrue(retVal.status==0);
564 Result<String[]> retVal1= RoleDAO.Data.decodeToArray(trans, q, "test|||");
565 assertTrue(retVal.status==0);
566 retVal= RoleDAO.Data.decode(trans, q, "test");
567 retVal1= RoleDAO.Data.decodeToArray(trans, q, "test");
568 assertTrue(retVal.status==0);
570 rs = new Result<NsSplit>(nss,1,"test",new Object[0]);
571 Mockito.doReturn(rs).when(q).deriveNsSplit(trans, "test");
572 retVal= RoleDAO.Data.decode(trans, q, "test");
573 retVal1= RoleDAO.Data.decodeToArray(trans, q, "test");
574 assertTrue(retVal.status==1);
576 retVal= RoleDAO.Data.decode(trans, q, "test");
577 retVal1= RoleDAO.Data.decodeToArray(trans, q, "test");
578 assertTrue(retVal.status==1);
580 NsDAO.Data ns = new NsDAO.Data();
582 RoleDAO.Data.create(ns, "test");
584 UserRoleDAO.Data urdd = new UserRoleDAO.Data();
586 RoleDAO.Data dd=RoleDAO.Data.decode(urdd);
587 assertTrue("test".equals(dd.ns));
589 assertTrue(data.encode().contains("null"));
594 data.perms = new HashSet<>();
598 data.perms = new TreeSet<>();
604 class RoleDAOImpl extends RoleDAO{
605 public RoleDAOImpl(AuthzTrans trans, HistoryDAO historyDAO,CacheInfoDAO cacheDao, PSInfo readPS) throws APIException, IOException {
606 super(trans, historyDAO, cacheDao);
607 setPs(this, readPS, "createPS");
610 public RoleDAOImpl(AuthzTrans trans, HistoryDAO historyDAO,CacheInfoDAO cacheDao, PSInfo readPS, Session session ) throws APIException, IOException {
611 super(trans, historyDAO, cacheDao);
612 setPs(this, readPS, "createPS");
613 setSession(this, session);
617 public void setPs(RoleDAOImpl RoleDAOObj, PSInfo psInfoObj, String methodName) {
620 RoleDAOField = CassDAOImpl.class.getDeclaredField(methodName);
622 RoleDAOField.setAccessible(true);
623 // remove final modifier from field
624 Field modifiersField = Field.class.getDeclaredField("modifiers");
625 modifiersField.setAccessible(true);
626 // modifiersField.setInt(RoleDAOField, RoleDAOField.getModifiers() & ~Modifier.FINAL);
628 RoleDAOField.set(RoleDAOObj, psInfoObj);
629 } catch (NoSuchFieldException | SecurityException e) {
630 // TODO Auto-generated catch block
632 } catch (IllegalArgumentException e) {
633 // TODO Auto-generated catch block
635 } catch (IllegalAccessException e) {
636 // TODO Auto-generated catch block
641 public void setSession(RoleDAOImpl approvalDaoObj, Session session) {
644 nsDaoField = AbsCassDAO.class.getDeclaredField("session");
646 nsDaoField.setAccessible(true);
647 // remove final modifier from field
648 Field modifiersField = Field.class.getDeclaredField("modifiers");
649 modifiersField.setAccessible(true);
650 // modifiersField.setInt(nsDaoField, nsDaoField.getModifiers() & ~Modifier.FINAL);
652 nsDaoField.set(approvalDaoObj, session);
653 } catch (NoSuchFieldException | SecurityException e) {
654 // TODO Auto-generated catch block
656 } catch (IllegalArgumentException e) {
657 // TODO Auto-generated catch block
659 } catch (IllegalAccessException e) {
660 // TODO Auto-generated catch block