/*
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.apache.wiki.auth.permissions;
import java.security.Permission;
import java.util.Enumeration;
import junit.framework.TestCase;
/**
*/
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;
}
}