/******************************************************************************* * ============LICENSE_START==================================================== * * org.onap.aaf * * =========================================================================== * * Copyright © 2017 AT&T Intellectual Property. All rights reserved. * * =========================================================================== * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an "AS IS" BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * * ============LICENSE_END==================================================== * * * * ECOMP is a trademark and service mark of AT&T Intellectual Property. * * ******************************************************************************/ package org.onap.aaf.authz.cass.hl; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; import java.security.Principal; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.onap.aaf.authz.env.AuthzTrans; import org.onap.aaf.authz.layer.Result; import org.onap.aaf.dao.aaf.cass.NsDAO; import org.onap.aaf.dao.aaf.cass.PermDAO; import org.onap.aaf.dao.aaf.cass.RoleDAO; import org.onap.aaf.dao.aaf.cass.UserRoleDAO; import org.onap.aaf.dao.aaf.cass.NsDAO.Data; import org.onap.aaf.dao.aaf.hl.Question; import org.onap.aaf.dao.aaf.hl.Question.Access; import org.onap.aaf.dao.aaf.test.AbsJUCass; import org.onap.aaf.inno.env.Env; import org.onap.aaf.inno.env.TimeTaken; public class JU_Question extends AbsJUCass { private static final int EXPIRES_IN = 60000000; private static final String COM_TEST_JU = "com.test.ju_question"; private static final String JU9999_JU_TEST_COM = "ju9999@ju.test.com"; private static final String JU9998_JU_TEST_COM = "ju9998@ju.test.com"; private static final String READ = "read"; private static final int NFR_1 = 80; private static final int NFR_2 = 4000; private static final int ROLE_LEVEL1 = 1000; private static final int PERM_LEVEL1 = 1000; // private static final int PERM_LEVEL2 = 20; private static Question q; private static NsDAO.Data ndd; @BeforeClass public static void startupBeforeClass() throws Exception { details=false; AuthzTrans trans = env.newTransNoAvg(); q = new Question(trans,cluster,AUTHZ, false); ndd = new NsDAO.Data(); ndd.name=COM_TEST_JU; ndd.type=3; // app ndd.parent="com.test"; ndd.description="Temporary Namespace for JU_Question"; q.nsDAO.create(trans, ndd); } @AfterClass public static void endAfterClass() throws Exception { q.nsDAO.delete(trans, ndd,false); } // @Test public void mayUserRead_EmptyPerm() { PermDAO.Data pdd = new PermDAO.Data(); Result result = q.mayUser(trans,JU9999_JU_TEST_COM,pdd,Access.read); assertFalse(result.isOK()); } // @Test public void mayUserRead_OnePermNotExist() { Result result = q.mayUser(trans,JU9999_JU_TEST_COM,newPerm(0,0,READ),Access.read); assertFalse(result.isOK()); assertEquals("Denied - ["+ JU9999_JU_TEST_COM +"] may not read Perm [" + COM_TEST_JU + ".myPerm0|myInstance0|read]",result.errorString()); } // @Test public void mayUserRead_OnePermExistDenied() { PermDAO.Data perm = newPerm(0,0,READ); q.permDAO.create(trans,perm); try { Result result; TimeTaken tt = trans.start("q.mayUser...", Env.SUB); try { result = q.mayUser(trans,JU9999_JU_TEST_COM,perm,Access.read); } finally { tt.done(); assertTrue("NFR time < "+ NFR_1 + "ms",tt.millis() result; TimeTaken tt = trans.start("q.mayUser...", Env.SUB); try { result = q.mayUser(trans,JU9999_JU_TEST_COM,perm,Access.read); } finally { tt.done(); assertTrue("NFR time < "+ NFR_1 + "ms",tt.millis()> pres; TimeTaken tt = trans.start("q.getPerms...", Env.SUB); try { pres = q.getPermsByUserFromRolesFilter(trans, JU9999_JU_TEST_COM, JU9999_JU_TEST_COM); } finally { tt.done(); trans.info().log("filter_OnePermOneRleExistOK",tt); assertTrue("NFR time < "+ NFR_1 + "ms",tt.millis() lrole = new ArrayList(); List lur = new ArrayList(); try { q.permDAO.create(trans,perm); for(int i=0;i result; TimeTaken tt = trans.start("mayUserRead_OnePermMultiRoleExistOK", Env.SUB); try { result = q.mayUser(trans,JU9999_JU_TEST_COM,perm,Access.read); } finally { tt.done(); env.info().log(tt,ROLE_LEVEL1,"iterations"); assertTrue("NFR time < "+ NFR_2 + "ms",tt.millis() lperm = new ArrayList(); try { for(int i=0;i result; TimeTaken tt = trans.start("mayUserRead_MultiPermOneRoleExistOK", Env.SUB); try { result = q.mayUser(trans,JU9999_JU_TEST_COM,lperm.get(PERM_LEVEL1-1),Access.read); } finally { tt.done(); env.info().log(tt,PERM_LEVEL1,"iterations"); assertTrue("NFR time < "+ NFR_2 + "ms",tt.millis() lperm = new ArrayList(); // List lrole = new ArrayList(); // List lur = new ArrayList(); // // try { // RoleDAO.Data role; // UserRoleDAO.Data ur; // for(int i=0;i result; // TimeTaken tt = trans.start("mayUserRead_MultiPermMultiRoleExistOK", Env.SUB); // try { // result = q.mayUser(trans,JU9999_JU_TEST_COM,lperm.get(ROLE_LEVEL1*PERM_LEVEL2-1),Access.read); // } finally { // tt.done(); // env.info().log(tt,lperm.size(),"perms",", ",lrole.size(),"role"); // assertTrue("NFR time < "+ NFR_2 + "ms",tt.millis() lperm = new ArrayList(); List lrole = new ArrayList(); List lur = new ArrayList(); load(roleLevel, permLevel, lperm,lrole,lur); Result> pres; trans.setUser(new Principal() { @Override public String getName() { return JU9999_JU_TEST_COM; } }); try { TimeTaken group = trans.start(" Original Security Method (1st time)", Env.SUB); try { TimeTaken tt = trans.start(" Get User Perms for "+JU9998_JU_TEST_COM, Env.SUB); try { pres = q.getPermsByUser(trans,JU9998_JU_TEST_COM,true); } finally { tt.done(); env.info().log(tt," Looked up (full) getPermsByUser for",JU9998_JU_TEST_COM); } assertTrue(pres.isOK()); tt = trans.start(" q.mayUser", Env.SUB); List reduced = new ArrayList(); try { for(PermDAO.Data p : pres.value) { Result r = q.mayUser(trans,JU9999_JU_TEST_COM,p,Access.read); if(r.isOK()) { reduced.add(p); } } } finally { tt.done(); env.info().log(tt," reduced" + pres.value.size(),"perms","to",reduced.size()); // assertTrue("NFR time < "+ NFR_2 + "ms",tt.millis() lperm = new ArrayList(); List lrole = new ArrayList(); List lur = new ArrayList(); load(roleLevel, permLevel, lperm,lrole,lur); try { Result> pres; TimeTaken tt = trans.start(" mayUserRead_MultiPermMultiRoleExist_New New Filter", Env.SUB); try { pres = q.getPermsByUserFromRolesFilter(trans, JU9999_JU_TEST_COM, JU9998_JU_TEST_COM); } finally { tt.done(); env.info().log(tt,lperm.size(),"perms",", ",lrole.size(),"role", lur.size(), "UserRoles"); // assertTrue("NFR time < "+ NFR_2 + "ms",tt.millis() lperm , List lrole, List lur) { RoleDAO.Data role; UserRoleDAO.Data ur; PermDAO.Data perm; int onethirdR=roleLevel/3; int twothirdR=onethirdR*2; int onethirdP=permLevel/3; int twothirdP=onethirdP*2; for(int i=0;i lperm , List lrole, List lur) { for(PermDAO.Data perm : lperm) { q.permDAO.delete(trans, perm, false); } for(RoleDAO.Data role : lrole) { q.roleDAO.delete(trans, role, false); } for(UserRoleDAO.Data ur : lur) { q.userRoleDAO.delete(trans, ur, false); } } private PermDAO.Data newPerm(int permNum, int instNum, String action, RoleDAO.Data ... grant) { PermDAO.Data pdd = new PermDAO.Data(); pdd.ns=COM_TEST_JU; pdd.type="myPerm"+permNum; pdd.instance="myInstance"+instNum; pdd.action=action; for(RoleDAO.Data r : grant) { pdd.roles(true).add(r.fullName()); r.perms(true).add(pdd.encode()); } return pdd; } private RoleDAO.Data newRole(int roleNum, PermDAO.Data ... grant) { RoleDAO.Data rdd = new RoleDAO.Data(); rdd.ns = COM_TEST_JU+roleNum; rdd.name = "myRole"+roleNum; for(PermDAO.Data p : grant) { rdd.perms(true).add(p.encode()); p.roles(true).add(rdd.fullName()); } return rdd; } private UserRoleDAO.Data newUserRole(RoleDAO.Data role,String user, long offset) { UserRoleDAO.Data urd = new UserRoleDAO.Data(); urd.user=user; urd.role(role); urd.expires=new Date(System.currentTimeMillis()+offset); return urd; } }