You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by aj...@apache.org on 2008/02/13 07:24:06 UTC
svn commit: r627271 [5/8] - in
/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki:
./ action/ attachment/ auth/ auth/acl/ auth/authorize/ auth/login/
auth/permissions/ auth/user/ dav/ diff/ filters/ htmltowiki/ parser/
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/acl/DefaultAclManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/acl/DefaultAclManagerTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/acl/DefaultAclManagerTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/acl/DefaultAclManagerTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,189 @@
+package com.ecyrd.jspwiki.auth.acl;
+
+import java.security.Principal;
+import java.util.Properties;
+import java.util.regex.Matcher;
+
+import org.apache.commons.lang.ArrayUtils;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import com.ecyrd.jspwiki.TestEngine;
+import com.ecyrd.jspwiki.WikiPage;
+import com.ecyrd.jspwiki.auth.WikiPrincipal;
+import com.ecyrd.jspwiki.auth.permissions.PermissionFactory;
+import com.ecyrd.jspwiki.providers.ProviderException;
+
+public class DefaultAclManagerTest
+ extends TestCase
+{
+ TestEngine m_engine;
+
+ public DefaultAclManagerTest( String s )
+ {
+ super( s );
+ }
+
+ public void setUp()
+ throws Exception
+ {
+ Properties props = new Properties();
+ props.load( TestEngine.findTestProperties() );
+ m_engine = new TestEngine(props);
+
+ String text = "Foo";
+ m_engine.saveText( "TestDefaultPage", text );
+
+ text = "Bar. [{ALLOW edit Charlie, Herman}] ";
+ m_engine.saveText( "TestAclPage", text );
+ }
+
+ public void tearDown()
+ {
+ try
+ {
+ m_engine.deletePage( "TestDefaultPage" );
+ m_engine.deletePage( "TestAclPage" );
+ }
+ catch ( ProviderException e )
+ {
+ }
+ }
+
+ public void testGetPermissions()
+ {
+ WikiPage page = m_engine.getPage( "TestDefaultPage" );
+ Acl acl = m_engine.getAclManager().getPermissions( page );
+ assertNotNull( page.getAcl() );
+ assertTrue(page.getAcl().isEmpty());
+
+ page = m_engine.getPage( "TestAclPage" );
+ acl = m_engine.getAclManager().getPermissions( page );
+ assertNotNull( page.getAcl() );
+ assertFalse(page.getAcl().isEmpty());
+
+ Principal[] p;
+
+ // Charlie is an editor; reading is therefore implied
+ p = acl.findPrincipals( PermissionFactory.getPagePermission(page, "view") );
+ assertEquals( 2, p.length );
+ assertTrue( ArrayUtils.contains( p, new WikiPrincipal("Charlie") ) );
+
+ // Charlie should be in the ACL as an editor
+ p = acl.findPrincipals( PermissionFactory.getPagePermission(page, "edit") );
+ assertEquals( 2, p.length );
+ assertTrue( ArrayUtils.contains( p, new WikiPrincipal("Charlie") ) );
+
+ // Charlie should not be able to delete this page
+ p = acl.findPrincipals( PermissionFactory.getPagePermission(page, "delete") );
+ assertEquals( 0, p.length );
+
+ // Herman is an unregistered user and editor; reading is implied
+ p = acl.findPrincipals( PermissionFactory.getPagePermission(page, "view") );
+ assertEquals( 2, p.length );
+ assertTrue( ArrayUtils.contains( p, new UnresolvedPrincipal("Herman") ) );
+
+ // Herman should be in the ACL as an editor
+ p = acl.findPrincipals( PermissionFactory.getPagePermission(page, "edit") );
+ assertEquals( 2, p.length );
+ assertTrue( ArrayUtils.contains( p, new UnresolvedPrincipal("Herman") ) );
+
+ // Herman should not be able to delete this page
+ p = acl.findPrincipals( PermissionFactory.getPagePermission(page, "delete") );
+ assertEquals( 0, p.length );
+ }
+
+ public void testAclRegex()
+ {
+ String acl;
+ Matcher m;
+
+ acl = "[{ALLOW view Bob, Alice, Betty}] Test text.";
+ m = DefaultAclManager.ACL_PATTERN.matcher( acl );
+ assertTrue ( m.find() );
+ assertEquals( 2, m.groupCount() );
+ assertEquals( "[{ALLOW view Bob, Alice, Betty}]", m.group(0) );
+ assertEquals( "view", m.group(1) );
+ assertEquals( "Bob, Alice, Betty", m.group(2) );
+ assertFalse( m.find() );
+
+ acl = "[{ALLOW view Alice}] Test text.";
+ m = DefaultAclManager.ACL_PATTERN.matcher( acl );
+ assertTrue ( m.find() );
+ System.out.println( m.group() );
+ assertEquals( 2, m.groupCount() );
+ assertEquals( "[{ALLOW view Alice}]", m.group(0) );
+ assertEquals( "view", m.group(1) );
+ assertEquals( "Alice", m.group(2) );
+ assertFalse( m.find() );
+
+ acl = "Test text [{ ALLOW view Alice }] Test text.";
+ m = DefaultAclManager.ACL_PATTERN.matcher( acl );
+ assertTrue ( m.find() );
+ System.out.println( m.group() );
+ assertEquals( 2, m.groupCount() );
+ assertEquals( "[{ ALLOW view Alice }]", m.group(0) );
+ assertEquals( "view", m.group(1) );
+ assertEquals( "Alice", m.group(2) );
+ assertFalse( m.find() );
+
+ acl = "Test text [{ ALLOW view Alice , Bob }] Test text.";
+ m = DefaultAclManager.ACL_PATTERN.matcher( acl );
+ assertTrue ( m.find() );
+ System.out.println( m.group() );
+ assertEquals( 2, m.groupCount() );
+ assertEquals( "[{ ALLOW view Alice , Bob }]", m.group(0) );
+ assertEquals( "view", m.group(1) );
+ assertEquals( "Alice , Bob", m.group(2) );
+ assertFalse( m.find() );
+
+ acl = "Test text [{ ALLOW view Alice , Bob }] Test text [{ALLOW edit Betty}].";
+ m = DefaultAclManager.ACL_PATTERN.matcher( acl );
+ assertTrue ( m.find() );
+ System.out.println( m.group() );
+ assertEquals( 2, m.groupCount() );
+ assertEquals( "[{ ALLOW view Alice , Bob }]", m.group(0) );
+ assertEquals( "view", m.group(1) );
+ assertEquals( "Alice , Bob", m.group(2) );
+ assertTrue ( m.find() );
+ assertEquals( 2, m.groupCount() );
+ assertEquals( "[{ALLOW edit Betty}]", m.group(0) );
+ assertEquals( "edit", m.group(1) );
+ assertEquals( "Betty", m.group(2) );
+ assertFalse( m.find() );
+ }
+
+ public void testPrintAcl()
+ {
+ // Verify that the printed Acl for the test page is OK
+ WikiPage page = m_engine.getPage( "TestAclPage" );
+ Acl acl = m_engine.getAclManager().getPermissions( page );
+ String aclString = DefaultAclManager.printAcl( acl );
+ assertEquals( "[{ALLOW edit Charlie,Herman}]\n", aclString );
+
+ // Create an ACL from scratch
+ acl = new AclImpl();
+ AclEntry entry = new AclEntryImpl();
+ entry.setPrincipal( new WikiPrincipal( "Charlie" ) );
+ entry.addPermission( PermissionFactory.getPagePermission( "Main:Foo", "view" ) );
+ entry.addPermission( PermissionFactory.getPagePermission( "Main:Foo", "edit" ) );
+ acl.addEntry( entry );
+ entry = new AclEntryImpl();
+ entry.setPrincipal( new WikiPrincipal( "Devin" ) );
+ entry.addPermission( PermissionFactory.getPagePermission( "Main:Foo", "edit" ) );
+ entry.addPermission( PermissionFactory.getPagePermission( "Main:Foo", "delete" ) );
+ acl.addEntry( entry );
+
+ // Verify that the printed ACL is OK
+ String expectedValue = "[{ALLOW delete Devin}]\n[{ALLOW edit Charlie,Devin}]\n[{ALLOW view Charlie}]\n";
+ assertEquals( expectedValue, DefaultAclManager.printAcl( acl ) );
+ }
+
+ public static Test suite()
+ {
+ return new TestSuite( DefaultAclManagerTest.class );
+ }
+
+}
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/AllTests.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/AllTests.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/AllTests.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/AllTests.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,26 @@
+package com.ecyrd.jspwiki.auth.authorize;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Andrew R. Jaquith
+ */
+public class AllTests extends TestCase
+{
+ public AllTests( String s )
+ {
+ super( s );
+ }
+
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite( "Authorizer, group and group database tests" );
+ suite.addTestSuite( GroupTest.class );
+ suite.addTestSuite( WebContainerAuthorizerTest.class );
+ suite.addTestSuite( JDBCGroupDatabaseTest.class );
+ suite.addTestSuite( XMLGroupDatabaseTest.class );
+ return suite;
+ }
+}
\ No newline at end of file
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/GroupTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/GroupTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/GroupTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/GroupTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,161 @@
+package com.ecyrd.jspwiki.auth.authorize;
+
+import java.security.Principal;
+import java.util.Properties;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import com.ecyrd.jspwiki.TestEngine;
+import com.ecyrd.jspwiki.WikiEngine;
+import com.ecyrd.jspwiki.auth.WikiPrincipal;
+
+public class GroupTest extends TestCase
+{
+ Group m_group;
+ String m_wiki;
+
+ public GroupTest( String s )
+ {
+ super( s );
+ }
+
+ public void setUp() throws Exception
+ {
+ Properties props = new Properties();
+ props.load( TestEngine.findTestProperties() );
+ WikiEngine engine = new TestEngine( props );
+ m_wiki = engine.getApplicationName();
+
+ m_group = new Group( "TestGroup", m_wiki );
+ }
+
+ public void testAdd1()
+ {
+ Principal u1 = new WikiPrincipal( "Alice" );
+ m_group.add( u1 );
+ assertTrue( m_group.isMember( u1 ) );
+ }
+
+ public void testAdd2()
+ {
+ Principal u1 = new WikiPrincipal( "Alice" );
+ Principal u2 = new WikiPrincipal( "Bob" );
+
+ assertTrue( "adding alice", m_group.add( u1 ) );
+
+ assertTrue( "adding bob", m_group.add( u2 ) );
+
+ assertTrue( "Alice", m_group.isMember( u1 ) );
+ assertTrue( "Bob", m_group.isMember( u2 ) );
+ }
+
+ /**
+ * Check that different objects match as well.
+ */
+ public void testAdd3()
+ {
+ Principal u1 = new WikiPrincipal( "Alice" );
+ Principal u2 = new WikiPrincipal( "Bob" );
+ Principal u3 = new WikiPrincipal( "Bob" );
+
+ assertTrue( "adding alice", m_group.add( u1 ) );
+ assertTrue( "adding bob", m_group.add( u2 ) );
+
+ assertTrue( "Alice", m_group.isMember( u1 ) );
+ assertTrue( "Bob", m_group.isMember( u3 ) );
+ }
+
+ public void testRemove()
+ {
+ Principal u1 = new WikiPrincipal( "Alice" );
+ Principal u2 = new WikiPrincipal( "Bob" );
+ Principal u3 = new WikiPrincipal( "Bob" );
+
+ m_group.add( u1 );
+ m_group.add( u2 );
+
+ m_group.remove( u3 );
+
+ assertTrue( "Alice", m_group.isMember( u1 ) );
+ assertFalse( "Bob", m_group.isMember( u2 ) );
+ assertFalse( "Bob 2", m_group.isMember( u3 ) );
+ }
+
+ public void testEquals1()
+ {
+ Principal u1 = new WikiPrincipal( "Alice" );
+ Principal u2 = new WikiPrincipal( "Bob" );
+
+ m_group.add( u1 );
+ m_group.add( u2 );
+
+ Group group2 = new Group( "TestGroup", m_wiki );
+ Principal u3 = new WikiPrincipal( "Alice" );
+ Principal u4 = new WikiPrincipal( "Bob" );
+
+ group2.add( u3 );
+ group2.add( u4 );
+
+ assertTrue( m_group.equals( group2 ) );
+ }
+
+ public void testEquals2()
+ {
+ Principal u1 = new WikiPrincipal( "Alice" );
+ Principal u2 = new WikiPrincipal( "Bob" );
+
+ m_group.add( u1 );
+ m_group.add( u2 );
+
+ Group group2 = new Group( "Group2", m_wiki );
+ Principal u3 = new WikiPrincipal( "Alice" );
+ Principal u4 = new WikiPrincipal( "Charlie" );
+
+ group2.add( u3 );
+ group2.add( u4 );
+
+ assertFalse( m_group.equals( group2 ) );
+ }
+
+ public void testEquals3()
+ {
+ Group group1 = new Group( "Blib", m_wiki );
+ Principal u1 = new WikiPrincipal( "Alice" );
+ Principal u2 = new WikiPrincipal( "Bob" );
+ group1.add( u1 );
+ group1.add( u2 );
+
+ Group group2 = new Group( "Blib", m_wiki );
+ Principal u3 = new WikiPrincipal( "Alice" );
+ Principal u4 = new WikiPrincipal( "Bob" );
+ group2.add( u3 );
+ group2.add( u4 );
+
+ assertTrue( group1.equals( group2 ) );
+ }
+
+ public void testEquals4()
+ {
+ Group group1 = new Group( "BlibBlab", m_wiki );
+ Principal u1 = new WikiPrincipal( "Alice" );
+ Principal u2 = new WikiPrincipal( "Bob" );
+ group1.add( u1 );
+ group1.add( u2 );
+
+ Group group2 = new Group( "Blib", m_wiki );
+ Principal u3 = new WikiPrincipal( "Alice" );
+ Principal u4 = new WikiPrincipal( "Bob" );
+ group2.add( u3 );
+ group2.add( u4 );
+
+ assertFalse( m_group.equals( group2 ) );
+ }
+
+ public static Test suite()
+ {
+ return new TestSuite( GroupTest.class );
+ }
+
+}
\ No newline at end of file
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/JDBCGroupDatabaseTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/JDBCGroupDatabaseTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/JDBCGroupDatabaseTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/JDBCGroupDatabaseTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,241 @@
+package com.ecyrd.jspwiki.auth.authorize;
+
+import java.io.File;
+import java.security.Principal;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Properties;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.sql.DataSource;
+
+import junit.framework.TestCase;
+
+import com.ecyrd.jspwiki.*;
+import com.ecyrd.jspwiki.auth.NoSuchPrincipalException;
+import com.ecyrd.jspwiki.auth.WikiPrincipal;
+import com.ecyrd.jspwiki.auth.WikiSecurityException;
+
+/**
+ * @author Andrew Jaquith
+ */
+public class JDBCGroupDatabaseTest extends TestCase
+{
+ private Connection m_conn = null;
+
+ private JDBCGroupDatabase m_db = null;
+
+ private String m_wiki;
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ Properties props = new Properties();
+ props.load( TestEngine.findTestProperties() );
+ WikiEngine engine = new TestEngine( props );
+ m_wiki = engine.getApplicationName();
+
+ // Set up the mock JNDI initial context
+ TestJNDIContext.initialize();
+ Context initCtx = new InitialContext();
+ initCtx.bind( "java:comp/env", new TestJNDIContext() );
+ Context ctx = (Context) initCtx.lookup( "java:comp/env" );
+ DataSource ds = new TestJDBCDataSource( new File( "build.properties" ) );
+ ctx.bind( JDBCGroupDatabase.DEFAULT_GROUPDB_DATASOURCE, ds );
+
+ // Get the JDBC connection and init tables
+
+ try
+ {
+ m_conn = ds.getConnection();
+ }
+ catch( SQLException e )
+ {
+ System.err.println("Looks like your database could not be connected to - "+
+ "please make sure that you have started your database "+
+ "(e.g. by running ant hsql-start)");
+
+ throw (SQLException) e.fillInStackTrace();
+ }
+
+ // Initialize the user database
+ m_db = new JDBCGroupDatabase();
+ m_db.initialize( engine, new Properties() );
+ }
+
+ public void tearDown() throws Exception
+ {
+ if ( m_conn != null )
+ {
+ m_conn.close();
+ }
+ }
+
+ public void testDelete() throws WikiException
+ {
+ // First, count the number of groups in the db now.
+ int oldUserCount = m_db.groups().length;
+
+ // Create a new group with random name
+ String name = "TestGroup" + String.valueOf( System.currentTimeMillis() );
+ Group group = new Group( name, m_wiki );
+ Principal al = new WikiPrincipal( "Al" );
+ Principal bob = new WikiPrincipal( "Bob" );
+ group.add( al );
+ group.add( bob );
+ m_db.save(group, new WikiPrincipal( "Tester") );
+
+ // Make sure the profile saved successfully
+ group = backendGroup( name );
+ assertEquals( name, group.getName() );
+ assertEquals( oldUserCount+1, m_db.groups().length );
+
+ // Now delete the profile; should be back to old count
+ m_db.delete( group );
+ assertEquals( oldUserCount, m_db.groups().length );
+ }
+
+ public void testGroups() throws WikiSecurityException
+ {
+ // Test file has 4 groups in it: TV, Literature, Art, and Admin
+ Group[] groups = m_db.groups();
+ assertEquals( 4, groups.length );
+
+ Group group;
+
+ // Group TV has 3 members
+ group = backendGroup( "TV" );
+ assertEquals("TV", group.getName() );
+ assertEquals( 3, group.getMembers().size() );
+
+ // Group Literature has 2 members
+ group = backendGroup( "Literature" );
+ assertEquals("Literature", group.getName() );
+ assertEquals( 2, group.getMembers().size() );
+
+ // Group Art has no members
+ group = backendGroup( "Art" );
+ assertEquals("Art", group.getName() );
+ assertEquals( 0, group.getMembers().size() );
+
+ // Group Admin has 1 member (Administrator)
+ group = backendGroup( "Admin" );
+ assertEquals("Admin", group.getName() );
+ assertEquals( 1, group.getMembers().size() );
+ assertEquals( "Administrator", group.getMembers().get(0).getName() );
+
+ // Group Archaeology doesn't exist
+ try
+ {
+ group = backendGroup( "Archaeology" );
+ // We should never get here
+ assertTrue(false);
+ }
+ catch (NoSuchPrincipalException e)
+ {
+ assertTrue(true);
+ }
+ }
+
+ public void testSave() throws Exception
+ {
+ // Create a new group with random name
+ String name = "TestGroup" + String.valueOf( System.currentTimeMillis() );
+ Group group = new Group( name, m_wiki );
+ Principal al = new WikiPrincipal( "Al" );
+ Principal bob = new WikiPrincipal( "Bob" );
+ Principal cookie = new WikiPrincipal( "Cookie" );
+ group.add( al );
+ group.add( bob );
+ group.add( cookie );
+ m_db.save(group, new WikiPrincipal( "Tester" ) );
+
+ // Make sure the profile saved successfully
+ group = backendGroup( name );
+ assertEquals( name, group.getName() );
+ assertEquals( 3, group.getMembers().size() );
+ assertTrue( group.isMember( new WikiPrincipal( "Al" ) ) );
+ assertTrue( group.isMember( new WikiPrincipal( "Bob" ) ) );
+ assertTrue( group.isMember( new WikiPrincipal( "Cookie" ) ) );
+
+ // The back-end should have timestamped the create/modify fields
+ assertNotNull( group.getCreator() );
+ assertEquals( "Tester", group.getCreator() );
+ assertNotNull( group.getCreated() );
+ assertNotNull( group.getModifier() );
+ assertEquals( "Tester", group.getModifier() );
+ assertNotNull( group.getLastModified() );
+ assertNotSame( group.getCreated(), group.getLastModified() );
+
+ // Remove the group
+ m_db.delete( group );
+ }
+
+ public void testResave() throws Exception
+ {
+ // Create a new group with random name & 3 members
+ String name = "TestGroup" + String.valueOf( System.currentTimeMillis() );
+ Group group = new Group( name, m_wiki );
+ Principal al = new WikiPrincipal( "Al" );
+ Principal bob = new WikiPrincipal( "Bob" );
+ Principal cookie = new WikiPrincipal( "Cookie" );
+ group.add( al );
+ group.add( bob );
+ group.add( cookie );
+ m_db.save(group, new WikiPrincipal( "Tester" ) );
+
+ // Make sure the profile saved successfully
+ group = backendGroup( name );
+ assertEquals( name, group.getName() );
+
+ // Modify the members by adding the group; re-add Al while we're at it
+ Principal dave = new WikiPrincipal( "Dave" );
+ group.add( al );
+ group.add( dave );
+ m_db.save(group, new WikiPrincipal( "SecondTester" ) );
+
+ // We should see 4 members and new timestamp info
+ List<Principal> members = group.getMembers();
+ assertEquals( 4, members.size() );
+ assertNotNull( group.getCreator() );
+ assertEquals( "Tester", group.getCreator() );
+ assertNotNull( group.getCreated() );
+ assertNotNull( group.getModifier() );
+ assertEquals( "SecondTester", group.getModifier() );
+ assertNotNull( group.getLastModified() );
+
+ // Check the back-end; We should see the same thing
+ group = backendGroup( name );
+ members = group.getMembers();
+ assertEquals( 4, members.size() );
+ assertNotNull( group.getCreator() );
+ assertEquals( "Tester", group.getCreator() );
+ assertNotNull( group.getCreated() );
+ assertNotNull( group.getModifier() );
+ assertEquals( "SecondTester", group.getModifier() );
+ assertNotNull( group.getLastModified() );
+
+ // Remove the group
+ m_db.delete( group );
+ }
+
+ private Group backendGroup( String name ) throws WikiSecurityException
+ {
+ Group[] groups = m_db.groups();
+ for ( int i = 0; i < groups.length; i++ )
+ {
+ Group group = groups[i];
+ if ( group.getName().equals( name ) )
+ {
+ return group;
+ }
+ }
+ throw new NoSuchPrincipalException( "No group named " + name );
+ }
+}
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/WebContainerAuthorizerTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/WebContainerAuthorizerTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/WebContainerAuthorizerTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/WebContainerAuthorizerTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,89 @@
+package com.ecyrd.jspwiki.auth.authorize;
+
+import java.security.Principal;
+import java.util.Properties;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.apache.commons.lang.ArrayUtils;
+import org.jdom.Document;
+
+import com.ecyrd.jspwiki.TestEngine;
+import com.ecyrd.jspwiki.WikiEngine;
+
+public class WebContainerAuthorizerTest extends TestCase
+{
+ WikiEngine m_engine;
+ WebContainerAuthorizer m_authorizer;
+ Document m_webxml;
+
+ public WebContainerAuthorizerTest( String s )
+ {
+ super( s );
+ }
+
+ public void setUp() throws Exception
+ {
+ Properties props = new Properties();
+ props.load( TestEngine.findTestProperties() );
+ m_engine = new TestEngine( props );
+ m_authorizer = new WebContainerAuthorizer();
+ m_authorizer.initialize( m_engine, props );
+ m_webxml = m_authorizer.getWebXml();
+ if ( m_webxml == null )
+ {
+ throw new Exception("Could not load web.xml");
+ }
+ }
+
+ public void testConstraints() throws Exception
+ {
+ assertTrue( m_authorizer.isConstrained( "/Delete.jsp", new Role( "Admin" ) ) );
+ assertTrue( m_authorizer.isConstrained( "/Login.jsp", Role.AUTHENTICATED ) );
+ assertFalse( m_authorizer.isConstrained( "/UserPreferences.jsp", Role.AUTHENTICATED ) );
+ }
+
+ public void testGetRoles()
+ {
+ // We should find 2 roles: AUTHENTICATED plus custom role "Admin"
+ Principal[] roles = m_authorizer.getRoles();
+ assertEquals( 2, roles.length );
+ assertTrue( ArrayUtils.contains( roles, Role.AUTHENTICATED ) );
+ assertTrue( ArrayUtils.contains( roles, new Role( "Admin" ) ) );
+ }
+
+ public void testRoles() throws Exception
+ {
+ Role[] roles = m_authorizer.getRoles( m_webxml );
+ boolean found = false;
+ for ( int i = 0; i < roles.length; i++ )
+ {
+ if ( roles[i].equals( Role.AUTHENTICATED ) )
+ {
+ found = true;
+ }
+ }
+ assertTrue( "Didn't find AUTHENTICATED", found );
+ for ( int i = 0; i < roles.length; i++ )
+ {
+ if ( roles[i].equals( new Role( "Admin" ) ) )
+ {
+ found = true;
+ }
+ }
+ assertTrue( "Didn't find ADMIN", found );
+ }
+
+ public void testIsContainerAuthorized()
+ {
+ assertTrue( m_authorizer.isContainerAuthorized() );
+ }
+
+ public static Test suite()
+ {
+ return new TestSuite( WebContainerAuthorizerTest.class );
+ }
+
+}
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/XMLGroupDatabaseTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/XMLGroupDatabaseTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/XMLGroupDatabaseTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/XMLGroupDatabaseTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,202 @@
+package com.ecyrd.jspwiki.auth.authorize;
+import java.security.Principal;
+import java.util.List;
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+import com.ecyrd.jspwiki.TestEngine;
+import com.ecyrd.jspwiki.WikiEngine;
+import com.ecyrd.jspwiki.WikiException;
+import com.ecyrd.jspwiki.auth.NoSuchPrincipalException;
+import com.ecyrd.jspwiki.auth.WikiPrincipal;
+import com.ecyrd.jspwiki.auth.WikiSecurityException;
+
+
+
+/**
+ * @author Andrew Jaquith
+ */
+public class XMLGroupDatabaseTest extends TestCase
+{
+
+ private XMLGroupDatabase m_db;
+
+ private String m_wiki;
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ Properties props = new Properties();
+ props.load( TestEngine.findTestProperties() );
+ WikiEngine engine = new TestEngine( props );
+ m_db = new XMLGroupDatabase();
+ m_db.initialize( engine, props );
+ m_wiki = engine.getApplicationName();
+ }
+
+ public void testDelete() throws WikiException
+ {
+ // First, count the number of groups in the db now.
+ int oldUserCount = m_db.groups().length;
+
+ // Create a new group with random name
+ String name = "TestGroup" + String.valueOf( System.currentTimeMillis() );
+ Group group = new Group( name, m_wiki );
+ Principal al = new WikiPrincipal( "Al" );
+ Principal bob = new WikiPrincipal( "Bob" );
+ group.add( al );
+ group.add( bob );
+ m_db.save(group, new WikiPrincipal( "Tester") );
+
+ // Make sure the profile saved successfully
+ group = backendGroup( name );
+ assertEquals( name, group.getName() );
+ assertEquals( oldUserCount+1, m_db.groups().length );
+
+ // Now delete the profile; should be back to old count
+ m_db.delete( group );
+ assertEquals( oldUserCount, m_db.groups().length );
+ }
+
+ public void testGroups() throws WikiSecurityException
+ {
+ // Test file has 4 groups in it: TV, Literature, Art, and Admin
+ Group[] groups = m_db.groups();
+ assertEquals( 4, groups.length );
+
+ Group group;
+
+ // Group TV has 3 members
+ group = backendGroup( "TV" );
+ assertEquals("TV", group.getName() );
+ assertEquals( 3, group.getMembers().size() );
+
+ // Group Literature has 2 members
+ group = backendGroup( "Literature" );
+ assertEquals("Literature", group.getName() );
+ assertEquals( 2, group.getMembers().size() );
+
+ // Group Art has no members
+ group = backendGroup( "Art" );
+ assertEquals("Art", group.getName() );
+ assertEquals( 0, group.getMembers().size() );
+
+ // Group Admin has 1 member (Administrator)
+ group = backendGroup( "Admin" );
+ assertEquals("Admin", group.getName() );
+ assertEquals( 1, group.getMembers().size() );
+ assertEquals( "Administrator", group.getMembers().get(0).getName() );
+
+ // Group Archaeology doesn't exist
+ try
+ {
+ group = backendGroup( "Archaeology" );
+ // We should never get here
+ assertTrue(false);
+ }
+ catch (NoSuchPrincipalException e)
+ {
+ assertTrue(true);
+ }
+ }
+
+ public void testSave() throws Exception
+ {
+ // Create a new group with random name
+ String name = "TestGroup" + String.valueOf( System.currentTimeMillis() );
+ Group group = new Group( name, m_wiki );
+ Principal al = new WikiPrincipal( "Al" );
+ Principal bob = new WikiPrincipal( "Bob" );
+ Principal cookie = new WikiPrincipal( "Cookie" );
+ group.add( al );
+ group.add( bob );
+ group.add( cookie );
+ m_db.save(group, new WikiPrincipal( "Tester" ) );
+
+ // Make sure the profile saved successfully
+ group = backendGroup( name );
+ assertEquals( name, group.getName() );
+ assertEquals( 3, group.getMembers().size() );
+ assertTrue( group.isMember( new WikiPrincipal( "Al" ) ) );
+ assertTrue( group.isMember( new WikiPrincipal( "Bob" ) ) );
+ assertTrue( group.isMember( new WikiPrincipal( "Cookie" ) ) );
+
+ // The back-end should have timestamped the create/modify fields
+ assertNotNull( group.getCreator() );
+ assertEquals( "Tester", group.getCreator() );
+ assertNotNull( group.getCreated() );
+ assertNotNull( group.getModifier() );
+ assertEquals( "Tester", group.getModifier() );
+ assertNotNull( group.getLastModified() );
+ assertNotSame( group.getCreated(), group.getLastModified() );
+
+ // Remove the group
+ m_db.delete( group );
+ }
+
+ public void testResave() throws Exception
+ {
+ // Create a new group with random name & 3 members
+ String name = "TestGroup" + String.valueOf( System.currentTimeMillis() );
+ Group group = new Group( name, m_wiki );
+ Principal al = new WikiPrincipal( "Al" );
+ Principal bob = new WikiPrincipal( "Bob" );
+ Principal cookie = new WikiPrincipal( "Cookie" );
+ group.add( al );
+ group.add( bob );
+ group.add( cookie );
+ m_db.save(group, new WikiPrincipal( "Tester" ) );
+
+ // Make sure the profile saved successfully
+ group = backendGroup( name );
+ assertEquals( name, group.getName() );
+
+ // Modify the members by adding the group; re-add Al while we're at it
+ Principal dave = new WikiPrincipal( "Dave" );
+ group.add( al );
+ group.add( dave );
+ m_db.save(group, new WikiPrincipal( "SecondTester" ) );
+
+ // We should see 4 members and new timestamp info
+ List<Principal> members = group.getMembers();
+ assertEquals( 4, members.size() );
+ assertNotNull( group.getCreator() );
+ assertEquals( "Tester", group.getCreator() );
+ assertNotNull( group.getCreated() );
+ assertNotNull( group.getModifier() );
+ assertEquals( "SecondTester", group.getModifier() );
+ assertNotNull( group.getLastModified() );
+
+ // Check the back-end; We should see the same thing
+ group = backendGroup( name );
+ members = group.getMembers();
+ assertEquals( 4, members.size() );
+ assertNotNull( group.getCreator() );
+ assertEquals( "Tester", group.getCreator() );
+ assertNotNull( group.getCreated() );
+ assertNotNull( group.getModifier() );
+ assertEquals( "SecondTester", group.getModifier() );
+ assertNotNull( group.getLastModified() );
+
+ // Remove the group
+ m_db.delete( group );
+ }
+
+ private Group backendGroup( String name ) throws WikiSecurityException
+ {
+ Group[] groups = m_db.groups();
+ for ( int i = 0; i < groups.length; i++ )
+ {
+ Group group = groups[i];
+ if ( group.getName().equals( name ) )
+ {
+ return group;
+ }
+ }
+ throw new NoSuchPrincipalException( "No group named " + name );
+ }
+}
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/AllTests.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/AllTests.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/AllTests.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/AllTests.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,26 @@
+package com.ecyrd.jspwiki.auth.login;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Andrew R. Jaquith
+ */
+public class AllTests extends TestCase
+{
+ public AllTests( String s )
+ {
+ super( s );
+ }
+
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite( "Login module tests" );
+ suite.addTestSuite( AnonymousLoginModuleTest.class );
+ suite.addTestSuite( CookieAssertionLoginModuleTest.class );
+ suite.addTestSuite( UserDatabaseLoginModuleTest.class );
+ suite.addTestSuite( WebContainerLoginModuleTest.class );
+ return suite;
+ }
+}
\ No newline at end of file
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/AnonymousLoginModuleTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/AnonymousLoginModuleTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/AnonymousLoginModuleTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/AnonymousLoginModuleTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,106 @@
+package com.ecyrd.jspwiki.auth.login;
+
+import java.util.Properties;
+import java.util.Set;
+
+import javax.security.auth.Subject;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
+
+import junit.framework.TestCase;
+import net.sourceforge.stripes.mock.MockHttpServletRequest;
+
+import com.ecyrd.jspwiki.NoRequiredPropertyException;
+import com.ecyrd.jspwiki.TestAuthorizer;
+import com.ecyrd.jspwiki.TestEngine;
+import com.ecyrd.jspwiki.action.ViewActionBean;
+import com.ecyrd.jspwiki.auth.Authorizer;
+import com.ecyrd.jspwiki.auth.WikiPrincipal;
+import com.ecyrd.jspwiki.auth.authorize.Role;
+import com.ecyrd.jspwiki.auth.user.UserDatabase;
+import com.ecyrd.jspwiki.auth.user.XMLUserDatabase;
+
+/**
+ * @author Andrew R. Jaquith
+ */
+public class AnonymousLoginModuleTest extends TestCase
+{
+ Authorizer authorizer;
+
+ UserDatabase db;
+
+ Subject subject;
+
+ private TestEngine m_engine;
+
+ public final void testLogin()
+ {
+ MockHttpServletRequest request = m_engine.guestTrip( ViewActionBean.class ).getRequest();
+ try
+ {
+ // Test using IP address (AnonymousLoginModule succeeds)
+ CallbackHandler handler = new WebContainerCallbackHandler( m_engine, request, authorizer );
+ LoginContext context = new LoginContext( "JSPWiki-container", subject, handler );
+ context.login();
+ Set principals = subject.getPrincipals();
+ assertEquals( 3, principals.size() );
+ assertTrue( principals.contains( new WikiPrincipal( "127.0.0.1" ) ) );
+ assertTrue( principals.contains( Role.ANONYMOUS ) );
+ assertTrue( principals.contains( Role.ALL ) );
+ }
+ catch( LoginException e )
+ {
+ System.err.println( e.getMessage() );
+ assertTrue( false );
+ }
+ }
+
+ public final void testLogout()
+ {
+ MockHttpServletRequest request = m_engine.guestTrip( ViewActionBean.class ).getRequest();
+ try
+ {
+ CallbackHandler handler = new WebContainerCallbackHandler( m_engine, request, authorizer );
+ LoginContext context = new LoginContext( "JSPWiki-container", subject, handler );
+ context.login();
+ Set principals = subject.getPrincipals();
+ assertEquals( 3, principals.size() );
+ assertTrue( principals.contains( new WikiPrincipal( "127.0.0.1" ) ) );
+ assertTrue( principals.contains( Role.ANONYMOUS ) );
+ assertTrue( principals.contains( Role.ALL ) );
+ context.logout();
+ assertEquals( 0, principals.size() );
+ }
+ catch( LoginException e )
+ {
+ System.err.println( e.getMessage() );
+ assertTrue( false );
+ }
+ }
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ Properties props = new Properties();
+ props.load( TestEngine.findTestProperties() );
+ props.put(XMLUserDatabase.PROP_USERDATABASE, "tests/etc/userdatabase.xml");
+ m_engine = new TestEngine(props);
+ authorizer = new TestAuthorizer();
+ authorizer.initialize( m_engine, props );
+ db = new XMLUserDatabase();
+ subject = new Subject();
+ try
+ {
+ db.initialize( m_engine, props );
+ }
+ catch( NoRequiredPropertyException e )
+ {
+ System.err.println( e.getMessage() );
+ assertTrue( false );
+ }
+ }
+
+}
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/CookieAssertionLoginModuleTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/CookieAssertionLoginModuleTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/CookieAssertionLoginModuleTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/CookieAssertionLoginModuleTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,115 @@
+package com.ecyrd.jspwiki.auth.login;
+
+import java.util.Properties;
+import java.util.Set;
+
+import javax.security.auth.Subject;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
+import javax.servlet.http.Cookie;
+
+import junit.framework.TestCase;
+import net.sourceforge.stripes.mock.MockHttpServletRequest;
+
+import com.ecyrd.jspwiki.NoRequiredPropertyException;
+import com.ecyrd.jspwiki.TestAuthorizer;
+import com.ecyrd.jspwiki.TestEngine;
+import com.ecyrd.jspwiki.action.ViewActionBean;
+import com.ecyrd.jspwiki.auth.AuthenticationManager;
+import com.ecyrd.jspwiki.auth.Authorizer;
+import com.ecyrd.jspwiki.auth.WikiPrincipal;
+import com.ecyrd.jspwiki.auth.authorize.Role;
+import com.ecyrd.jspwiki.auth.user.UserDatabase;
+import com.ecyrd.jspwiki.auth.user.XMLUserDatabase;
+
+/**
+ * @author Andrew R. Jaquith
+ */
+public class CookieAssertionLoginModuleTest extends TestCase
+{
+ Authorizer authorizer;
+
+ UserDatabase db;
+
+ Subject subject;
+
+ private TestEngine m_engine;
+
+ public final void testLogin()
+ {
+ MockHttpServletRequest request = m_engine.guestTrip( ViewActionBean.class ).getRequest();
+ try
+ {
+ // We can use cookies right?
+ assertTrue( AuthenticationManager.allowsCookieAssertions() );
+
+ // Test using Cookie and IP address (AnonymousLoginModule succeeds)
+ Cookie cookie = new Cookie( CookieAssertionLoginModule.PREFS_COOKIE_NAME, "Bullwinkle" );
+ request.setCookies( new Cookie[]
+ { cookie } );
+ subject = new Subject();
+ CallbackHandler handler = new WebContainerCallbackHandler( m_engine, request, authorizer );
+ LoginContext context = new LoginContext( "JSPWiki-container", subject, handler );
+ context.login();
+ Set principals = subject.getPrincipals();
+ assertEquals( 3, principals.size() );
+ assertTrue( principals.contains( new WikiPrincipal( "Bullwinkle" ) ) );
+ assertTrue( principals.contains( Role.ASSERTED ) );
+ assertTrue( principals.contains( Role.ALL ) );
+ }
+ catch( LoginException e )
+ {
+ System.err.println( e.getMessage() );
+ assertTrue( false );
+ }
+ }
+
+ public final void testLogout()
+ {
+ MockHttpServletRequest request = m_engine.guestTrip( ViewActionBean.class ).getRequest();
+ try
+ {
+ CallbackHandler handler = new WebContainerCallbackHandler( m_engine, request, authorizer );
+ LoginContext context = new LoginContext( "JSPWiki-container", subject, handler );
+ context.login();
+ Set principals = subject.getPrincipals();
+ assertEquals( 3, principals.size() );
+ assertTrue( principals.contains( new WikiPrincipal( "127.0.0.1" ) ) ); // Stripes mock requests always return this
+ assertTrue( principals.contains( Role.ANONYMOUS ) );
+ assertTrue( principals.contains( Role.ALL ) );
+ context.logout();
+ assertEquals( 0, principals.size() );
+ }
+ catch( LoginException e )
+ {
+ System.err.println( e.getMessage() );
+ assertTrue( false );
+ }
+ }
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ Properties props = new Properties();
+ props.load( TestEngine.findTestProperties() );
+ props.put(XMLUserDatabase.PROP_USERDATABASE, "tests/etc/userdatabase.xml");
+ m_engine = new TestEngine(props);
+ authorizer = new TestAuthorizer();
+ authorizer.initialize( m_engine, props );
+ db = new XMLUserDatabase();
+ subject = new Subject();
+ try
+ {
+ db.initialize( m_engine, props );
+ }
+ catch( NoRequiredPropertyException e )
+ {
+ System.err.println( e.getMessage() );
+ assertTrue( false );
+ }
+ }
+
+}
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/UserDatabaseLoginModuleTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/UserDatabaseLoginModuleTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/UserDatabaseLoginModuleTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/UserDatabaseLoginModuleTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,106 @@
+package com.ecyrd.jspwiki.auth.login;
+
+import java.util.Properties;
+import java.util.Set;
+
+import javax.security.auth.Subject;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
+
+import junit.framework.TestCase;
+
+import com.ecyrd.jspwiki.NoRequiredPropertyException;
+import com.ecyrd.jspwiki.TestEngine;
+import com.ecyrd.jspwiki.WikiEngine;
+import com.ecyrd.jspwiki.auth.WikiPrincipal;
+import com.ecyrd.jspwiki.auth.authorize.Role;
+import com.ecyrd.jspwiki.auth.user.UserDatabase;
+import com.ecyrd.jspwiki.auth.user.XMLUserDatabase;
+
+/**
+ * @author Andrew R. Jaquith
+ */
+public class UserDatabaseLoginModuleTest extends TestCase
+{
+ UserDatabase db;
+
+ Subject subject;
+
+ public final void testLogin()
+ {
+ try
+ {
+ // Log in with a user that isn't in the database
+ CallbackHandler handler = new WikiCallbackHandler( db, "user", "password" );
+ LoginContext context = new LoginContext( "JSPWiki-custom", subject, handler );
+ context.login();
+ Set principals = subject.getPrincipals();
+ assertEquals( 3, principals.size() );
+ assertTrue( principals.contains( new PrincipalWrapper( new WikiPrincipal( "user", WikiPrincipal.LOGIN_NAME ) ) ) );
+ assertTrue( principals.contains( Role.AUTHENTICATED ) );
+ assertTrue( principals.contains( Role.ALL ) );
+
+ // Login with a user that IS in the databasse
+ subject = new Subject();
+ handler = new WikiCallbackHandler( db, "janne", "myP@5sw0rd" );
+ context = new LoginContext( "JSPWiki-custom", subject, handler );
+ context.login();
+ principals = subject.getPrincipals();
+ assertEquals( 3, principals.size() );
+ assertTrue( principals.contains( new PrincipalWrapper( new WikiPrincipal( "janne", WikiPrincipal.LOGIN_NAME ) ) ) );
+ assertTrue( principals.contains( Role.AUTHENTICATED ) );
+ assertTrue( principals.contains( Role.ALL ) );
+ }
+ catch( LoginException e )
+ {
+ System.err.println( e.getMessage() );
+ assertTrue( false );
+ }
+ }
+
+ public final void testLogout()
+ {
+ try
+ {
+ CallbackHandler handler = new WikiCallbackHandler( db, "user", "password" );
+ LoginContext context = new LoginContext( "JSPWiki-custom", subject, handler );
+ context.login();
+ Set principals = subject.getPrincipals();
+ assertEquals( 3, principals.size() );
+ assertTrue( principals.contains( new PrincipalWrapper( new WikiPrincipal( "user", WikiPrincipal.LOGIN_NAME ) ) ) );
+ assertTrue( principals.contains( Role.AUTHENTICATED ) );
+ assertTrue( principals.contains( Role.ALL ) );
+ context.logout();
+ assertEquals( 0, principals.size() );
+ }
+ catch( LoginException e )
+ {
+ System.err.println( e.getMessage() );
+ assertTrue( false );
+ }
+ }
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ Properties props = new Properties();
+ props.load( TestEngine.findTestProperties() );
+ props.put(XMLUserDatabase.PROP_USERDATABASE, "tests/etc/userdatabase.xml");
+ WikiEngine m_engine = new TestEngine(props);
+ db = new XMLUserDatabase();
+ subject = new Subject();
+ try
+ {
+ db.initialize( m_engine, props );
+ }
+ catch( NoRequiredPropertyException e )
+ {
+ System.err.println( e.getMessage() );
+ assertTrue( false );
+ }
+ }
+
+}
\ No newline at end of file
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/WebContainerLoginModuleTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/WebContainerLoginModuleTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/WebContainerLoginModuleTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/login/WebContainerLoginModuleTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,172 @@
+package com.ecyrd.jspwiki.auth.login;
+
+import java.security.Principal;
+import java.util.HashSet;
+import java.util.Properties;
+import java.util.Set;
+
+import javax.security.auth.Subject;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
+
+import junit.framework.TestCase;
+import net.sourceforge.stripes.mock.MockHttpServletRequest;
+
+import com.ecyrd.jspwiki.NoRequiredPropertyException;
+import com.ecyrd.jspwiki.TestAuthorizer;
+import com.ecyrd.jspwiki.TestEngine;
+import com.ecyrd.jspwiki.action.ViewActionBean;
+import com.ecyrd.jspwiki.auth.Authorizer;
+import com.ecyrd.jspwiki.auth.WikiPrincipal;
+import com.ecyrd.jspwiki.auth.authorize.Role;
+import com.ecyrd.jspwiki.auth.user.UserDatabase;
+import com.ecyrd.jspwiki.auth.user.XMLUserDatabase;
+
+/**
+ * @author Andrew R. Jaquith
+ */
+public class WebContainerLoginModuleTest extends TestCase
+{
+ Authorizer authorizer;
+
+ UserDatabase db;
+
+ Subject subject;
+
+ private TestEngine m_engine;
+
+ public final void testLogin()
+ {
+ Principal principal = new WikiPrincipal( "Andrew Jaquith" );
+ Principal wrapper = new PrincipalWrapper( principal );
+ MockHttpServletRequest request = m_engine.guestTrip( ViewActionBean.class ).getRequest();
+ request.setUserPrincipal( principal );
+ try
+ {
+ // Test using Principal (WebContainerLoginModule succeeds)
+ CallbackHandler handler = new WebContainerCallbackHandler( m_engine, request, authorizer );
+ LoginContext context = new LoginContext( "JSPWiki-container", subject, handler );
+ context.login();
+ Set principals = subject.getPrincipals();
+ assertEquals( 3, principals.size() );
+ assertTrue( principals.contains( wrapper ) );
+ assertFalse( principals.contains( Role.ANONYMOUS ) );
+ assertFalse( principals.contains( Role.ASSERTED ) );
+ assertTrue( principals.contains( Role.AUTHENTICATED ) );
+ assertTrue( principals.contains( Role.ALL ) );
+
+ // Test using remote user (WebContainerLoginModule succeeds)
+ subject = new Subject();
+ request = m_engine.guestTrip( ViewActionBean.class ).getRequest();
+ request.setUserPrincipal( new WikiPrincipal( "Andrew Jaquith" ) );
+ handler = new WebContainerCallbackHandler( m_engine, request, authorizer );
+ context = new LoginContext( "JSPWiki-container", subject, handler );
+ context.login();
+ principals = subject.getPrincipals();
+ assertEquals( 3, principals.size() );
+ assertTrue( principals.contains( wrapper ) );
+ assertFalse( principals.contains( Role.ANONYMOUS ) );
+ assertFalse( principals.contains( Role.ASSERTED ) );
+ assertTrue( principals.contains( Role.AUTHENTICATED ) );
+ assertTrue( principals.contains( Role.ALL ) );
+
+ // Test using IP address (AnonymousLoginModule succeeds)
+ subject = new Subject();
+ request = m_engine.guestTrip( ViewActionBean.class ).getRequest();
+ handler = new WebContainerCallbackHandler( m_engine, request, authorizer );
+ context = new LoginContext( "JSPWiki-container", subject, handler );
+ context.login();
+ principals = subject.getPrincipals();
+ assertEquals( 3, principals.size() );
+ assertFalse( principals.contains( principal ) );
+ assertTrue( principals.contains( Role.ANONYMOUS ) );
+ assertFalse( principals.contains( Role.ASSERTED ) );
+ assertFalse( principals.contains( Role.AUTHENTICATED ) );
+ assertTrue( principals.contains( Role.ALL ) );
+ }
+ catch( LoginException e )
+ {
+ System.err.println( e.getMessage() );
+ assertTrue( false );
+ }
+ }
+
+ public final void testLoginWithRoles() throws Exception
+ {
+ // Create user with 2 container roles; TestAuthorizer knows about these
+ Principal principal = new WikiPrincipal( "Andrew Jaquith" );
+ Principal wrapper = new PrincipalWrapper( principal );
+ MockHttpServletRequest request = m_engine.guestTrip( ViewActionBean.class ).getRequest();
+ request.setUserPrincipal( principal );
+ Set<String> roles = new HashSet<String>();
+ roles.add( "IT" );
+ roles.add( "Engineering" );
+ request.setRoles( roles );
+
+ // Test using Principal (WebContainerLoginModule succeeds)
+ CallbackHandler handler = new WebContainerCallbackHandler( m_engine, request, authorizer );
+ LoginContext context = new LoginContext( "JSPWiki-container", subject, handler );
+ context.login();
+ Set principals = subject.getPrincipals();
+ assertEquals( 5, principals.size() );
+ assertTrue( principals.contains( wrapper ) );
+ assertFalse( principals.contains( Role.ANONYMOUS ) );
+ assertFalse( principals.contains( Role.ASSERTED ) );
+ assertTrue( principals.contains( Role.AUTHENTICATED ) );
+ assertTrue( principals.contains( Role.ALL ) );
+ assertTrue( principals.contains( new Role( "IT" ) ) );
+ assertTrue( principals.contains( new Role( "Engineering" ) ) );
+ }
+
+ public final void testLogout()
+ {
+ Principal principal = new WikiPrincipal( "Andrew Jaquith" );
+ Principal wrapper = new PrincipalWrapper( principal );
+ MockHttpServletRequest request = m_engine.guestTrip( ViewActionBean.class ).getRequest();
+ request.setUserPrincipal( principal );
+ try
+ {
+ CallbackHandler handler = new WebContainerCallbackHandler( m_engine, request, authorizer );
+ LoginContext context = new LoginContext( "JSPWiki-container", subject, handler );
+ context.login();
+ Set principals = subject.getPrincipals();
+ assertEquals( 3, principals.size() );
+ assertTrue( principals.contains( wrapper ) );
+ assertTrue( principals.contains( Role.AUTHENTICATED ) );
+ assertTrue( principals.contains( Role.ALL ) );
+ context.logout();
+ assertEquals( 0, principals.size() );
+ }
+ catch( LoginException e )
+ {
+ System.err.println( e.getMessage() );
+ assertTrue( false );
+ }
+ }
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ Properties props = new Properties();
+ props.load( TestEngine.findTestProperties() );
+ props.put(XMLUserDatabase.PROP_USERDATABASE, "tests/etc/userdatabase.xml");
+ m_engine = new TestEngine(props);
+ authorizer = new TestAuthorizer();
+ authorizer.initialize( m_engine, props );
+ db = new XMLUserDatabase();
+ subject = new Subject();
+ try
+ {
+ db.initialize( m_engine, props );
+ }
+ catch( NoRequiredPropertyException e )
+ {
+ System.err.println( e.getMessage() );
+ assertTrue( false );
+ }
+ }
+
+}
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllPermissionCollectionTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllPermissionCollectionTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllPermissionCollectionTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllPermissionCollectionTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,249 @@
+package com.ecyrd.jspwiki.auth.permissions;
+
+import java.security.Permission;
+import java.util.Enumeration;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Andrew R. Jaquith
+ */
+public class AllPermissionCollectionTest extends TestCase
+{
+
+ AllPermissionCollection c_all;
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ c_all = new AllPermissionCollection();
+ }
+
+ public void testAddAllPermission()
+ {
+ AllPermission all1 = new AllPermission( "*" );
+ AllPermission all2 = new AllPermission( "JSPWiki" );
+ AllPermission all3 = new AllPermission( "myWiki" );
+ AllPermission all4 = new AllPermission( "*" );
+
+ c_all.add( all1 );
+ assertEquals( 1, count( c_all ) );
+
+ c_all.add( all2 );
+ assertEquals( 2, count( c_all ) );
+
+ c_all.add( all3 );
+ assertEquals( 3, count( c_all ) );
+
+ // The last one is a duplicate and shouldn't be counted...
+ c_all.add( all4 );
+ assertEquals( 3, count( c_all ) );
+ }
+
+ public void testAddPagePermission()
+ {
+ PagePermission p1 = new PagePermission( "JSPWiki:Main", "edit" );
+ PagePermission p2 = new PagePermission( "JSPWiki:GroupAdmin", "edit" );
+ PagePermission p3 = new PagePermission( "JSPWiki:Foobar", "delete" );
+ PagePermission p4 = new PagePermission( "JSPWiki:Main", "edit" );
+
+ c_all.add( p1 );
+ assertEquals( 1, count( c_all ) );
+
+ c_all.add( p2 );
+ assertEquals( 2, count( c_all ) );
+
+ c_all.add( p3 );
+ assertEquals( 3, count( c_all ) );
+
+ // The last one is a duplicate and shouldn't be counted...
+ c_all.add( p4 );
+ assertEquals( 3, count( c_all ) );
+ }
+
+ public void testAddWikiPermission()
+ {
+ WikiPermission p1 = new WikiPermission( "JSPWiki", "login" );
+ WikiPermission p2 = new WikiPermission( "JSPWiki", "createGroups" );
+ WikiPermission p3 = new WikiPermission( "JSPWiki", "editPreferences" );
+ WikiPermission p4 = new WikiPermission( "JSPWiki", "login" );
+
+ c_all.add( p1 );
+ assertEquals( 1, count( c_all ) );
+
+ c_all.add( p2 );
+ assertEquals( 2, count( c_all ) );
+
+ c_all.add( p3 );
+ assertEquals( 3, count( c_all ) );
+
+ // The last one is a duplicate and shouldn't be counted...
+ c_all.add( p4 );
+ assertEquals( 3, count( c_all ) );
+ }
+
+ public void testReadOnly()
+ {
+ AllPermission all1 = new AllPermission( "*" );
+ AllPermission all2 = new AllPermission( "JSPWiki" );
+
+ assertFalse( c_all.isReadOnly() );
+ c_all.add( all1 );
+ assertFalse( c_all.isReadOnly() );
+
+ // Mark as read-only; isReadOnly should return "true", as we'll get an
+ // error
+ c_all.setReadOnly();
+ assertTrue( c_all.isReadOnly() );
+ boolean exception = false;
+ try
+ {
+ c_all.add( all2 );
+ }
+ catch( SecurityException e )
+ {
+ exception = true;
+ }
+
+ if ( !exception )
+ {
+ // We should never get here
+ assertTrue( false );
+ }
+ }
+
+ public void testImpliesAllPermission()
+ {
+ AllPermission all1 = new AllPermission( "JSPWiki" );
+ AllPermission all2 = new AllPermission( "myWiki" );
+ AllPermission all3 = new AllPermission( "big*" );
+ AllPermission all4 = new AllPermission( "*" );
+
+ c_all.add( all1 );
+ assertTrue( c_all.implies( new AllPermission( "JSPWiki" ) ) );
+ assertFalse( c_all.implies( new AllPermission( "myWiki" ) ) );
+
+ c_all.add( all2 );
+ assertTrue( c_all.implies( new AllPermission( "JSPWiki" ) ) );
+ assertTrue( c_all.implies( new AllPermission( "myWiki" ) ) );
+ assertFalse( c_all.implies( new AllPermission( "bigTimeWiki" ) ) );
+
+ c_all.add( all3 );
+ assertTrue( c_all.implies( new AllPermission( "JSPWiki" ) ) );
+ assertTrue( c_all.implies( new AllPermission( "myWiki" ) ) );
+ assertTrue( c_all.implies( new AllPermission( "bigTimeWiki" ) ) );
+ assertTrue( c_all.implies( new AllPermission( "bigBigBigWiki" ) ) );
+ assertFalse( c_all.implies( new AllPermission( "bittyWiki" ) ) );
+
+ c_all.add( all4 );
+ assertTrue( c_all.implies( new AllPermission( "JSPWiki" ) ) );
+ assertTrue( c_all.implies( new AllPermission( "myWiki" ) ) );
+ assertTrue( c_all.implies( new AllPermission( "bigTimeWiki" ) ) );
+ assertTrue( c_all.implies( new AllPermission( "bigBigBigWiki" ) ) );
+ assertTrue( c_all.implies( new AllPermission( "bittyWiki" ) ) );
+ }
+
+ public void testImpliesPagePermission()
+ {
+ AllPermission all1 = new AllPermission( "JSPWiki" );
+ AllPermission all2 = new AllPermission( "*" );
+
+ c_all.add( all1 );
+ assertTrue( c_all.implies( new PagePermission( "JSPWiki:Main", "edit" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "JSPWiki:GroupAdmin", "edit" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "JSPWiki:Foobar", "delete" ) ) );
+ assertFalse( c_all.implies( new PagePermission( "myWiki:Foobar", "delete" ) ) );
+ assertFalse( c_all.implies( new PagePermission( "bigTimeWiki:*", "view" ) ) );
+
+ c_all.add( all2 );
+ assertTrue( c_all.implies( new PagePermission( "JSPWiki:Main", "edit" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "JSPWiki:GroupAdmin", "edit" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "JSPWiki:Foobar", "delete" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "myWiki:Foobar", "delete" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "bigTimeWiki:*", "view" ) ) );
+ }
+
+ public void testImpliesWikiPermission()
+ {
+ AllPermission all1 = new AllPermission( "JSPWiki" );
+ AllPermission all2 = new AllPermission( "*" );
+
+ c_all.add( all1 );
+ assertTrue( c_all.implies( new WikiPermission( "JSPWiki", "login" ) ) );
+ assertTrue( c_all.implies( new WikiPermission( "JSPWiki", "createGroups" ) ) );
+ assertTrue( c_all.implies( new WikiPermission( "JSPWiki", "editPreferences" ) ) );
+ assertFalse( c_all.implies( new WikiPermission( "myWiki", "editPreferences" ) ) );
+ assertFalse( c_all.implies( new WikiPermission( "bigTimeWiki", "login" ) ) );
+
+ c_all.add( all2 );
+ assertTrue( c_all.implies( new WikiPermission( "JSPWiki", "login" ) ) );
+ assertTrue( c_all.implies( new WikiPermission( "JSPWiki", "createGroups" ) ) );
+ assertTrue( c_all.implies( new WikiPermission( "JSPWiki", "editPreferences" ) ) );
+ assertTrue( c_all.implies( new WikiPermission( "myWiki", "editPreferences" ) ) );
+ assertTrue( c_all.implies( new WikiPermission( "bigTimeWiki", "login" ) ) );
+ }
+
+ public void testImpliesMixedPermissions()
+ {
+ Permission p1 = new AllPermission( "JSPWiki" );
+ Permission p2 = new WikiPermission( "myWiki", "editPreferences" );
+ Permission p3 = new PagePermission( "bigTimeWiki:FooBar", "modify" );
+ Permission p4 = new AllPermission( "*" );
+
+ c_all.add( p1 );
+ assertTrue( c_all.implies( new WikiPermission( "JSPWiki", "login" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "JSPWiki:FooBar", "edit" ) ) );
+ assertFalse( c_all.implies( new WikiPermission( "myWiki", "editPreferences" ) ) );
+ assertFalse( c_all.implies( new WikiPermission( "myWiki", "login" ) ) );
+ assertFalse( c_all.implies( new WikiPermission( "bigTimeWiki", "login" ) ) );
+ assertFalse( c_all.implies( new PagePermission( "bigTimeWiki:FooBar", "edit" ) ) );
+ assertFalse( c_all.implies( new PagePermission( "bigTimeWiki:FooBar", "delete" ) ) );
+ assertFalse( c_all.implies( new PagePermission( "bigTimeWiki:Bar", "delete" ) ) );
+
+ c_all.add( p2 );
+ assertTrue( c_all.implies( new WikiPermission( "JSPWiki", "login" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "JSPWiki:FooBar", "edit" ) ) );
+ assertTrue( c_all.implies( new WikiPermission( "myWiki", "editPreferences" ) ) );
+ assertFalse( c_all.implies( new WikiPermission( "myWiki", "login" ) ) );
+ assertFalse( c_all.implies( new WikiPermission( "bigTimeWiki", "login" ) ) );
+ assertFalse( c_all.implies( new PagePermission( "bigTimeWiki:FooBar", "edit" ) ) );
+ assertFalse( c_all.implies( new PagePermission( "bigTimeWiki:FooBar", "delete" ) ) );
+ assertFalse( c_all.implies( new PagePermission( "bigTimeWiki:Bar", "delete" ) ) );
+
+ c_all.add( p3 );
+ assertTrue( c_all.implies( new WikiPermission( "JSPWiki", "login" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "JSPWiki:FooBar", "edit" ) ) );
+ assertTrue( c_all.implies( new WikiPermission( "myWiki", "editPreferences" ) ) );
+ assertFalse( c_all.implies( new WikiPermission( "myWiki", "login" ) ) );
+ assertFalse( c_all.implies( new WikiPermission( "bigTimeWiki", "login" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "bigTimeWiki:FooBar", "edit" ) ) );
+ assertFalse( c_all.implies( new PagePermission( "bigTimeWiki:FooBar", "delete" ) ) );
+ assertFalse( c_all.implies( new PagePermission( "bigTimeWiki:Bar", "delete" ) ) );
+
+ c_all.add( p4 );
+ assertTrue( c_all.implies( new WikiPermission( "JSPWiki", "login" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "JSPWiki:FooBar", "edit" ) ) );
+ assertTrue( c_all.implies( new WikiPermission( "myWiki", "editPreferences" ) ) );
+ assertTrue( c_all.implies( new WikiPermission( "myWiki", "login" ) ) );
+ assertTrue( c_all.implies( new WikiPermission( "bigTimeWiki", "login" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "bigTimeWiki:FooBar", "edit" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "bigTimeWiki:FooBar", "delete" ) ) );
+ assertTrue( c_all.implies( new PagePermission( "bigTimeWiki:Bar", "delete" ) ) );
+ }
+
+ private int count( AllPermissionCollection collection )
+ {
+ int i = 0;
+ Enumeration perms = collection.elements();
+ while( perms.hasMoreElements() )
+ {
+ perms.nextElement();
+ i++;
+ }
+ return i;
+ }
+
+}
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllPermissionTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllPermissionTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllPermissionTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllPermissionTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,83 @@
+package com.ecyrd.jspwiki.auth.permissions;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Andrew Jaquith
+ */
+public class AllPermissionTest extends TestCase
+{
+
+ /*
+ * Class under test for boolean equals(Object)
+ */
+ public void testEqualsObject()
+ {
+ AllPermission p1 = new AllPermission( "*" );
+ AllPermission p2 = new AllPermission( "*" );
+ AllPermission p3 = new AllPermission( "myWiki" );
+ assertTrue( p1.equals( p2 ) );
+ assertTrue( p2.equals( p1 ) );
+ assertFalse( p1.equals( p3 ) );
+ assertFalse( p3.equals( p1 ) );
+ }
+
+ public void testImpliesAllPermission()
+ {
+ AllPermission p1 = new AllPermission( "*" );
+ AllPermission p2 = new AllPermission( "*" );
+ assertTrue( p1.equals( p2 ) );
+ assertTrue( p2.equals( p1 ) );
+
+ p2 = new AllPermission( "myWiki" );
+ assertTrue( p1.implies( p2 ) );
+ assertFalse( p2.implies( p1 ) );
+ }
+
+ public void testImpliesPagePermission()
+ {
+ AllPermission p1 = new AllPermission( "*" );
+ PagePermission p2 = new PagePermission( "*:TestPage", "delete" );
+ assertTrue( p1.implies( p2 ) );
+ assertFalse( p2.implies( p1 ) );
+
+ p2 = new PagePermission( "myWiki:TestPage", "delete" );
+ assertTrue( p1.implies( p2 ) );
+ assertFalse( p2.implies( p1 ) );
+
+ p2 = new PagePermission( "*:GroupTest", "delete" );
+ assertTrue( p1.implies( p2 ) );
+ assertFalse( p2.implies( p1 ) );
+
+ p2 = new PagePermission( "myWiki:GroupTest", "delete" );
+ assertTrue( p1.implies( p2 ) );
+ assertFalse( p2.implies( p1 ) );
+ }
+
+ public void testImpliesWikiPermission()
+ {
+ AllPermission p1 = new AllPermission( "*" );
+ WikiPermission p2 = new WikiPermission( "*", "createPages" );
+ assertTrue( p1.implies( p2 ) );
+ assertFalse( p2.implies( p1 ) );
+
+ p2 = new WikiPermission( "myWiki", "createPages" );
+ assertTrue( p1.implies( p2 ) );
+ assertFalse( p2.implies( p1 ) );
+ }
+
+ /*
+ * Class under test for String toString()
+ */
+ public void testToString()
+ {
+ AllPermission p = new AllPermission( "myWiki" );
+ String result = "(\"com.ecyrd.jspwiki.auth.permissions.AllPermission\",\"myWiki\")";
+ assertEquals( result, p.toString() );
+
+ p = new AllPermission( "*" );
+ result = "(\"com.ecyrd.jspwiki.auth.permissions.AllPermission\",\"*\")";
+ assertEquals( result, p.toString() );
+ }
+
+}
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllTests.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllTests.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllTests.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllTests.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,27 @@
+package com.ecyrd.jspwiki.auth.permissions;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Andrew R. Jaquith
+ */
+public class AllTests extends TestCase
+{
+ public AllTests( String s )
+ {
+ super( s );
+ }
+
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite( "Permissions tests" );
+ suite.addTestSuite( AllPermissionTest.class );
+ suite.addTestSuite( AllPermissionCollectionTest.class );
+ suite.addTestSuite( GroupPermissionTest.class );
+ suite.addTestSuite( PagePermissionTest.class );
+ suite.addTestSuite( WikiPermissionTest.class );
+ return suite;
+ }
+}
\ No newline at end of file
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/GroupPermissionTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/GroupPermissionTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/GroupPermissionTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/GroupPermissionTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,314 @@
+package com.ecyrd.jspwiki.auth.permissions;
+
+import java.security.AccessControlException;
+import java.security.Permission;
+import java.security.PrivilegedAction;
+
+import javax.security.auth.Subject;
+
+import com.ecyrd.jspwiki.auth.GroupPrincipal;
+import com.ecyrd.jspwiki.auth.WikiPrincipal;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Andrew R. Jaquith
+ */
+public class GroupPermissionTest extends TestCase
+{
+
+ public static void main( String[] args )
+ {
+ junit.textui.TestRunner.run( GroupPermissionTest.class );
+ }
+
+ /*
+ * Class under test for boolean equals(java.lang.Object)
+ */
+ public final void testEqualsObject()
+ {
+ GroupPermission p1 = new GroupPermission( "mywiki:Test", "view,edit,delete" );
+ GroupPermission p2 = new GroupPermission( "mywiki:Test", "view,edit,delete" );
+ GroupPermission p3 = new GroupPermission( "mywiki:Test", "delete,view,edit" );
+ GroupPermission p4 = new GroupPermission( "mywiki:Test*", "delete,view,edit" );
+ assertEquals( p1, p2 );
+ assertEquals( p1, p3 );
+ assertFalse( p3.equals( p4 ) );
+ }
+
+ public final void testCreateMask()
+ {
+ assertEquals( 1, GroupPermission.createMask( "view" ) );
+ assertEquals( 7, GroupPermission.createMask( "view,edit,delete" ) );
+ assertEquals( 7, GroupPermission.createMask( "edit,delete,view" ) );
+ assertEquals( 2, GroupPermission.createMask( "edit" ) );
+ assertEquals( 6, GroupPermission.createMask( "edit,delete" ) );
+ }
+
+ /*
+ * Class under test for java.lang.String toString()
+ */
+ public final void testToString()
+ {
+ GroupPermission p;
+ p = new GroupPermission( "Test", "view,edit,delete" );
+ assertEquals( "(\"com.ecyrd.jspwiki.auth.permissions.GroupPermission\",\"*:Test\",\"delete,edit,view\")", p
+ .toString() );
+ p = new GroupPermission( "mywiki:Test", "view,edit,delete" );
+ assertEquals( "(\"com.ecyrd.jspwiki.auth.permissions.GroupPermission\",\"mywiki:Test\",\"delete,edit,view\")", p
+ .toString() );
+ }
+
+ /**
+ * Tests wiki name support.
+ */
+ public final void testWikiNames()
+ {
+ GroupPermission p1;
+ GroupPermission p2;
+
+ // Permissions without prepended wiki name should imply themselves
+ p1 = new GroupPermission( "Test", "edit" );
+ p2 = new GroupPermission( "Test", "edit" );
+ assertTrue( p1.implies( p1 ) );
+ assertTrue( p1.implies( p2 ) );
+
+ // Permissions with a wildcard wiki should imply other wikis
+ p1 = new GroupPermission( "*:Test", "edit" );
+ p2 = new GroupPermission( "mywiki:Test", "edit" );
+ assertTrue( p1.implies( p2 ) );
+ assertFalse( p2.implies( p1 ) );
+
+ // Permissions that start with ":" are just like "*:"
+ p1 = new GroupPermission( "*:Test", "edit" );
+ p2 = new GroupPermission( "Test", "edit" );
+ assertTrue( p1.implies( p1 ) );
+ assertTrue( p1.implies( p2 ) );
+ }
+
+ public final void testImpliesMember()
+ {
+ GroupPermission p1;
+ Permission p2;
+ Subject s;
+
+ // <groupmember> implies TestGroup if Subject has GroupPermission("TestGroup")
+ p1 = new GroupPermission( "*:<groupmember>", "view" );
+ p2 = new GroupPermission ("*:TestGroup", "view" );
+ s = new Subject();
+ s.getPrincipals().add( new GroupPrincipal( "TestGroup" ) );
+ assertTrue( subjectImplies( s, p1, p2 ) );
+
+ // <groupmember> doesn't imply it if Subject has no GroupPermission("TestGroup")
+ s = new Subject();
+ s.getPrincipals().add( new WikiPrincipal( "TestGroup" ) );
+ assertFalse( subjectImplies( s, p1, p2 ) );
+
+ // <groupmember> doesn't imply it if Subject's GP doesn't match
+ s = new Subject();
+ s.getPrincipals().add( new GroupPrincipal( "FooGroup" ) );
+ assertFalse( subjectImplies( s, p1, p2 ) );
+
+ // <groupmember> doesn't imply it if p2 isn't GroupPermission type
+ p2 = new PagePermission ("*:TestGroup", "view" );
+ s = new Subject();
+ s.getPrincipals().add( new GroupPrincipal( "TestGroup" ) );
+ assertFalse( subjectImplies( s, p1, p2 ) );
+
+ // <groupmember> implies TestGroup if not called with Subject combiner
+ p1 = new GroupPermission( "*:<groupmember>", "view" );
+ p2 = new GroupPermission ("*:TestGroup", "view" );
+ assertFalse( p1.impliesMember( p2 ) );
+ }
+
+
+ /*
+ * Class under test for boolean implies(java.security.Permission)
+ */
+ public final void testImpliesPermission()
+ {
+ GroupPermission p1;
+ GroupPermission p2;
+ GroupPermission p3;
+
+ // The same permission should imply itself
+ p1 = new GroupPermission( "mywiki:Test", "view,edit,delete" );
+ p2 = new GroupPermission( "mywiki:Test", "view,edit,delete" );
+ assertTrue( p1.implies( p2 ) );
+ assertTrue( p2.implies( p1 ) );
+
+ // The same permission should imply itself for wildcard wikis
+ p1 = new GroupPermission( "Test", "view,edit,delete" );
+ p2 = new GroupPermission( "*:Test", "view,edit,delete" );
+ p3 = new GroupPermission( "mywiki:Test", "view,edit,delete" );
+ assertTrue( p1.implies( p2 ) );
+ assertTrue( p2.implies( p1 ) );
+ assertTrue( p1.implies( p3 ) );
+ assertTrue( p2.implies( p3 ) );
+ assertFalse( p3.implies( p1 ) );
+ assertFalse( p3.implies( p2 ) );
+
+ // Actions on collection should imply permission for group with same
+ // actions
+ p1 = new GroupPermission( "*:*", "view,edit,delete" );
+ p2 = new GroupPermission( "*:Test", "view,edit,delete" );
+ p3 = new GroupPermission( "mywiki:Test", "view,edit,delete" );
+ assertTrue( p1.implies( p2 ) );
+ assertTrue( p1.implies( p3 ) );
+ assertTrue( p2.implies( p3 ) );
+ assertFalse( p2.implies( p1 ) );
+ assertFalse( p3.implies( p1 ) );
+
+ // Actions on single group should imply subset of those actions
+ p1 = new GroupPermission( "*:Test", "view,edit,delete" );
+ p2 = new GroupPermission( "*:Test", "view" );
+ p3 = new GroupPermission( "mywiki:Test", "view" );
+ assertTrue( p1.implies( p2 ) );
+ assertTrue( p1.implies( p3 ) );
+ assertFalse( p2.implies( p1 ) );
+ assertFalse( p3.implies( p1 ) );
+ assertFalse( p3.implies( p2 ) );
+
+ // Actions on collection should imply subset of actions on single group
+ p1 = new GroupPermission( "*:*", "view,edit,delete" );
+ p2 = new GroupPermission( "*:Test", "view" );
+ p3 = new GroupPermission( "mywiki:Test", "view" );
+ assertTrue( p1.implies( p2 ) );
+ assertTrue( p1.implies( p3 ) );
+ assertFalse( p2.implies( p1 ) );
+ assertFalse( p3.implies( p1 ) );
+
+ p1 = new GroupPermission( "*:Tes*", "view,edit,delete" );
+ p2 = new GroupPermission( "*:Test", "view" );
+ p3 = new GroupPermission( "mywiki:Test", "view" );
+ assertTrue( p1.implies( p2 ) );
+ assertTrue( p1.implies( p3 ) );
+ assertFalse( p2.implies( p1 ) );
+ assertFalse( p3.implies( p1 ) );
+
+ p1 = new GroupPermission( "*:*st", "view,edit,delete" );
+ p2 = new GroupPermission( "*:Test", "view" );
+ p3 = new GroupPermission( "mywiki:Test", "view" );
+ assertTrue( p1.implies( p2 ) );
+ assertTrue( p1.implies( p3 ) );
+ assertFalse( p2.implies( p1 ) );
+ assertFalse( p3.implies( p1 ) );
+
+ // Delete action on collection should imply edit/view on
+ // single group
+ p1 = new GroupPermission( "*:*st", "delete" );
+ p2 = new GroupPermission( "*:Test", "edit" );
+ p3 = new GroupPermission( "mywiki:Test", "edit" );
+ assertTrue( p1.implies( p2 ) );
+ assertTrue( p1.implies( p3 ) );
+ assertFalse( p2.implies( p1 ) );
+ assertFalse( p3.implies( p1 ) );
+
+ p2 = new GroupPermission( "*:Test", "view" );
+ p3 = new GroupPermission( "mywiki:Test", "view" );
+ assertTrue( p1.implies( p2 ) );
+ assertTrue( p1.implies( p3 ) );
+ assertFalse( p2.implies( p1 ) );
+ assertFalse( p3.implies( p1 ) );
+
+ // Edit action on collection should imply view on single group
+ p1 = new GroupPermission( "*:*st", "edit" );
+ p2 = new GroupPermission( "*:Test", "view" );
+ p3 = new GroupPermission( "mywiki:Test", "view" );
+ assertTrue( p1.implies( p2 ) );
+ assertTrue( p1.implies( p3 ) );
+ assertFalse( p2.implies( p1 ) );
+ assertFalse( p3.implies( p1 ) );
+
+
+ // Pre- and post- wildcards should also be fine
+ p1 = new GroupPermission( "*:Test*", "view" );
+ p2 = new GroupPermission( "*:TestGroup", "view" );
+ p3 = new GroupPermission( "mywiki:TestGroup", "view" );
+ assertTrue( p1.implies( p2 ) );
+ assertTrue( p1.implies( p3 ) );
+ assertFalse( p2.implies( p1 ) );
+ assertFalse( p3.implies( p1 ) );
+
+ p1 = new GroupPermission( "*:*Group", "view" );
+ p2 = new GroupPermission( "*:TestGroup", "view" );
+ p3 = new GroupPermission( "mywiki:TestGroup", "view" );
+ assertTrue( p1.implies( p2 ) );
+ assertTrue( p1.implies( p3 ) );
+ assertFalse( p2.implies( p1 ) );
+ assertFalse( p3.implies( p1 ) );
+
+ // Wildcards don't imply the <groupmember> target
+ p1 = new GroupPermission( "*:*", "view" );
+ p2 = new GroupPermission( "*:<groupmember>", "view" );
+ assertFalse( p1.implies( p2 ) );
+ assertFalse( p2.implies( p1 ) );
+
+ p1 = new GroupPermission( "*:*ber>", "view" );
+ assertFalse( p1.implies( p2 ) );
+ assertFalse( p2.implies( p1 ) );
+ }
+
+ public final void testImplies()
+ {
+ assertTrue( GroupPermission.DELETE.implies( GroupPermission.EDIT ) );
+ assertTrue( GroupPermission.DELETE.implies( GroupPermission.VIEW ) );
+ assertTrue( GroupPermission.EDIT.implies( GroupPermission.VIEW ) );
+ }
+
+ public final void testImpliedMask()
+ {
+ int result = ( GroupPermission.DELETE_MASK | GroupPermission.EDIT_MASK | GroupPermission.VIEW_MASK );
+ assertEquals( result, GroupPermission.impliedMask( GroupPermission.DELETE_MASK ) );
+
+ result = ( GroupPermission.EDIT_MASK | GroupPermission.VIEW_MASK );
+ assertEquals( result, GroupPermission.impliedMask( GroupPermission.EDIT_MASK ) );
+ }
+
+ public final void testGetName()
+ {
+ GroupPermission p;
+ p = new GroupPermission( "Test", "view,edit,delete" );
+ assertEquals( "Test", p.getName() );
+ p = new GroupPermission( "mywiki:Test", "view,edit,delete" );
+ assertEquals( "mywiki:Test", p.getName() );
+ assertNotSame( "*:Test", p.getName() );
+ }
+
+ /*
+ * Class under test for java.lang.String getActions()
+ */
+ public final void testGetActions()
+ {
+ GroupPermission p = new GroupPermission( "Test", "VIEW,edit,delete" );
+ assertEquals( "delete,edit,view", p.getActions() );
+ }
+
+ /**
+ * Binds a Subject to the current AccessControlContext and calls
+ * p1.implies(p2).
+ * @param subject
+ * @param p1
+ * @param p2
+ * @return
+ */
+ protected final boolean subjectImplies( final Subject subject, final GroupPermission p1, final Permission p2 )
+ {
+ try
+ {
+ Boolean result = (Boolean)Subject.doAsPrivileged( subject, new PrivilegedAction()
+ {
+ public Object run()
+ {
+ return Boolean.valueOf( p1.impliesMember( p2 ) );
+ }
+ }, null );
+ return result.booleanValue();
+ }
+ catch( AccessControlException e )
+ {
+ return false;
+ }
+ }
+
+}