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