FileDocCategorySizeDatePackage
IAclTest.javaAPI DocAndroid 1.5 API7590Wed May 06 22:41:06 BST 2009tests.security.acl

IAclTest.java

/* 
 * 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 tests.security.acl;

import dalvik.annotation.TestTargets;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetNew;
import dalvik.annotation.TestTargetClass;

import junit.framework.TestCase;

import java.security.acl.Acl;
import java.security.acl.AclEntry;
import java.security.acl.NotOwnerException;
import java.security.acl.Permission;
import java.security.Principal;
import java.util.Enumeration;
import java.util.Vector;

import org.apache.harmony.security.tests.support.acl.*;

@TestTargetClass(Acl.class)
public class IAclTest extends TestCase {
    
    class MyAcl extends AclImpl {
        public MyAcl(Principal principal, String str) {
            super(principal, str);
        }
    }

    
    /**
     * @tests java.security.acl.Acl#addEntry(Principal caller, AclEntry entry)
     * @tests java.security.acl.Acl#removeEntry(Principal caller, AclEntry entry)
     */
    @TestTargets({
        @TestTargetNew(
            level = TestLevel.COMPLETE,
            notes = "",
            method = "addEntry",
            args = {java.security.Principal.class, java.security.acl.AclEntry.class}
        ),
        @TestTargetNew(
            level = TestLevel.COMPLETE,
            notes = "",
            method = "removeEntry",
            args = {java.security.Principal.class, java.security.acl.AclEntry.class}
        )
    })
    public void test_Acl01() {
        Principal pr = new PrincipalImpl("TestPrincipal");
        String str = "TestName";
        MyAcl acl = new MyAcl(pr, str);
        AclEntry ae = new AclEntryImpl(pr);
        try {
            assertTrue(acl.addEntry(pr, ae));
            assertFalse(acl.addEntry(pr, ae));
            assertTrue(acl.removeEntry(pr, ae));
            assertFalse(acl.removeEntry(pr, ae));
        } catch (Exception ex) {
            fail("Unexpected exception " + ex);
        }
        
        try {
            acl.addEntry(new PrincipalImpl("NewPrincipal"), ae);
            fail("NotOwnerException was not thrown");
        } catch (NotOwnerException noe) {
            //expected
        }
        
        try {
            acl.removeEntry(new PrincipalImpl("NewPrincipal"), ae);
            fail("NotOwnerException was not thrown");
        } catch (NotOwnerException noe) {
            //expected
        }
    }
    
    /**
     * @tests java.security.acl.Acl#setName(Principal caller, String name)
     * @tests java.security.acl.Acl#getName()
     */
    @TestTargets({
        @TestTargetNew(
            level = TestLevel.COMPLETE,
            notes = "",
            method = "setName",
            args = {java.security.Principal.class, java.lang.String.class}
        ),
        @TestTargetNew(
            level = TestLevel.COMPLETE,
            notes = "",
            method = "getName",
            args = {}
        )
    })
    public void test_Acl02() {
        Principal pr = new PrincipalImpl("TestPrincipal");
        String str = "TestName";
        String newStr = "NewName";
        MyAcl acl = new MyAcl(pr, str);
        try {
            assertEquals("Names are not equal", str, acl.getName());
            acl.setName(pr, newStr);
            assertEquals("Names are not equal", newStr, acl.getName());
        } catch (Exception ex) {
            fail("Unexpected exception " + ex);
        }
        
        try {
            acl.setName(new PrincipalImpl("NewPrincipal"), str);
            fail("NotOwnerException was not thrown");
        } catch (NotOwnerException noe) {
            //expected
        }
    }
    
    /**
     * @tests java.security.acl.Acl#toString()
     */
    @TestTargetNew(
        level = TestLevel.COMPLETE,
        notes = "",
        method = "toString",
        args = {}
    )
    public void test_Acl03() {
        Principal pr = new PrincipalImpl("TestPrincipal");
        String str = "TestName";
        MyAcl acl = new MyAcl(pr, str);
        AclEntry ae = new AclEntryImpl(pr);
        Permission perm = new PermissionImpl("Permission_1");
        try {
            ae.addPermission(perm);
            acl.addEntry(pr, ae);
            String res = acl.toString();
            assertTrue(res.contains(perm.toString()));
        } catch (Exception ex) {
            fail("Unexpected exception " + ex);
        }
    }
    
    /**
     * @tests java.security.acl.Acl#entries()
     */
    @TestTargetNew(
        level = TestLevel.COMPLETE,
        notes = "",
        method = "entries",
        args = {}
    )
    public void test_Acl04() {
        Principal pr = new PrincipalImpl("TestPrincipal");
        String str = "TestName";
        MyAcl acl = new MyAcl(pr, str);
        AclEntry ae1 = new AclEntryImpl(pr);
        try {
            ae1.addPermission(new PermissionImpl("Permission_1"));
            acl.addEntry(pr, ae1);
            Enumeration en = acl.entries();
            Vector v = new Vector();
            while (en.hasMoreElements()) {
                v.addElement(en.nextElement());
            }
            assertEquals(v.size(), 1);
        } catch (Exception ex) {
            fail("Unexpected exception " + ex);
        }
    }
    
    /**
     * @tests java.security.acl.Acl#checkPermission(Principal principal, Permission permission)
     * @tests java.security.acl.Acl#getPermissions(Principal principal)
     */
    @TestTargets({
        @TestTargetNew(
            level = TestLevel.COMPLETE,
            notes = "",
            method = "checkPermission",
            args = {java.security.Principal.class, java.security.acl.Permission.class}
        ),
        @TestTargetNew(
            level = TestLevel.COMPLETE,
            notes = "",
            method = "getPermissions",
            args = {java.security.Principal.class}
        )
    })
    public void test_Acl05() {
        Principal pr = new PrincipalImpl("TestPrincipal");
        String str = "TestName";
        MyAcl acl = new MyAcl(pr, str);
        AclEntry ae = new AclEntryImpl(pr);
        Permission perm = new PermissionImpl("Permission_1");
        try {
            ae.addPermission(perm);
            acl.addEntry(pr, ae);
            
            //checkPermission verification
            assertTrue("Incorrect permission", acl.checkPermission(pr, perm));
            assertFalse(acl.checkPermission(pr, new PermissionImpl("Permission_2")));
            
            //getPermissions
            Enumeration en = acl.getPermissions(pr);
            Vector v = new Vector();
            while (en.hasMoreElements()) {
                v.addElement(en.nextElement());
            }
            assertEquals(v.size(), 1);
            assertEquals(v.elementAt(0).toString(), perm.toString());
        } catch (Exception ex) {
            fail("Exception " + ex + " was thrown");
        }
    }
}