/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License, version 3 as published by the Free Software * Foundation. * * You should have received a copy of the GNU General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * * Copyright 2006 - 2008 Pentaho Corporation. All rights reserved. * * Created Apr 18, 2006 * * @author mbatchel */ package org.pentaho.test.platform.security; import java.io.File; //import java.util.ArrayList; //import java.util.HashMap; //import java.util.Iterator; //import java.util.List; //import java.util.Map; import java.util.Properties; //import java.util.Set; // //import org.pentaho.platform.api.engine.IAclHolder; //import org.pentaho.platform.api.engine.IAclSolutionFile; //import org.pentaho.platform.api.engine.IPermissionMask; //import org.pentaho.platform.api.engine.IPermissionRecipient; import org.pentaho.platform.api.repository.ISolutionRepository; import org.pentaho.platform.engine.core.system.StandaloneSession; //import org.pentaho.platform.engine.security.SpringSecurityPermissionMgr; //import org.pentaho.platform.engine.security.SimplePermissionMask; //import org.pentaho.platform.engine.security.SimpleRole; //import org.pentaho.platform.engine.security.SimpleUser; //import org.pentaho.platform.engine.security.acls.PentahoAclEntry; //import org.pentaho.platform.repository.hibernate.HibernateUtil; //import org.pentaho.platform.repository.solution.dbbased.RepositoryFile; //import org.pentaho.platform.util.messages.Messages; import org.pentaho.test.platform.engine.core.BaseTest; @SuppressWarnings("nls") public class SpringSecurityPermissionMgrTest extends BaseTest { private StringBuffer longString = new StringBuffer(); private static final String SOLUTION_PATH = "test-src/solution"; private static final String ALT_SOLUTION_PATH = "test-src/solution"; private static final String PENTAHO_XML_PATH = "/system/pentaho.xml"; public String getSolutionPath() { File file = new File(SOLUTION_PATH + PENTAHO_XML_PATH); if (file.exists()) { return SOLUTION_PATH; } else { return ALT_SOLUTION_PATH; } } public static void main(String[] args) { SpringSecurityPermissionMgrTest test = new SpringSecurityPermissionMgrTest(); test.setUp(); try { // test.testHasPermission(); // test.testSetPermission(); // test.testSetPermissions(); } finally { test.tearDown(); BaseTest.shutdown(); } } public SpringSecurityPermissionMgrTest(String arg0) { super(arg0); addProperties(); } public SpringSecurityPermissionMgrTest() { super(); addProperties(); } private void addProperties() { Properties props = System.getProperties(); longString.append(props.getProperty("java.home")).append(props.getProperty("sun.cpu.isalist")). //$NON-NLS-1$ //$NON-NLS-2$ append(props.getProperty("java.vm.version")).append(props.getProperty("user.home")). //$NON-NLS-1$ //$NON-NLS-2$ append(props.getProperty("java.class.path")); //$NON-NLS-1$ } public ISolutionRepository getSolutionRepository(StandaloneSession session) { ISolutionRepository rtn = (ISolutionRepository) new org.pentaho.platform.repository.solution.dbbased.DbBasedSolutionRepository(); rtn.init(session); return rtn; } // public void testGetPermissions() { // StandaloneSession session = new StandaloneSession(Messages.getString("BaseTest.DEBUG_JUNIT_SESSION")); //$NON-NLS-1$ // MockSecurityUtility.createPat(session); // // // Get the repository // org.pentaho.platform.repository.solution.dbbased.DbBasedSolutionRepository repo = (org.pentaho.platform.repository.solution.dbbased.DbBasedSolutionRepository) getSolutionRepository(session); // RepositoryFile aFile = (RepositoryFile) repo // .getFileByPath("samples/reporting/MDX_report.xaction"); //$NON-NLS-1$ // Set<Map.Entry<IPermissionRecipient, IPermissionMask>> mapEntrySet = SpringSecurityPermissionMgr.instance().getPermissions( // (IAclHolder) aFile).entrySet(); // Map permissionsMap = PentahoAclEntry.getValidPermissionsNameMap(); // int count = 0; // for (Iterator<Map.Entry<IPermissionRecipient, IPermissionMask>> iterator = mapEntrySet.iterator(); iterator // .hasNext();) { // Map.Entry<IPermissionRecipient, IPermissionMask> mapEntry = iterator.next(); // IPermissionRecipient permissionRecipient = mapEntry.getKey(); // String recipient = permissionRecipient.getName(); // for (Iterator keyIterator = permissionsMap.keySet().iterator(); keyIterator.hasNext();) { // String permName = keyIterator.next().toString(); // int permMask = ((Integer) permissionsMap.get(permName)).intValue(); // IPermissionMask permissionMask2 = new SimplePermissionMask(permMask); // boolean isPermitted = SpringSecurityPermissionMgr.instance().hasPermission(permissionRecipient, permissionMask2, aFile); // System.out.println("For " + recipient + " permission " + permName + " is " + (isPermitted ? "" : " not ") // + " set."); // if (isPermitted) { // count++; // } // } // } // boolean gotPermissions = count > 0; // assertEquals(Boolean.TRUE, Boolean.valueOf(gotPermissions)); // } // // public void testSetPermissions() { // try { // StandaloneSession session = new StandaloneSession(Messages.getString("BaseTest.DEBUG_JUNIT_SESSION")); //$NON-NLS-1$ // // Mock up credentials for ACL Testing // MockSecurityUtility.createPat(session); // // Get the repository // ISolutionRepository repo = getSolutionRepository(session); // if (!repo.supportsAccessControls()) { // assertFalse("ACLs are not supported by the repository", false); // } else { // // HibernateUtil.beginTransaction(); // RepositoryFile aFile = (RepositoryFile) repo // .getFileByPath("samples/reporting/MDX_report.xaction"); //$NON-NLS-1$ // // Map permMap = new HashMap<IPermissionRecipient, IPermissionMask>(); // String recipient[] = { "Admin", "pat" }; // IPermissionRecipient permissionRecipientRole = new SimpleRole(recipient[0]); // IPermissionRecipient permissionRecipientUser = new SimpleUser(recipient[1]); // SimplePermissionMask permissionMask = new SimplePermissionMask(); // String perm[] = { "Update", "Execute", "Subscribe" }; // for (int i = 0; i < perm.length; i++) { // permissionMask // .addPermission(((Integer) PentahoAclEntry.getValidPermissionsNameMap().get(perm[i])).intValue()); // } // permMap.put(permissionRecipientRole, permissionMask); // permMap.put(permissionRecipientUser, permissionMask); // if (aFile instanceof IAclSolutionFile) { // SpringSecurityPermissionMgr.instance().setPermissions(permMap, (IAclSolutionFile) aFile); // } // HibernateUtil.commitTransaction(); // assertTrue("Permissions are set successfully", true); // } // } catch (Exception e) { // e.printStackTrace(); // assertFalse("Permissions were not set successfully", false); // } // // } // // public void testSetPermission() { // try { // StandaloneSession session = new StandaloneSession(Messages.getString("BaseTest.DEBUG_JUNIT_SESSION")); //$NON-NLS-1$ // // Mock up credentials for ACL Testing // MockSecurityUtility.createPat(session); // // Get the repository // ISolutionRepository repo = getSolutionRepository(session); // // ACL The first one... // HibernateUtil.beginTransaction(); // RepositoryFile aFile = (RepositoryFile) repo // .getFileByPath("samples/reporting/MDX_report.xaction"); //$NON-NLS-1$ // // String name = "Admin"; // IPermissionRecipient permissionRecipientRole = new SimpleRole(name); // SimplePermissionMask permissionMask = new SimplePermissionMask(); // String perm = "Update"; // ; // permissionMask.addPermission(((Integer) PentahoAclEntry.getValidPermissionsNameMap().get(perm)).intValue()); // if (aFile instanceof IAclSolutionFile) { // SpringSecurityPermissionMgr.instance().setPermission(permissionRecipientRole, permissionMask, (IAclSolutionFile) aFile); // } // HibernateUtil.commitTransaction(); // assertTrue("Permission is set successfully", true); // } catch (Exception e) { // e.printStackTrace(); // assertFalse("Permission was not set successfully", false); // } // } // // public void testHasPermission() { // try { // StandaloneSession session = new StandaloneSession(Messages.getString("BaseTest.DEBUG_JUNIT_SESSION")); //$NON-NLS-1$ // // Mock up credentials for ACL Testing // MockSecurityUtility.createPat(session); // // Get the repository // ISolutionRepository repo = getSolutionRepository(session); // // ACL The first one... // RepositoryFile aFile = (RepositoryFile) repo // .getFileByPath("samples/reporting/MDX_report.xaction"); //$NON-NLS-1$ // String name = "pat"; // IPermissionRecipient permissionRecipientUser = new SimpleUser(name); // SimplePermissionMask permissionMask = new SimplePermissionMask(); // String perm = "Execute"; // ; // boolean hasPermission = false; // permissionMask.addPermission(((Integer) PentahoAclEntry.getValidPermissionsNameMap().get(perm)).intValue()); // if (aFile instanceof IAclSolutionFile) { // hasPermission = SpringSecurityPermissionMgr.instance().hasPermission(permissionRecipientUser, permissionMask, // (IAclSolutionFile) aFile); // } // assertEquals(Boolean.TRUE, Boolean.valueOf(hasPermission)); // // } catch (Exception e) { // e.printStackTrace(); // assertFalse("We were not able to determine whether the file had permission or not", false); // } // } // // public void testAllInOne_Part1() { // StandaloneSession session = new StandaloneSession(Messages.getString("BaseTest.DEBUG_JUNIT_SESSION")); //$NON-NLS-1$ // // Mock up credentials for ACL Testing // MockSecurityUtility.createPat(session); // // Get the repository // ISolutionRepository repo = getSolutionRepository(session); // // ACL The first one... // // RepositoryFile aFile = (RepositoryFile) repo // .getFileByPath("samples/reporting/MDX_report.xaction"); //$NON-NLS-1$ // // Map permMap1 = new HashMap<IPermissionRecipient, IPermissionMask>(); // Map permMap2 = new HashMap<IPermissionRecipient, IPermissionMask>(); // String recipient = "pat"; // IPermissionRecipient permissionRecipientUser = new SimpleUser(recipient); // SimplePermissionMask permissionMask1 = new SimplePermissionMask(); // SimplePermissionMask permissionMask2 = new SimplePermissionMask(); // SimplePermissionMask permissionMask3 = new SimplePermissionMask(); // String perm[] = { "Subscribe", "Update", "Execute" }; // String perm1 = "Manage"; // Map permissionMap = PentahoAclEntry.getValidPermissionsNameMap(); // Integer permission = (Integer) permissionMap.get(perm1); // permissionMask1.addPermission(permission.intValue()); // permMap1.put(permissionRecipientUser, permissionMask1); // HibernateUtil.beginTransaction(); // if (aFile instanceof IAclSolutionFile) { // SpringSecurityPermissionMgr.instance().setPermission(permissionRecipientUser, permissionMask1, (IAclSolutionFile) aFile); // } // HibernateUtil.commitTransaction(); // for (int i = 0; i < perm.length; i++) { // permissionMask2.addPermission(((Integer) PentahoAclEntry.getValidPermissionsNameMap().get(perm[i])).intValue()); // } // permMap2.put(permissionRecipientUser, permissionMask2); // HibernateUtil.beginTransaction(); // if (aFile instanceof IAclSolutionFile) { // SpringSecurityPermissionMgr.instance().setPermissions(permMap2, (IAclSolutionFile) aFile); // } // HibernateUtil.commitTransaction(); // // boolean hasPermission = false; // permissionMask3.addPermission(((Integer) PentahoAclEntry.getValidPermissionsNameMap().get(perm[0])).intValue()); // if (aFile instanceof IAclSolutionFile) { // hasPermission = SpringSecurityPermissionMgr.instance().hasPermission(permissionRecipientUser, permissionMask3, // (IAclSolutionFile) aFile); // } // assertEquals(hasPermission, true); // Set<Map.Entry<IPermissionRecipient, IPermissionMask>> mapEntrySet = SpringSecurityPermissionMgr.instance().getPermissions( // (IAclHolder) aFile).entrySet(); // Map permissionsMap = PentahoAclEntry.getValidPermissionsNameMap(); // List updatedRecipientList = new ArrayList(); // List updatedPermissionList = new ArrayList(); // int count = 0; // String recipientName = null; // for (Iterator<Map.Entry<IPermissionRecipient, IPermissionMask>> iterator = mapEntrySet.iterator(); iterator // .hasNext();) { // Map.Entry<IPermissionRecipient, IPermissionMask> mapEntry = iterator.next(); // IPermissionRecipient permissionRecipient = mapEntry.getKey(); // recipientName = permissionRecipient.getName(); // updatedRecipientList.add(recipientName); // for (Iterator keyIterator = permissionsMap.keySet().iterator(); keyIterator.hasNext();) { // String permName = keyIterator.next().toString(); // int permMask = ((Integer) permissionsMap.get(permName)).intValue(); // IPermissionMask permissionMask4 = new SimplePermissionMask(permMask); // boolean isPermitted = SpringSecurityPermissionMgr.instance().hasPermission(permissionRecipient, permissionMask4, aFile); // if (isPermitted) { // count++; // } // } // assertEquals(perm.length, count); // assertEquals(recipientName, recipient); // } // // } // // public void testAllInOne_Part2() { // StandaloneSession session = new StandaloneSession(Messages.getString("BaseTest.DEBUG_JUNIT_SESSION")); //$NON-NLS-1$ // // Mock up credentials for ACL Testing // MockSecurityUtility.createJoe(session); // // Get the repository // ISolutionRepository repo = getSolutionRepository(session); // // ACL The first one... // HibernateUtil.beginTransaction(); // RepositoryFile aFile = (RepositoryFile) repo // .getFileByPath("samples/reporting/MDX_report.xaction"); //$NON-NLS-1$ // // Map permMap1 = new HashMap<IPermissionRecipient, IPermissionMask>(); // Map permMap2 = new HashMap<IPermissionRecipient, IPermissionMask>(); // String recipient = "Admin"; // IPermissionRecipient permissionRecipientRole = new SimpleRole(recipient); // SimplePermissionMask permissionMask1 = new SimplePermissionMask(); // SimplePermissionMask permissionMask2 = new SimplePermissionMask(); // SimplePermissionMask permissionMask3 = new SimplePermissionMask(); // String perm[] = { "Subscribe", "Update", "Execute" }; // String perm1 = "Manage"; // Map permissionMap = PentahoAclEntry.getValidPermissionsNameMap(); // Integer permission = (Integer) permissionMap.get(perm1); // HibernateUtil.beginTransaction(); // permissionMask1.addPermission(permission.intValue()); // if (aFile instanceof IAclSolutionFile) { // SpringSecurityPermissionMgr.instance().setPermission(permissionRecipientRole, permissionMask1, (IAclSolutionFile) aFile); // } // HibernateUtil.commitTransaction(); // // for (int i = 0; i < perm.length; i++) { // permissionMask2.addPermission(((Integer) PentahoAclEntry.getValidPermissionsNameMap().get(perm[i])).intValue()); // } // HibernateUtil.beginTransaction(); // permMap1.put(permissionRecipientRole, permissionMask2); // if (aFile instanceof IAclSolutionFile) { // SpringSecurityPermissionMgr.instance().setPermissions(permMap1, (IAclSolutionFile) aFile); // } // HibernateUtil.commitTransaction(); // // boolean hasPermission = false; // permissionMask3.addPermission(((Integer) PentahoAclEntry.getValidPermissionsNameMap().get(perm[0])).intValue()); // if (aFile instanceof IAclSolutionFile) { // hasPermission = SpringSecurityPermissionMgr.instance().hasPermission(permissionRecipientRole, permissionMask3, // (IAclSolutionFile) aFile); // } // assertEquals(hasPermission, true); // Set<Map.Entry<IPermissionRecipient, IPermissionMask>> mapEntrySet = SpringSecurityPermissionMgr.instance().getPermissions( // (IAclHolder) aFile).entrySet(); // Map permissionsMap = PentahoAclEntry.getValidPermissionsNameMap(); // List updatedRecipientList = new ArrayList(); // List updatedPermissionList = new ArrayList(); // int count = 0; // String recipientName = null; // for (Iterator<Map.Entry<IPermissionRecipient, IPermissionMask>> iterator = mapEntrySet.iterator(); iterator // .hasNext();) { // Map.Entry<IPermissionRecipient, IPermissionMask> mapEntry = iterator.next(); // IPermissionRecipient permissionRecipient = mapEntry.getKey(); // recipientName = permissionRecipient.getName(); // updatedRecipientList.add(recipientName); // for (Iterator keyIterator = permissionsMap.keySet().iterator(); keyIterator.hasNext();) { // String permName = keyIterator.next().toString(); // int permMask = ((Integer) permissionsMap.get(permName)).intValue(); // IPermissionMask permissionMask4 = new SimplePermissionMask(permMask); // boolean isPermitted = SpringSecurityPermissionMgr.instance().hasPermission(permissionRecipient, permissionMask4, aFile); // if (isPermitted) { // count++; // } // } // assertEquals(count, perm.length); // assertEquals(recipient, recipientName); // } // // } public void testDummyTest() { // do nothing, get the above test to pass! } }