1   /* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
2    *
3    * Licensed under the Apache License, Version 2.0 (the "License");
4    * you may not use this file except in compliance with the License.
5    * You may obtain a copy of the License at
6    *
7    *     http://www.apache.org/licenses/LICENSE-2.0
8    *
9    * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  
16  package org.acegisecurity.acl.basic;
17  
18  import junit.framework.TestCase;
19  
20  import org.acegisecurity.GrantedAuthority;
21  import org.acegisecurity.GrantedAuthorityImpl;
22  
23  import org.acegisecurity.acl.AclEntry;
24  
25  import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
26  
27  import org.acegisecurity.userdetails.User;
28  
29  
30  /**
31   * Tests {@link GrantedAuthorityEffectiveAclsResolver}.
32   *
33   * @author Ben Alex
34   * @version $Id: GrantedAuthorityEffectiveAclsResolverTests.java 1496 2006-05-23 13:38:33Z benalex $
35   */
36  public class GrantedAuthorityEffectiveAclsResolverTests extends TestCase {
37      //~ Instance fields ================================================================================================
38  
39      private SimpleAclEntry entry100RoleEverybody = new SimpleAclEntry("ROLE_EVERYBODY",
40              new NamedEntityObjectIdentity("OBJECT", "100"), null, 14);
41      private SimpleAclEntry entry100RoleOne = new SimpleAclEntry("ROLE_ONE",
42              new NamedEntityObjectIdentity("OBJECT", "100"), null, 0);
43      private SimpleAclEntry entry100RoleTwo = new SimpleAclEntry("ROLE_TWO",
44              new NamedEntityObjectIdentity("OBJECT", "100"), null, 2);
45      private UsernamePasswordAuthenticationToken scott = new UsernamePasswordAuthenticationToken("scott", "not used",
46              new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_EVERYBODY"), new GrantedAuthorityImpl("ROLE_TWO")});
47      private SimpleAclEntry entry100Scott = new SimpleAclEntry(scott.getPrincipal(),
48              new NamedEntityObjectIdentity("OBJECT", "100"), null, 4);
49      private UsernamePasswordAuthenticationToken dianne = new UsernamePasswordAuthenticationToken("dianne", "not used");
50      private UsernamePasswordAuthenticationToken marissa = new UsernamePasswordAuthenticationToken("marissa",
51              "not used",
52              new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_EVERYBODY"), new GrantedAuthorityImpl("ROLE_ONE")});
53      private SimpleAclEntry entry100Marissa = new SimpleAclEntry(marissa.getPrincipal(),
54              new NamedEntityObjectIdentity("OBJECT", "100"), null, 2);
55      private UsernamePasswordAuthenticationToken scottWithUserDetails = new UsernamePasswordAuthenticationToken(new User(
56                  "scott", "NOT_USED", true, true, true, true,
57                  new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_EVERYBODY")}), "not used",
58              new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_EVERYBODY"), new GrantedAuthorityImpl("ROLE_TWO")});
59  
60      // convenience group
61      private SimpleAclEntry[] acls = {
62              entry100Marissa, entry100Scott, entry100RoleEverybody, entry100RoleOne, entry100RoleTwo
63          };
64  
65      //~ Constructors ===================================================================================================
66  
67      public GrantedAuthorityEffectiveAclsResolverTests() {
68          super();
69      }
70  
71      public GrantedAuthorityEffectiveAclsResolverTests(String arg0) {
72          super(arg0);
73      }
74  
75      //~ Methods ========================================================================================================
76  
77      public static void main(String[] args) {
78          junit.textui.TestRunner.run(GrantedAuthorityEffectiveAclsResolverTests.class);
79      }
80  
81      public final void setUp() throws Exception {
82          super.setUp();
83      }
84  
85      public void testResolveAclsForDianneWhoHasANullForAuthorities() {
86          GrantedAuthorityEffectiveAclsResolver resolver = new GrantedAuthorityEffectiveAclsResolver();
87          assertNull(resolver.resolveEffectiveAcls(acls, dianne));
88      }
89  
90      public void testResolveAclsForMarissa() {
91          GrantedAuthorityEffectiveAclsResolver resolver = new GrantedAuthorityEffectiveAclsResolver();
92          assertEquals(3, resolver.resolveEffectiveAcls(acls, marissa).length);
93          assertEquals(entry100Marissa, resolver.resolveEffectiveAcls(acls, marissa)[0]);
94          assertEquals(entry100RoleEverybody, resolver.resolveEffectiveAcls(acls, marissa)[1]);
95          assertEquals(entry100RoleOne, resolver.resolveEffectiveAcls(acls, marissa)[2]);
96      }
97  
98      public void testResolveAclsForScottWithStringObjectAsPrincipal() {
99          GrantedAuthorityEffectiveAclsResolver resolver = new GrantedAuthorityEffectiveAclsResolver();
100         assertEquals(3, resolver.resolveEffectiveAcls(acls, scott).length);
101         assertEquals(entry100Scott, resolver.resolveEffectiveAcls(acls, scott)[0]);
102         assertEquals(entry100RoleEverybody, resolver.resolveEffectiveAcls(acls, scott)[1]);
103         assertEquals(entry100RoleTwo, resolver.resolveEffectiveAcls(acls, scott)[2]);
104     }
105 
106     public void testResolveAclsForScottWithUserDetailsObjectAsPrincipal() {
107         GrantedAuthorityEffectiveAclsResolver resolver = new GrantedAuthorityEffectiveAclsResolver();
108         assertEquals(3, resolver.resolveEffectiveAcls(acls, scottWithUserDetails).length);
109         assertEquals(entry100Scott, resolver.resolveEffectiveAcls(acls, scottWithUserDetails)[0]);
110         assertEquals(entry100RoleEverybody, resolver.resolveEffectiveAcls(acls, scottWithUserDetails)[1]);
111         assertEquals(entry100RoleTwo, resolver.resolveEffectiveAcls(acls, scottWithUserDetails)[2]);
112     }
113 
114     public void testResolveAclsReturnsNullIfNoAclsInFirstPlace() {
115         GrantedAuthorityEffectiveAclsResolver resolver = new GrantedAuthorityEffectiveAclsResolver();
116         assertNull(resolver.resolveEffectiveAcls(null, scott));
117     }
118 
119     public void testSkipsNonBasicAclEntryObjects() {
120         GrantedAuthorityEffectiveAclsResolver resolver = new GrantedAuthorityEffectiveAclsResolver();
121         AclEntry[] basicAcls = {
122                 entry100Marissa, entry100Scott, entry100RoleEverybody, entry100RoleOne, new MockAcl(), entry100RoleTwo
123             };
124         assertEquals(3, resolver.resolveEffectiveAcls(basicAcls, marissa).length);
125     }
126 
127     //~ Inner Classes ==================================================================================================
128 
129     private class MockAcl implements AclEntry {
130         // does nothing
131     }
132 }