You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tb...@apache.org on 2006/12/12 16:24:14 UTC
svn commit: r486187 [11/49] - in /directory/trunks/triplesec: ./ admin-api/
admin-api/src/ admin-api/src/main/ admin-api/src/main/java/
admin-api/src/main/java/org/ admin-api/src/main/java/org/safehaus/
admin-api/src/main/java/org/safehaus/triplesec/ a...
Added: directory/trunks/triplesec/guardian-api/src/main/java/org/safehaus/triplesec/guardian/Roles.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/guardian-api/src/main/java/org/safehaus/triplesec/guardian/Roles.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/guardian-api/src/main/java/org/safehaus/triplesec/guardian/Roles.java (added)
+++ directory/trunks/triplesec/guardian-api/src/main/java/org/safehaus/triplesec/guardian/Roles.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,382 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+package org.safehaus.triplesec.guardian;
+
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+
+/**
+ * Represnets an immutable set of {@link Role}s.
+ *
+ * @author Trustin Lee
+ * @version $Rev: 52 $, $Date: 2005-08-19 23:03:36 -0400 (Fri, 19 Aug 2005) $
+ */
+public class Roles implements Cloneable, Serializable
+{
+ private static final long serialVersionUID = 654756629481872197L;
+ /** An empty array of Role objects */
+ private static final Role[] EMPTY_ROLE_ARRAY = new Role[0];
+
+ /** the name of the application this roles belong to */
+ private final String applicationName;
+ /** <tt>Map<String roleName, Role role;></tt> */
+ private final Map roles = new HashMap();
+
+
+ /**
+ * Creates a new instance.
+ *
+ * @param applicationName the name of the application this roles belong to
+ * @param roles the array of {@link Role}s that will belong to this role set
+ */
+ public Roles( String applicationName, Role[] roles )
+ {
+ // Check nulls and emptiness
+ if( applicationName == null )
+ {
+ throw new NullPointerException( "applicationName" );
+ }
+ if( applicationName.length() == 0 )
+ {
+ throw new IllegalArgumentException( "applicationName is empty." );
+ }
+ if( roles == null )
+ {
+ roles = EMPTY_ROLE_ARRAY;
+ }
+
+ this.applicationName = applicationName;
+
+ // Add all roles while checking if application names are all
+ // same with what user specified.
+ for( int i = roles.length - 1; i >= 0; i -- )
+ {
+ Role r = roles[ i ];
+ if( r == null )
+ {
+ continue;
+ }
+
+ if( !applicationName.equals( r.getApplicationName() ) )
+ {
+ throw new IllegalArgumentException( "Invalid applicationName: " + r.getApplicationName() );
+ }
+
+ this.roles.put( r.getName(), r );
+ }
+ }
+
+
+ /**
+ * Returns the name of the application this roles belong to
+ *
+ * @return the name of the application this roles belong to
+ */
+ public String getApplicationName()
+ {
+ return applicationName;
+ }
+
+
+ /**
+ * Returns <tt>true</tt> if and only if this set contains the specified
+ * <tt>role</tt>.
+ *
+ * @param role the role to find
+ * @return <tt>true</tt> if and only if this set contains the specified
+ * <tt>role</tt>
+ */
+ public boolean contains( Role role )
+ {
+ return applicationName.equals( role.getApplicationName() ) &&
+ roles.containsKey( role.getName() );
+ }
+
+
+ /**
+ * Returns <tt>true</tt> if and only if this set contains the {@link Role}
+ * with the specified <tt>roleName</tt>.
+ *
+ * @param roleName the name of the role to find
+ * @return <tt>true</tt> if and only if this set contains the specified
+ * <tt>roleName</tt>
+ */
+ public boolean contains( String roleName )
+ {
+ return roles.containsKey( roleName );
+ }
+
+
+ /**
+ * Returns <tt>true</tt> if and only if this set contains all elements of
+ * the specified <tt>roles</tt>.
+ *
+ * @param roles another set of roles
+ * @return <tt>true</tt> if and only if this set contains all elements of
+ * the specified <tt>roles</tt>
+ */
+ public boolean containsAll( Roles roles )
+ {
+ checkApplicationName( roles );
+ return this.roles.keySet().containsAll( roles.roles.keySet() );
+ }
+
+
+ /**
+ * Returns the {@link Role} with the specified <tt>roleName</tt>.
+ *
+ * @param roleName the name of the role to find
+ * @return <tt>null</tt> if there's no role with the specified name
+ */
+ public Role get( String roleName )
+ {
+ return ( Role ) roles.get( roleName );
+ }
+
+
+ /**
+ * Returns <tt>true</tt> if this set is empty.
+ *
+ * @return <tt>true</tt> if this set is empty
+ */
+ public boolean isEmpty()
+ {
+ return roles.isEmpty();
+ }
+
+
+ /**
+ * Returns the number of elements this set contains.
+ *
+ * @return the number of elements this set contains
+ */
+ public int size()
+ {
+ return roles.size();
+ }
+
+
+ /**
+ * Returns an {@link Iterator} that iterates all {@link Role}s this set contains.
+ *
+ * @return an {@link Iterator} that iterates all {@link Role}s this set contains
+ */
+ public Iterator iterator()
+ {
+ return Collections.unmodifiableCollection( roles.values() ).iterator();
+ }
+
+
+ /**
+ * Creates a new set of {@link Role}s which contains all elements of
+ * both this set and the specified set (OR operation). This operation never
+ * modifies this set.
+ *
+ * @param roles a set of roles to add
+ * @return a new set
+ */
+ public Roles addAll( Roles roles )
+ {
+ checkApplicationName( roles );
+ Roles newRoles = ( Roles ) clone();
+ newRoles.roles.putAll( roles.roles );
+ return newRoles;
+ }
+
+
+ /**
+ * Creates a new set of {@link Role}s which contains elements of
+ * this set excluding what exists in the specified set (NAND operation).
+ * This operation never modifies this set.
+ *
+ * @param roles a set of roles to remove
+ * @return a new set
+ */
+ public Roles removeAll( Roles roles )
+ {
+ checkApplicationName( roles );
+ Roles newRoles = ( Roles ) clone();
+ newRoles.roles.keySet().removeAll(
+ roles.roles.keySet() );
+ return newRoles;
+ }
+
+
+ /**
+ * Creates a new set of {@link Role}s which contains elements which
+ * exists in both this set and the specified set (AND operation). This
+ * operation never modifies this set.
+ *
+ * @param roles a set of roles to retain.
+ * @return a new set
+ */
+ public Roles retainAll( Roles roles )
+ {
+ checkApplicationName( roles );
+ Roles newRoles = ( Roles ) clone();
+ newRoles.roles.keySet().retainAll(
+ roles.roles.keySet() );
+ return newRoles;
+ }
+
+
+ public Roles getDependentRoles( String permName )
+ {
+ List dependents = new ArrayList();
+ for ( Iterator ii = this.roles.values().iterator(); ii.hasNext(); /**/ )
+ {
+ Role role = ( Role ) ii.next();
+ if ( role.hasPermission( permName ) )
+ {
+ dependents.add( role );
+ }
+ }
+
+ if ( dependents.size() == 0 )
+ {
+ return new Roles( getApplicationName(), EMPTY_ROLE_ARRAY );
+ }
+
+ Role[] roleArray = new Role[dependents.size()];
+ dependents.toArray( roleArray );
+ return new Roles( getApplicationName(), roleArray );
+ }
+
+
+ public Roles getDependentRoles( Permission perm )
+ {
+ if ( ! perm.getApplicationName().equals( getApplicationName() ) )
+ {
+ throw new IllegalArgumentException( "The permission '" + perm.getName() + "' is not " +
+ "\nassociated with this application. It is associated with " + perm.getApplicationName() );
+ }
+
+ List dependents = new ArrayList();
+ for ( Iterator ii = this.roles.values().iterator(); ii.hasNext(); /**/ )
+ {
+ Role role = ( Role ) ii.next();
+ if ( role.hasPermission( perm ) )
+ {
+ dependents.add( role );
+ }
+ }
+
+ if ( dependents.size() == 0 )
+ {
+ return new Roles( getApplicationName(), EMPTY_ROLE_ARRAY );
+ }
+
+ Role[] roleArray = new Role[dependents.size()];
+ dependents.toArray( roleArray );
+ return new Roles( getApplicationName(), roleArray );
+ }
+
+
+ // ------------------------------------------------------------------------
+ // Object Overrides
+ // ------------------------------------------------------------------------
+
+
+ public Object clone()
+ {
+ Role[] roleArray = new Role[ size() ];
+ roleArray = ( Role[] ) roles.values().toArray( roleArray );
+ return new Roles( applicationName, roleArray );
+ }
+
+
+ public int hashCode()
+ {
+ return applicationName.hashCode() ^ roles.hashCode();
+ }
+
+
+ public boolean equals( Object that )
+ {
+ if( this == that )
+ {
+ return true;
+ }
+
+ if( that instanceof Roles )
+ {
+ Roles thatP = ( Roles ) that;
+ // We don't compare application name because roles already
+ // contain it.
+ return this.roles.equals( thatP.roles );
+ }
+
+ return false;
+ }
+
+
+ public String toString()
+ {
+ StringBuffer buf = new StringBuffer();
+ buf.append( "Roles(" );
+ buf.append( applicationName );
+ buf.append( ": " );
+
+ // Sort roles by name
+ Set sortedRoles = new TreeSet( roles.values() );
+ Iterator i = sortedRoles.iterator();
+
+ // Add the first one
+ if( i.hasNext() )
+ {
+ Role r = ( Role ) i.next();
+ buf.append( r.getName() );
+
+ // Add others
+ while( i.hasNext() )
+ {
+ r = ( Role ) i.next();
+ buf.append( ", " );
+ buf.append( r.getName() );
+ }
+ }
+ else
+ {
+ buf.append( "empty" );
+ }
+
+ buf.append( ')' );
+
+ return buf.toString();
+ }
+
+
+ private void checkApplicationName( Roles roles )
+ {
+ if( !applicationName.equals( roles.getApplicationName() ) )
+ {
+ throw new IllegalArgumentException( "Wrong application name: " + roles.getApplicationName() );
+ }
+ }
+}
Added: directory/trunks/triplesec/guardian-api/src/main/java/org/safehaus/triplesec/guardian/StoreConnectionException.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/guardian-api/src/main/java/org/safehaus/triplesec/guardian/StoreConnectionException.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/guardian-api/src/main/java/org/safehaus/triplesec/guardian/StoreConnectionException.java (added)
+++ directory/trunks/triplesec/guardian-api/src/main/java/org/safehaus/triplesec/guardian/StoreConnectionException.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+package org.safehaus.triplesec.guardian;
+
+
+/**
+ * A {@link GuardianException} which is thrown when {@link ConnectionDriver}
+ * failed to connect to {@link ApplicationPolicy} due to network,
+ * authentication, or parameter problems.
+ *
+ * @author Trustin Lee
+ * @version $Rev: 53 $, $Date: 2005-08-21 20:58:16 -0400 (Sun, 21 Aug 2005) $
+ */
+public class StoreConnectionException extends GuardianException
+{
+ /** */
+ private static final long serialVersionUID = -3699779444160471445L;
+
+
+ /**
+ *
+ */
+ public StoreConnectionException()
+ {
+ super();
+ }
+
+
+ /**
+ *
+ * @param message
+ */
+ public StoreConnectionException( String message )
+ {
+ super(message);
+ }
+
+
+ /**
+ *
+ * @param nested
+ */
+ public StoreConnectionException( Throwable nested )
+ {
+ super(nested);
+ }
+
+
+ /**
+ *
+ * @param message
+ * @param nested
+ */
+ public StoreConnectionException( String message, Throwable nested )
+ {
+ super(message, nested);
+ }
+
+}
Added: directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/AbstractEntityTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/AbstractEntityTest.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/AbstractEntityTest.java (added)
+++ directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/AbstractEntityTest.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+package org.safehaus.triplesec.guardian;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+/**
+ *
+ * @author Trustin Lee
+ * @version $Rev: 52 $, $Date: 2005-08-19 23:03:36 -0400 (Fri, 19 Aug 2005) $
+ */
+public abstract class AbstractEntityTest extends TestCase {
+
+ private Object a1;
+ private Object a2;
+ private Object b1;
+ private Object b2;
+ private Object wrong;
+
+ protected abstract Object newInstanceA1();
+ protected abstract Object newInstanceA2();
+ protected abstract Object newInstanceB1();
+ protected abstract Object newInstanceB2();
+
+ protected Object newWrongInstance()
+ {
+ return new Object();
+ }
+
+ public void setUp()
+ {
+ a1 = newInstanceA1();
+ a2 = newInstanceA2();
+ b1 = newInstanceB1();
+ b2 = newInstanceB2();
+ wrong = newWrongInstance();
+ }
+
+ public void testEquals()
+ {
+ Assert.assertEquals( a1, a1 );
+ Assert.assertEquals( a1, a2 );
+ Assert.assertFalse( a1.equals( null ) );
+ Assert.assertFalse( a1.equals( b1 ) );
+ Assert.assertFalse( a1.equals( b2 ) );
+ Assert.assertFalse( a1.equals( wrong ) );
+ }
+
+ public void testHashCode()
+ {
+ Assert.assertEquals( a1.hashCode(), a2.hashCode() );
+ Assert.assertFalse( a1.hashCode() == b1.hashCode() );
+ Assert.assertFalse( a1.hashCode() == b2.hashCode() );
+ }
+
+ public void testCompareTo()
+ {
+ if( !( a1 instanceof Comparable ) )
+ {
+ return;
+ }
+
+ Comparable a1 = ( Comparable ) this.a1;
+
+ Assert.assertTrue( a1.compareTo( a1 ) == 0 );
+ Assert.assertTrue( a1.compareTo( a2 ) == 0 );
+
+ try
+ {
+ a1.compareTo( null );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+
+ Assert.assertFalse( a1.compareTo( b1 ) == 0 );
+ Assert.assertFalse( a1.compareTo( b2 ) == 0 );
+
+ try
+ {
+ a1.compareTo( wrong );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( ClassCastException e )
+ {
+ // OK
+ }
+ }
+
+ public void testClone() throws Exception
+ {
+ Object a = a1;
+ Object b = a1.getClass().getMethod( "clone", null ).invoke( a1, null );
+ Assert.assertEquals( a, b );
+ _testClone( a, b );
+ }
+
+ protected void _testClone( Object a, Object b )
+ {
+ }
+
+ public void testToString() throws Exception
+ {
+ a1.toString();
+ a2.toString();
+ b1.toString();
+ b2.toString();
+ }
+
+ public static void main(String[] args) {
+ junit.textui.TestRunner.run(AbstractEntityTest.class);
+ }
+
+}
Added: directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/ApplicationPolicyFactoryTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/ApplicationPolicyFactoryTest.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/ApplicationPolicyFactoryTest.java (added)
+++ directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/ApplicationPolicyFactoryTest.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,242 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+package org.safehaus.triplesec.guardian;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.Set;
+
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+public class ApplicationPolicyFactoryTest extends TestCase
+{
+
+ public static void main( String[] args )
+ {
+ junit.textui.TestRunner.run( ApplicationPolicyFactoryTest.class );
+ }
+
+ protected void setUp() throws Exception
+ {
+ }
+
+ protected void tearDown() throws Exception
+ {
+ }
+
+ public void testDriverRegistration() throws Exception
+ {
+ ConnectionDriver testDriver1 = new TestConnectionDriver1();
+ ConnectionDriver testDriver2 = new TestConnectionDriver2();
+
+ // Register driver and make sure it works.
+ Assert.assertTrue( ApplicationPolicyFactory.registerDriver( testDriver1 ) );
+ Assert.assertTrue( ApplicationPolicyFactory.registerDriver( testDriver2 ) );
+ Assert.assertFalse( ApplicationPolicyFactory.registerDriver( testDriver1 ) );
+ ApplicationPolicy testStore = ApplicationPolicyFactory.newInstance( "test2:dummy", new Properties() );
+ Assert.assertEquals( "Test", testStore.getApplicationName() );
+
+ // Deregister driver and make sure it doesn't work.
+ Assert.assertTrue( ApplicationPolicyFactory.deregisterDriver( testDriver1.getClass() ) );
+ Assert.assertFalse( ApplicationPolicyFactory.deregisterDriver( testDriver1.getClass() ) );
+ Assert.assertFalse( ApplicationPolicyFactory.deregisterDriver( Integer.class ) );
+ try
+ {
+ ApplicationPolicyFactory.newInstance( "test:dummy", new Properties() );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( NoConnectionDriverException e )
+ {
+ // OK
+ }
+ }
+
+ public void testConnectionRetry()
+ {
+ FailingConnectionDriver driver = new FailingConnectionDriver();
+ ApplicationPolicyFactory.registerDriver( driver );
+
+ String url = "failure:dummy";
+ Properties info = new Properties();
+
+ // No retries
+ try
+ {
+ ApplicationPolicyFactory.newInstance( url, null );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( StoreConnectionException e )
+ {
+ // OK
+ }
+
+ // Two retries
+ driver.reset();
+ info.setProperty( ApplicationPolicyFactory.RETRY_COUNT, "2" );
+ ApplicationPolicyFactory.newInstance( url, info );
+
+ // Wrong retry count
+ driver.reset();
+ info.setProperty( ApplicationPolicyFactory.RETRY_COUNT, "-1" );
+ try
+ {
+ ApplicationPolicyFactory.newInstance( url, info );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( StoreConnectionException e )
+ {
+ // OK
+ }
+
+ // With retry delay
+ driver.reset();
+ info.setProperty( ApplicationPolicyFactory.RETRY_COUNT, "2" );
+ info.setProperty( ApplicationPolicyFactory.RETRY_DELAY, "1" );
+ ApplicationPolicyFactory.newInstance( url, info );
+
+ // With wrong retry delay
+ driver.reset();
+ info.setProperty( ApplicationPolicyFactory.RETRY_COUNT, "2" );
+ info.setProperty( ApplicationPolicyFactory.RETRY_DELAY, "-1" );
+ ApplicationPolicyFactory.newInstance( url, info );
+ }
+
+ private static class TestConnectionDriver implements ConnectionDriver
+ {
+ private final String prefix;
+
+ public TestConnectionDriver( String prefix )
+ {
+ this.prefix = prefix;
+ }
+
+ public boolean accept(String url) {
+ return url.startsWith( prefix );
+ }
+
+ public ApplicationPolicy newStore(String url, Properties info) throws GuardianException {
+ return new ApplicationPolicy()
+ {
+ public String getApplicationName() {
+ return "Test";
+ }
+
+ public Roles getRoles() {
+ return null;
+ }
+
+ public Permissions getPermissions() {
+ return null;
+ }
+
+ public Profile getProfile(String userName) {
+ return null;
+ }
+
+ public void close() {}
+
+
+ public String getDescription()
+ {
+ return null;
+ }
+
+ public boolean removePolicyListener( PolicyChangeListener listener )
+ {
+ return false;
+ }
+
+ public boolean addPolicyListener( PolicyChangeListener listener )
+ {
+ return false;
+ }
+
+ public Set getDependentProfileNames( Role role ) throws GuardianException
+ {
+ return null;
+ }
+
+ public Set getDependentProfileNames( Permission permission ) throws GuardianException
+ {
+ return null;
+ }
+
+ public Set getUserProfileIds( String userName ) throws GuardianException
+ {
+ return Collections.EMPTY_SET;
+ }
+
+ public Iterator getProfileIdIterator() throws GuardianException
+ {
+ return null;
+ }
+
+ public Profile getAdminProfile()
+ {
+ return null;
+ }
+ };
+ }
+ }
+
+ private static class TestConnectionDriver1 extends TestConnectionDriver
+ {
+ public TestConnectionDriver1()
+ {
+ super( "test1" );
+ }
+ }
+
+ private static class TestConnectionDriver2 extends TestConnectionDriver
+ {
+ public TestConnectionDriver2()
+ {
+ super( "test2" );
+ }
+ }
+
+ private static class FailingConnectionDriver extends TestConnectionDriver
+ {
+ private int counter = 0;
+ public FailingConnectionDriver()
+ {
+ super( "failure" );
+ }
+
+ public void reset()
+ {
+ counter = 0;
+ }
+
+ public ApplicationPolicy newStore( String url, Properties info ) throws GuardianException
+ {
+ counter++;
+ if( counter == 3 )
+ {
+ return super.newStore( url, info );
+ }
+
+ throw new StoreConnectionException();
+ }
+ }
+}
Added: directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/ExceptionTests.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/ExceptionTests.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/ExceptionTests.java (added)
+++ directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/ExceptionTests.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+package org.safehaus.triplesec.guardian;
+
+
+import junit.framework.TestCase;
+
+
+/**
+ * Just here to make clover happy with Exceptions.
+ *
+ * @author <a href="mailto:akarasulu@safehaus.org">Alex Karasulu</a>
+ * @version $Rev: 25 $
+ */
+public class ExceptionTests extends TestCase
+{
+ public void testGuardianExceptionTests()
+ {
+ GuardianException e = new GuardianException();
+ assertNotNull( e );
+ e = new GuardianException( "some message" );
+ assertNotNull( e );
+ e = new GuardianException( new NullPointerException() );
+ assertNotNull( e );
+ e = new GuardianException( "some message", new NullPointerException() );
+ assertNotNull( e );
+ }
+
+
+ public void testNoConnectionDriverExceptionTests()
+ {
+ NoConnectionDriverException e = new NoConnectionDriverException();
+ assertNotNull( e );
+ e = new NoConnectionDriverException( "some message" );
+ assertNotNull( e );
+ e = new NoConnectionDriverException( new NullPointerException() );
+ assertNotNull( e );
+ e = new NoConnectionDriverException( "some message", new NullPointerException() );
+ assertNotNull( e );
+ }
+}
Added: directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/PermissionTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/PermissionTest.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/PermissionTest.java (added)
+++ directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/PermissionTest.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+package org.safehaus.triplesec.guardian;
+
+
+/**
+ *
+ * @author Trustin Lee
+ * @version $Rev: 52 $, $Date: 2005-08-19 23:03:36 -0400 (Fri, 19 Aug 2005) $
+ */
+public class PermissionTest extends AbstractEntityTest
+{
+
+ protected Object newInstanceA1()
+ {
+ return new Permission( "app1", "perm1" );
+ }
+
+
+ protected Object newInstanceA2()
+ {
+ return new Permission( "app1", "perm1" );
+ }
+
+
+ protected Object newInstanceB1()
+ {
+ return new Permission( "app1", "perm2" );
+ }
+
+
+ protected Object newInstanceB2()
+ {
+ return new Permission( "app2", "perm1" );
+ }
+
+
+ public void testInstantiation()
+ {
+ try
+ {
+ new Permission( "test", null );
+ fail( "Exception is not thrown." );
+ }
+ catch ( NullPointerException e )
+ {
+ // OK
+ }
+ try
+ {
+ new Permission( null, "test" );
+ fail( "Exception is not thrown." );
+ }
+ catch ( NullPointerException e )
+ {
+ // OK
+ }
+ try
+ {
+ new Permission( "test", "" );
+ fail( "Exception is not thrown." );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ // OK
+ }
+ try
+ {
+ new Permission( "", "test" );
+ fail( "Exception is not thrown." );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ // OK
+ }
+ }
+
+
+ public void testPropeties()
+ {
+ Permission p = new Permission( "a", "b", "c" );
+ assertEquals( "a", p.getApplicationName() );
+ assertEquals( "b", p.getName() );
+ assertEquals( "c", p.getDescription() );
+ }
+
+
+ public static void main( String[] args )
+ {
+ junit.textui.TestRunner.run( PermissionTest.class );
+ }
+}
Added: directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/PermissionsTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/PermissionsTest.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/PermissionsTest.java (added)
+++ directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/PermissionsTest.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,222 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+package org.safehaus.triplesec.guardian;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import junit.framework.Assert;
+
+
+/**
+ *
+ *
+ * @author Trustin Lee
+ * @version $Rev: 52 $, $Date: 2005-08-19 23:03:36 -0400 (Fri, 19 Aug 2005) $
+ *
+ */
+public class PermissionsTest extends AbstractEntityTest
+{
+ protected Object newInstanceA1()
+ {
+ return new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "perm1" ),
+ new Permission( "app1", "perm2" ),
+ new Permission( "app1", "perm3" ),
+ });
+ }
+
+ protected Object newInstanceA2()
+ {
+ return new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "perm1" ),
+ new Permission( "app1", "perm2" ),
+ new Permission( "app1", "perm3" ),
+ });
+ }
+
+ protected Object newInstanceB1()
+ {
+ return new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "perm1" ),
+ });
+ }
+
+ protected Object newInstanceB2()
+ {
+ return new Permissions( "app2", new Permission[0] );
+ }
+
+ public void testInstantiation()
+ {
+ // Test null values
+ try
+ {
+ new Permissions( null, null );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+
+ // Test empty values
+ try
+ {
+ new Permissions( "", null );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+ // Test null elements
+ Permissions perms = new Permissions( "app1", new Permission[] {
+ null, null, null,
+ });
+ Assert.assertTrue( perms.isEmpty() );
+
+ // Test mismatching application names
+ try
+ {
+ new Permissions( "app1", new Permission[] {
+ new Permission( "app2", "perm1" ),
+ });
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ //OK
+ }
+
+ Assert.assertTrue( perms.isEmpty() );
+ }
+
+ public void testProperties()
+ {
+ Permission p1 = new Permission( "app1", "perm1" );
+ Permission p2 = new Permission( "app1", "perm2" );
+ Permission p3 = new Permission( "app1", "perm3" );
+ Permissions perms = new Permissions( "app1", new Permission[] {
+ p1, p2, p3,
+ });
+
+ Assert.assertEquals( "app1", perms.getApplicationName() );
+ Assert.assertEquals( 3, perms.size() );
+ Assert.assertTrue( perms.contains( p1 ) );
+ Assert.assertTrue( perms.contains( p2 ) );
+ Assert.assertTrue( perms.contains( p3 ) );
+ Assert.assertTrue( perms.contains( p1.getName() ) );
+ Assert.assertTrue( perms.contains( p2.getName() ) );
+ Assert.assertTrue( perms.contains( p3.getName() ) );
+ Assert.assertEquals( p1, perms.get( p1.getName() ) );
+ Assert.assertEquals( p2, perms.get( p2.getName() ) );
+ Assert.assertEquals( p3, perms.get( p3.getName() ) );
+
+ // Test iterator integrity
+ Set allPerms = new HashSet();
+ allPerms.add( p1 );
+ allPerms.add( p2 );
+ allPerms.add( p3 );
+ for( Iterator i = perms.iterator(); i.hasNext(); )
+ {
+ Permission p = ( Permission ) i.next();
+ Assert.assertTrue( allPerms.contains( p ) );
+ allPerms.remove( p );
+ }
+ }
+
+ public void testSetOperations()
+ {
+ Permissions perms1 = new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "perm1" ),
+ });
+ Permissions perms2 = new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "perm2" ),
+ });
+ Permissions perms12 = new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "perm1" ),
+ new Permission( "app1", "perm2" ),
+ });
+ Permissions wrongPerms = new Permissions( "wrongApp", null );
+
+
+ // addAll
+ Assert.assertEquals( perms12, perms1.addAll( perms2 ) );
+ Assert.assertEquals( perms1, perms1.addAll( perms1 ) );
+ try
+ {
+ perms1.addAll( wrongPerms );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+ // removeAll
+ Assert.assertEquals( perms1, perms12.removeAll( perms2 ) );
+ Assert.assertEquals( perms1, perms1.removeAll( perms2 ) );
+ try
+ {
+ perms1.removeAll( wrongPerms );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+ // retainAll
+ Assert.assertEquals( perms1, perms12.retainAll( perms1 ) );
+ Assert.assertEquals(
+ new Permissions( "app1", null ), perms1.retainAll( perms2 ) );
+ try
+ {
+ perms1.retainAll( wrongPerms );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+ // containsAll
+ Assert.assertTrue( perms12.containsAll( perms12 ) );
+ Assert.assertFalse( perms1.containsAll( perms12 ) );
+ try
+ {
+ perms1.containsAll( wrongPerms );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+ }
+
+ public static void main( String[] args )
+ {
+ junit.textui.TestRunner.run( PermissionsTest.class );
+ }
+
+}
Added: directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/ProfileTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/ProfileTest.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/ProfileTest.java (added)
+++ directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/ProfileTest.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,401 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+package org.safehaus.triplesec.guardian;
+
+import java.security.AccessControlException;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Set;
+
+
+import junit.framework.Assert;
+
+/**
+ * @author <a href="mailto:akarasulu@safehaus.org">Alex Karasulu</a>
+ * @version $Rev: 72 $
+ */
+public class ProfileTest extends AbstractEntityTest
+{
+ private static final ApplicationPolicy STORE1 = new TestApplicationPolicyStore(
+ "app1" );
+
+ private static final ApplicationPolicy STORE2 = new TestApplicationPolicyStore(
+ "app2" );
+
+ protected Object newInstanceA1()
+ {
+ return new Profile( STORE1, "trustin", "trustin", null, null, null, false );
+ }
+
+ protected Object newInstanceA2()
+ {
+ return new Profile( STORE1, "trustin", "trustin", null, null, null, false );
+ }
+
+ protected Object newInstanceB1()
+ {
+ return new Profile( STORE1, "alex", "alex", null, null, null, false );
+ }
+
+ protected Object newInstanceB2()
+ {
+ return new Profile( STORE2, "trustin", "trustin", null, null, null, false );
+ }
+
+ public void testInstantiation()
+ {
+ Roles roles = new Roles( "app1", new Role[] {
+ new Role( STORE1, "role1", new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "perm1" ),
+ })),
+ });
+ Permissions grants = new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "perm1" ),
+ });
+ Permissions denials = new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "perm2" ),
+ });
+
+ // Test null parameters
+ try
+ {
+ new Profile( null, "trustin", "trustin", roles, grants, denials, false );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+ try
+ {
+ new Profile( STORE1, null, "trustin", roles, grants, denials, false );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+
+ // Test empty fields
+ try
+ {
+ new Profile( STORE1, "", "trustin", roles, grants, denials, false );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+ try
+ {
+ new Profile( new TestApplicationPolicyStore( "" ), "role1", "trustin", roles, grants, denials, false );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+ // Test unknown permissions
+ Permissions wrongPerms = new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "wrongPerm" ),
+ });
+ try
+ {
+
+ new Profile( STORE1, "trustin", "trustin", roles, wrongPerms, denials, false );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+ try
+ {
+
+ new Profile( STORE1, "trustin", "trustin", roles, grants, wrongPerms, false );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+
+ // Test mismatching application names.
+ try
+ {
+ new Profile( STORE2, "role1", "trustin", roles, null, null, false );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+ try
+ {
+ new Profile( STORE2, "role1", "trustin", null, grants, null, false );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+ try
+ {
+ new Profile( STORE2, "role1", "trustin", null, null, denials, false );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+ Profile p = new Profile( STORE1, "role1", "trustin", null, null, null, false );
+ Assert.assertEquals( 0, p.getRoles().size() );
+ Assert.assertEquals( 0, p.getGrants().size() );
+ Assert.assertEquals( 0, p.getDenials().size() );
+ assertEquals( "trustin", p.getUserName() );
+ }
+
+ public void testProperties()
+ {
+ Roles roles = new Roles( "app1", new Role[] {
+ new Role( STORE1, "role1", new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "perm2" ),
+ new Permission( "app1", "perm3" ),
+ new Permission( "app1", "perm4" ),
+ })),
+ });
+ Permissions grants = new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "perm1" ),
+ new Permission( "app1", "perm2" ),
+ });
+ Permissions denials = new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "perm3" ),
+ });
+
+ Profile p = new Profile( STORE1, "trustin", "trustin", roles, grants, denials, "test description", false );
+ assertEquals( "app1", p.getApplicationName() );
+ assertEquals( "trustin", p.getProfileId() );
+ assertEquals( roles, p.getRoles() );
+ assertEquals( grants, p.getGrants() );
+ assertEquals( denials, p.getDenials() );
+ assertEquals( "test description", p.getDescription() );
+
+ Permissions effectivePermissions = new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "perm1" ),
+ new Permission( "app1", "perm2" ),
+ new Permission( "app1", "perm4" ),
+ });
+ assertEquals( effectivePermissions, p.getEffectivePermissions() );
+
+ assertTrue( p.isInRole( "role1" ) );
+ }
+
+ public void testRolePermissions()
+ {
+ Permission perm = new Permission( "app1", "perm1" );
+ Permission wrongPerm = new Permission( "app1", "perm2" );
+ Permissions perms = new Permissions( "app1", new Permission[] { perm, } );
+
+ // Effective permissions will be: 'perm1'
+ Profile p = new Profile(
+ STORE1, "trustin", "trustin",
+ new Roles( "app1", null ),
+ perms, null, false );
+
+ // Check existing permissions
+ p.checkPermission( perm );
+ p.checkPermission( perm, "unused" );
+ p.checkPermission( perm.getName() );
+ p.checkPermission( perm.getName(), "unused" );
+ assertTrue( p.hasPermission( perm ) );
+ assertTrue( p.hasPermission( perm.getName() ) );
+ assertFalse( p.hasPermission( "nonexistant" ) );
+
+ // Check null parameters
+ try
+ {
+ p.checkPermission( ( Permission ) null );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+ try
+ {
+ p.checkPermission( ( String ) null );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+ try
+ {
+ p.checkPermission( ( Permission ) null, "unused" );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+ try
+ {
+ p.checkPermission( ( String ) null, "unused" );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+
+ // Check non-existing permissions
+ try
+ {
+ p.checkPermission( wrongPerm );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( AccessControlException e )
+ {
+ // OK
+ }
+ try
+ {
+ p.checkPermission( wrongPerm, "unused" );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( AccessControlException e )
+ {
+ // OK
+ }
+ try
+ {
+ p.checkPermission( wrongPerm.getName() );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( AccessControlException e )
+ {
+ // OK
+ }
+ try
+ {
+ p.checkPermission( wrongPerm.getName(), "unused" );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( AccessControlException e )
+ {
+ // OK
+ }
+ }
+
+
+ protected void _testClone( Object a, Object b )
+ {
+ Profile pa = ( Profile ) a;
+ Profile pb = ( Profile ) b;
+ Assert.assertEquals( pa.getRoles(), pb.getRoles() );
+ Assert.assertEquals( pa.getGrants(), pb.getGrants() );
+ Assert.assertEquals( pa.getDenials(), pb.getDenials() );
+ }
+
+ private static class TestApplicationPolicyStore implements
+ ApplicationPolicy
+ {
+ private final String appName;
+
+ public TestApplicationPolicyStore( String appName )
+ {
+ this.appName = appName;
+ }
+
+ public String getApplicationName()
+ {
+ return appName;
+ }
+
+ public Roles getRoles()
+ {
+ return null;
+ }
+
+ public Permissions getPermissions()
+ {
+ Permission[] perms = new Permission[] {
+ new Permission( appName, "perm1" ),
+ new Permission( appName, "perm2" ),
+ new Permission( appName, "perm3" ),
+ new Permission( appName, "perm4" ),
+ };
+ return new Permissions( appName, perms );
+ }
+
+ public Profile getProfile( String userName )
+ {
+ return null;
+ }
+
+
+ public String getDescription()
+ {
+ return null;
+ }
+
+
+ public void close() {}
+
+ public boolean removePolicyListener( PolicyChangeListener listener )
+ {
+ return false;
+ }
+
+ public boolean addPolicyListener( PolicyChangeListener listener )
+ {
+ return false;
+ }
+
+ public Set getDependentProfileNames( Role role ) throws GuardianException
+ {
+ return null;
+ }
+
+ public Set getDependentProfileNames( Permission permission ) throws GuardianException
+ {
+ return null;
+ }
+
+ public Set getUserProfileIds( String userName ) throws GuardianException
+ {
+ return Collections.EMPTY_SET;
+ }
+
+ public Iterator getProfileIdIterator() throws GuardianException
+ {
+ return null;
+ }
+
+ public Profile getAdminProfile()
+ {
+ return null;
+ }
+ }
+}
Added: directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/RoleTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/RoleTest.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/RoleTest.java (added)
+++ directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/RoleTest.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,333 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+package org.safehaus.triplesec.guardian;
+
+
+import java.security.AccessControlException;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Set;
+
+
+
+/**
+ * @author <a href="mailto:akarasulu@safehaus.org">Alex Karasulu</a>
+ * @version $Rev: 74 $
+ */
+public class RoleTest extends AbstractEntityTest
+{
+ private static final ApplicationPolicy STORE1 = new TestApplicationPolicyStore(
+ "app1" );
+
+ private static final ApplicationPolicy STORE2 = new TestApplicationPolicyStore(
+ "app2" );
+
+ protected Object newInstanceA1()
+ {
+ return new Role( STORE1, "role1", null );
+ }
+
+ protected Object newInstanceA2()
+ {
+ return new Role( STORE1, "role1", null );
+ }
+
+ protected Object newInstanceB1()
+ {
+ return new Role( STORE1, "role2", null );
+ }
+
+ protected Object newInstanceB2()
+ {
+ return new Role( STORE2, "role1", null );
+ }
+
+ public void testInstantiation()
+ {
+ Permissions perms = new Permissions( "app1", null );
+
+ // Test null parameters
+ try
+ {
+ new Role( null, "role1", perms );
+ fail( "Execption is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+ try
+ {
+ new Role( STORE1, null, perms );
+ fail( "Execption is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+
+ // Test empty fields
+ try
+ {
+ new Role( STORE2, "", perms );
+ fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+ try
+ {
+ new Role( new TestApplicationPolicyStore( "" ), "role1", perms );
+ fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+ // Test unknown permissions
+ try
+ {
+ Permissions wrongPerms = new Permissions( "app1", new Permission[] {
+ new Permission( "app1", "wrongPerm" ),
+ });
+
+ new Role( STORE1, "role1", wrongPerms );
+ fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+
+ // Test mismatching application names.
+ try
+ {
+ new Role( STORE2, "role1", perms );
+ fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+ Role r = new Role( STORE1, "role1", null );
+ assertEquals( 0, r.getGrants().size() );
+ }
+
+ public void testProperties()
+ {
+ Permission perm1= new Permission( "app1", "perm1" );
+ Permissions perms = new Permissions( "app1", new Permission[] {
+ perm1,
+ new Permission( "app1", "perm2" ),
+ new Permission( "app1", "perm3" ), } );
+
+ Role r = new Role( STORE1, "role1", perms, "test description" );
+ assertEquals( "app1", r.getApplicationName() );
+ assertEquals( "role1", r.getName() );
+ assertEquals( perms, r.getGrants() );
+ assertEquals( "test description", r.getDescription() );
+ assertTrue( r.hasPermission( perm1 ) ) ;
+ assertTrue( r.hasPermission( perm1.getName() ) ) ;
+ }
+
+ public void testRolePermissions()
+ {
+ Permission perm = new Permission( "app1", "perm1" );
+ Permission wrongPerm = new Permission( "app1", "perm2" );
+ Permissions perms = new Permissions( "app1", new Permission[] { perm, } );
+
+ Role r = new Role( STORE1, "role1", perms );
+
+ // Check existing permissions
+ r.checkPermission( perm );
+ assertTrue( r.hasPermission( perm.getName() ) );
+ assertTrue( r.hasPermission( perm ) );
+ r.checkPermission( perm, "unused" );
+ r.checkPermission( perm.getName() );
+ r.checkPermission( perm.getName(), "unused" );
+
+ // Check null parameters
+ try
+ {
+ r.checkPermission( ( Permission ) null );
+ fail( "Exception is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+ try
+ {
+ r.checkPermission( ( String ) null );
+ fail( "Exception is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+ try
+ {
+ r.checkPermission( ( Permission ) null, "unused" );
+ fail( "Exception is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+ try
+ {
+ r.checkPermission( ( String ) null, "unused" );
+ fail( "Exception is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+
+ // Check non-existing permissions
+ try
+ {
+ r.checkPermission( wrongPerm );
+ fail( "Exception is not thrown." );
+ }
+ catch( AccessControlException e )
+ {
+ // OK
+ }
+ try
+ {
+ r.checkPermission( wrongPerm, "unused" );
+ fail( "Exception is not thrown." );
+ }
+ catch( AccessControlException e )
+ {
+ // OK
+ }
+ try
+ {
+ r.checkPermission( wrongPerm.getName() );
+ fail( "Exception is not thrown." );
+ }
+ catch( AccessControlException e )
+ {
+ // OK
+ }
+ try
+ {
+ r.checkPermission( wrongPerm.getName(), "unused" );
+ fail( "Exception is not thrown." );
+ }
+ catch( AccessControlException e )
+ {
+ // OK
+ }
+ }
+
+
+
+ protected void _testClone( Object a, Object b )
+ {
+ Role ra = ( Role ) a;
+ Role rb = ( Role ) b;
+ assertEquals( ra.getGrants(), rb.getGrants() );
+ }
+
+ private static class TestApplicationPolicyStore implements
+ ApplicationPolicy
+ {
+ private final String appName;
+
+ public TestApplicationPolicyStore( String appName )
+ {
+ this.appName = appName;
+ }
+
+ public String getApplicationName()
+ {
+ return appName;
+ }
+
+ public Roles getRoles()
+ {
+ return null;
+ }
+
+ public Permissions getPermissions()
+ {
+ Permission[] perms = new Permission[] {
+ new Permission( appName, "perm1" ),
+ new Permission( appName, "perm2" ),
+ new Permission( appName, "perm3" ),
+ };
+ return new Permissions( appName, perms );
+ }
+
+ public Profile getProfile( String userName )
+ {
+ return null;
+ }
+
+ public String getDescription()
+ {
+ return null;
+ }
+
+ public void close() {}
+
+ public boolean removePolicyListener( PolicyChangeListener listener )
+ {
+ return false;
+ }
+
+ public boolean addPolicyListener( PolicyChangeListener listener )
+ {
+ return false;
+ }
+
+ public Set getDependentProfileNames( Role role ) throws GuardianException
+ {
+ return null;
+ }
+
+ public Set getDependentProfileNames( Permission permission ) throws GuardianException
+ {
+ return null;
+ }
+
+ public Set getUserProfileIds( String userName ) throws GuardianException
+ {
+ return Collections.EMPTY_SET;
+ }
+
+ public Iterator getProfileIdIterator() throws GuardianException
+ {
+ return null;
+ }
+
+ public Profile getAdminProfile()
+ {
+ return null;
+ }
+ }
+}
Added: directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/RolesTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/RolesTest.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/RolesTest.java (added)
+++ directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/RolesTest.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,337 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+package org.safehaus.triplesec.guardian;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+
+import junit.framework.Assert;
+
+
+/**
+ *
+ *
+ * @author Trustin Lee
+ * @version $Rev: 72 $, $Date: 2005-11-07 21:37:46 -0500 (Mon, 07 Nov 2005) $
+ */
+public class RolesTest extends AbstractEntityTest
+{
+ private static final ApplicationPolicy STORE1 = new TestApplicationPolicyStore(
+ "app1" );
+
+ private static final ApplicationPolicy STORE2 = new TestApplicationPolicyStore(
+ "app2" );
+
+ protected Object newInstanceA1()
+ {
+ return new Roles( "app1", new Role[] {
+ new Role( STORE1, "role1", null ),
+ new Role( STORE1, "role2", null ),
+ new Role( STORE1, "role3", null ),
+ });
+ }
+
+ protected Object newInstanceA2()
+ {
+ return new Roles( "app1", new Role[] {
+ new Role( STORE1, "role1", null ),
+ new Role( STORE1, "role2", null ),
+ new Role( STORE1, "role3", null ),
+ });
+ }
+
+ protected Object newInstanceB1()
+ {
+ return new Roles( "app1", new Role[] {
+ new Role( STORE1, "role1", null ),
+ });
+ }
+
+ protected Object newInstanceB2()
+ {
+ return new Roles( "app2", null );
+ }
+
+ public void testInstantiation()
+ {
+ // Test null values
+ try
+ {
+ new Roles( null, null );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( NullPointerException e )
+ {
+ // OK
+ }
+
+ // Test empty values
+ try
+ {
+ new Roles( "", null );
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+ // Test null elements
+ Roles roles = new Roles( "app1", new Role[] {
+ null, null, null,
+ });
+ Assert.assertTrue( roles.isEmpty() );
+
+ // Test mismatching application names
+ try
+ {
+ new Roles( "app1", new Role[] {
+ new Role( STORE2, "role1", null ),
+ });
+ Assert.fail( "Execption is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ //OK
+ }
+
+ Assert.assertTrue( roles.isEmpty() );
+ }
+
+ public void testProperties()
+ {
+ Role r1 = new Role( STORE1, "role1", null );
+ Role r2 = new Role( STORE1, "role2", null );
+ Role r3 = new Role( STORE1, "role3", null );
+ Roles roles = new Roles( "app1", new Role[] {
+ r1, r2, r3,
+ });
+
+ Assert.assertEquals( "app1", roles.getApplicationName() );
+ Assert.assertEquals( 3, roles.size() );
+ Assert.assertTrue( roles.contains( r1 ) );
+ Assert.assertTrue( roles.contains( r2 ) );
+ Assert.assertTrue( roles.contains( r3 ) );
+ Assert.assertTrue( roles.contains( r1.getName() ) );
+ Assert.assertTrue( roles.contains( r2.getName() ) );
+ Assert.assertTrue( roles.contains( r3.getName() ) );
+ Assert.assertEquals( r1, roles.get( r1.getName() ) );
+ Assert.assertEquals( r2, roles.get( r2.getName() ) );
+ Assert.assertEquals( r3, roles.get( r3.getName() ) );
+
+ // Test iterator integrity
+ Set allRoles = new HashSet();
+ allRoles.add( r1 );
+ allRoles.add( r2 );
+ allRoles.add( r3 );
+ for( Iterator i = roles.iterator(); i.hasNext(); )
+ {
+ Role p = ( Role ) i.next();
+ Assert.assertTrue( allRoles.contains( p ) );
+ allRoles.remove( p );
+ }
+ }
+
+ public void testSetOperations()
+ {
+ Roles roles1 = new Roles( "app1", new Role[] {
+ new Role( STORE1, "role1", null ),
+ });
+ Roles roles2 = new Roles( "app1", new Role[] {
+ new Role( STORE1, "role2", null ),
+ });
+ Roles roles12 = new Roles( "app1", new Role[] {
+ new Role( STORE1, "role1", null ),
+ new Role( STORE1, "role2", null ),
+ });
+ Roles wrongRoles = new Roles( "wrongApp", null );
+
+
+ // addAll
+ Assert.assertEquals( roles12, roles1.addAll( roles2 ) );
+ Assert.assertEquals( roles1, roles1.addAll( roles1 ) );
+ try
+ {
+ roles1.addAll( wrongRoles );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+ // removeAll
+ Assert.assertEquals( roles1, roles12.removeAll( roles2 ) );
+ Assert.assertEquals( roles1, roles1.removeAll( roles2 ) );
+ try
+ {
+ roles1.removeAll( wrongRoles );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+ // retainAll
+ Assert.assertEquals( roles1, roles12.retainAll( roles1 ) );
+ Assert.assertEquals(
+ new Roles( "role1", null ), roles1.retainAll( roles2 ) );
+ try
+ {
+ roles1.retainAll( wrongRoles );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+
+ // containsAll
+ Assert.assertTrue( roles12.containsAll( roles12 ) );
+ Assert.assertFalse( roles1.containsAll( roles12 ) );
+ try
+ {
+ roles1.containsAll( wrongRoles );
+ Assert.fail( "Exception is not thrown." );
+ }
+ catch( IllegalArgumentException e )
+ {
+ // OK
+ }
+ }
+
+
+ public void testGetDependentRoles()
+ {
+ Role role1 = new Role( STORE1, "role1", STORE1.getPermissions() );
+ Role role2 = new Role( STORE1, "role2", null );
+ Roles roles12 = new Roles( "app1", new Role[] { role1, role2 });
+
+ Roles dependents = roles12.getDependentRoles( "perm1" );
+ assertEquals( 1, dependents.size() );
+ assertEquals( role1, dependents.get( "role1" ) );
+
+ dependents = roles12.getDependentRoles( STORE1.getPermissions().get( "perm1" ) );
+ assertEquals( 1, dependents.size() );
+ assertEquals( role1, dependents.get( "role1" ) );
+
+ dependents = roles12.getDependentRoles( "perm99" );
+ assertEquals( 0, dependents.size() );
+
+ dependents = roles12.getDependentRoles( new Permission( "app1", "perm99" ) );
+ assertEquals( 0, dependents.size() );
+
+ try
+ {
+ dependents = roles12.getDependentRoles( new Permission( "blah", "perm99" ) );
+ fail( "Should never get here due to an exception" );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ }
+ }
+
+
+ public static void main( String[] args )
+ {
+ junit.textui.TestRunner.run( RolesTest.class );
+ }
+
+ private static class TestApplicationPolicyStore implements ApplicationPolicy
+ {
+ private final String appName;
+
+ public TestApplicationPolicyStore( String appName )
+ {
+ this.appName = appName;
+ }
+
+ public String getApplicationName()
+ {
+ return appName;
+ }
+
+ public Roles getRoles()
+ {
+ return null;
+ }
+
+ public Permissions getPermissions()
+ {
+ Permission[] perms = new Permission[] {
+ new Permission( appName, "perm1" ),
+ new Permission( appName, "perm2" ),
+ new Permission( appName, "perm3" ),
+ };
+ return new Permissions( appName, perms );
+ }
+
+ public Profile getProfile( String userName )
+ {
+ return null;
+ }
+
+ public String getDescription()
+ {
+ return null;
+ }
+
+ public void close() {}
+
+ public boolean removePolicyListener( PolicyChangeListener listener )
+ {
+ return false;
+ }
+
+ public boolean addPolicyListener( PolicyChangeListener listener )
+ {
+ return false;
+ }
+
+ public Set getDependentProfileNames( Role role ) throws GuardianException
+ {
+ return null;
+ }
+
+ public Set getDependentProfileNames( Permission permission ) throws GuardianException
+ {
+ return null;
+ }
+
+ public Set getUserProfileIds( String userName ) throws GuardianException
+ {
+ return Collections.EMPTY_SET;
+ }
+
+ public Iterator getProfileIdIterator() throws GuardianException
+ {
+ return null;
+ }
+
+ public Profile getAdminProfile()
+ {
+ return null;
+ }
+ }
+}
Added: directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/mock/MockApplicationPolicy.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/mock/MockApplicationPolicy.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/mock/MockApplicationPolicy.java (added)
+++ directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/mock/MockApplicationPolicy.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,216 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+package org.safehaus.triplesec.guardian.mock;
+
+
+import org.safehaus.triplesec.guardian.*;
+
+import java.util.*;
+
+
+/**
+ * A mock implementation of an ApplicationPolicyStore for testing purposes.
+ *
+ * @author <a href="mailto:akarasulu@safehaus.org">Alex Karasulu</a>
+ * @version $Rev: 72 $
+ */
+class MockApplicationPolicy implements ApplicationPolicy
+{
+ private final Roles roles;
+ private final Permissions perms;
+ private final String name;
+ private final Map profileByName;
+
+
+ public MockApplicationPolicy()
+ {
+ name = "mockApplication";
+ profileByName = new HashMap();
+ Set permSet = new HashSet();
+ Set roleSet = new HashSet();
+
+ // --------------------------------------------------------------------------------
+ // add permissions
+ // --------------------------------------------------------------------------------
+
+ Permission perm0 = new Permission( name, "mockPerm0" ); permSet.add( perm0 );
+ Permission perm1 = new Permission( name, "mockPerm1" ); permSet.add( perm1 );
+ Permission perm2 = new Permission( name, "mockPerm2" ); permSet.add( perm2 );
+ Permission perm3 = new Permission( name, "mockPerm3" ); permSet.add( perm3 );
+ Permission perm4 = new Permission( name, "mockPerm4" ); permSet.add( perm4 );
+ Permission perm5 = new Permission( name, "mockPerm5" ); permSet.add( perm5 );
+ Permission perm6 = new Permission( name, "mockPerm6" ); permSet.add( perm6 );
+ Permission perm7 = new Permission( name, "mockPerm7" ); permSet.add( perm7 );
+ Permission perm8 = new Permission( name, "mockPerm8" ); permSet.add( perm8 );
+ Permission perm9 = new Permission( name, "mockPerm9" ); permSet.add( perm9 );
+
+ Permission[] permArray = ( Permission[] ) permSet.toArray( new Permission[0] );
+ perms = new Permissions( name, permArray );
+
+ // --------------------------------------------------------------------------------
+ // add roles
+ // --------------------------------------------------------------------------------
+
+ // role without any permissions toggled
+ Permissions grants = new Permissions( name, new Permission[0] );
+ Role role0 = new Role( this, "mockRole0", grants );
+ roleSet.add( role0 );
+
+ // role with permission mockPerm0
+ grants = new Permissions( name, new Permission[] {perm0});
+ Role role1 = new Role( this, "mockRole1", grants );
+ roleSet.add( role1 );
+
+ // role with permission mockPerm1
+ grants = new Permissions( name, new Permission[] {perm1});
+ Role role2 = new Role( this, "mockRole2", grants );
+ roleSet.add( role2 );
+
+ // role with permission mockPerm2 and mochPerm3
+ grants = new Permissions( name, new Permission[] {perm2, perm3});
+ Role role3 = new Role( this, "mockRole3", grants );
+ roleSet.add( role3 );
+
+ // role with permission mockPerm4, mockPerm5, mockPerm6, mockPerm7, mockPerm9
+ grants = new Permissions( name, new Permission[] {perm4, perm5, perm6, perm7, perm9});
+ Role role4 = new Role( this, "mockRole4", grants );
+ roleSet.add( role4 );
+
+ Role[] rolesArray = ( Role [] ) roleSet.toArray( new Role[0] );
+ roles = new Roles( name, rolesArray );
+
+ // --------------------------------------------------------------------------------
+ // add profiles
+ // --------------------------------------------------------------------------------
+
+ // a profile that has no permissions at all, and no roles (basis case)
+ grants = new Permissions( name, new Permission[0] );
+ Permissions denials = new Permissions( name, new Permission[0] );
+ Roles roles = new Roles( name, new Role[0] );
+ Profile profile = new Profile( this, "mockProfile0", "trustin", roles, grants, denials, false );
+ profileByName.put( profile.getProfileId(), profile );
+
+ // a profile for checking union of role1 and role2 - inherits perm0 and perm1
+ grants = new Permissions( name, new Permission[0] );
+ denials = new Permissions( name, new Permission[0] );
+ roles = new Roles( name, new Role[] { role1, role2 } );
+ profile = new Profile( this, "mockProfile1", "trustin", roles, grants, denials, false );
+ profileByName.put( profile.getProfileId(), profile );
+
+ // a profile for checking union of roles with grants - granted perm0 and inherits perm1
+ grants = new Permissions( name, new Permission[] { perm0 } );
+ denials = new Permissions( name, new Permission[0] );
+ roles = new Roles( name, new Role[] { role2 } );
+ profile = new Profile( this, "mockProfile2", "trustin", roles, grants, denials, false );
+ profileByName.put( profile.getProfileId(), profile );
+
+ // a profile for checking union of roles with grants - granted perm0, perm7 and inherits perm2 and perm3
+ grants = new Permissions( name, new Permission[] { perm0, perm7 } );
+ denials = new Permissions( name, new Permission[0] );
+ roles = new Roles( name, new Role[] { role3 } );
+ profile = new Profile( this, "mockProfile3", "trustin", roles, grants, denials, false );
+ profileByName.put( profile.getProfileId(), profile );
+
+ // a profile for checking union of roles with grants and denials
+ // granted perm0, in role3 and role4 but denied inherited perm7
+ grants = new Permissions( name, new Permission[] { perm0 } );
+ denials = new Permissions( name, new Permission[] { perm7 } );
+ roles = new Roles( name, new Role[] { role3, role4 } );
+ profile = new Profile( this, "mockProfile4", "trustin", roles, grants, denials, false );
+ profileByName.put( profile.getProfileId(), profile );
+ }
+
+
+ public String getApplicationName()
+ {
+ return name;
+ }
+
+
+ public Roles getRoles()
+ {
+ return roles;
+ }
+
+
+ public Permissions getPermissions()
+ {
+ return perms;
+ }
+
+
+ public Profile getProfile( String username )
+ {
+ return ( Profile ) profileByName.get( username );
+ }
+
+
+ public String getDescription()
+ {
+ return "a mock application";
+ }
+
+
+ public void close()
+ {
+ }
+
+
+ public boolean removePolicyListener( PolicyChangeListener listener )
+ {
+ return false;
+ }
+
+
+ public boolean addPolicyListener( PolicyChangeListener listener )
+ {
+ return false;
+ }
+
+
+ public Set getDependentProfileNames( Role role ) throws GuardianException
+ {
+ return null;
+ }
+
+
+ public Set getDependentProfileNames( Permission permission ) throws GuardianException
+ {
+ return null;
+ }
+
+
+ public Set getUserProfileIds( String userName ) throws GuardianException
+ {
+ return Collections.EMPTY_SET;
+ }
+
+
+ public Iterator getProfileIdIterator() throws GuardianException
+ {
+ return null;
+ }
+
+
+ public Profile getAdminProfile()
+ {
+ return null;
+ }
+}
Added: directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/mock/MockApplicationPolicyTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/mock/MockApplicationPolicyTest.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/mock/MockApplicationPolicyTest.java (added)
+++ directory/trunks/triplesec/guardian-api/src/test/java/org/safehaus/triplesec/guardian/mock/MockApplicationPolicyTest.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+ */
+package org.safehaus.triplesec.guardian.mock;
+
+
+import junit.framework.TestCase;
+import org.safehaus.triplesec.guardian.ApplicationPolicyFactory;
+import org.safehaus.triplesec.guardian.Profile;
+
+
+/**
+ * Test cases for the mock application policy store.
+ *
+ * @author <a href="mailto:akarasulu@safehaus.org">Alex Karasulu</a>
+ * @version $Rev$
+ */
+public class MockApplicationPolicyTest extends TestCase
+{
+ MockApplicationPolicy store;
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ Class.forName( "org.safehaus.triplesec.guardian.mock.MockConnectionDriver" );
+ store = ( MockApplicationPolicy ) ApplicationPolicyFactory.newInstance( "mockApplication", null );
+ }
+
+
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+ store.close();
+ store = null;
+ }
+
+
+ public void testProfile0()
+ {
+ assertEquals( 5, store.getRoles().size() );
+ Profile p = store.getProfile( "mockProfile0" );
+ assertTrue( p.getEffectivePermissions().isEmpty() );
+ assertTrue( p.getRoles().isEmpty() );
+ }
+
+ public void testProfile1()
+ {
+ Profile p = store.getProfile( "mockProfile1" );
+ assertEquals( 2, p.getEffectivePermissions().size() );
+ assertTrue( p.hasPermission( "mockPerm0" ) );
+ assertTrue( p.hasPermission( "mockPerm1" ) );
+ assertFalse( p.hasPermission( "mockPerm3") );
+ assertEquals( 2, p.getRoles().size() );
+ }
+
+ public void testProfile2()
+ {
+ Profile p = store.getProfile( "mockProfile2" );
+ assertEquals( 2, p.getEffectivePermissions().size() );
+ assertTrue( p.hasPermission( "mockPerm0" ) );
+ assertTrue( p.hasPermission( "mockPerm1" ) );
+ assertFalse( p.hasPermission( "mockPerm3") );
+ assertEquals( 1, p.getRoles().size() );
+ assertTrue( p.getRoles().contains( "mockRole2" ) );
+ }
+
+ public void testProfile3()
+ {
+ Profile p = store.getProfile( "mockProfile3" );
+ assertEquals( 4, p.getEffectivePermissions().size() );
+ assertTrue( p.hasPermission( "mockPerm0" ) );
+ assertTrue( p.hasPermission( "mockPerm7" ) );
+ assertTrue( p.hasPermission( "mockPerm2" ) );
+ assertTrue( p.hasPermission( "mockPerm3" ) );
+ assertFalse( p.hasPermission( "mockPerm4" ) );
+ assertEquals( 1, p.getRoles().size() );
+ assertTrue( p.getRoles().contains( "mockRole3" ) );
+ }
+
+ public void testProfile4()
+ {
+ Profile p = store.getProfile( "mockProfile4" );
+ assertEquals( 7, p.getEffectivePermissions().size() );
+ assertTrue( p.hasPermission( "mockPerm0" ) );
+ assertFalse( p.hasPermission( "mockPerm1" ) );
+ assertTrue( p.hasPermission( "mockPerm2" ) );
+ assertTrue( p.hasPermission( "mockPerm3" ) );
+ assertTrue( p.hasPermission( "mockPerm4" ) );
+ assertTrue( p.hasPermission( "mockPerm5" ) );
+ assertTrue( p.hasPermission( "mockPerm6" ) );
+ assertFalse( p.hasPermission( "mockPerm7" ) );
+ assertFalse( p.hasPermission( "mockPerm8" ) );
+ assertTrue( p.hasPermission( "mockPerm9" ) );
+
+ assertFalse( p.hasPermission( "mockPerm14" ) );
+ assertEquals( 2, p.getRoles().size() );
+ assertTrue( p.getRoles().contains( "mockRole3" ) );
+ assertTrue( p.getRoles().contains( "mockRole4" ) );
+ }
+}