1   /*
2    *   @(#) $Id: MostSpecificUserClassFilterTest.java 292146 2005-09-28 08:41:23Z trustin $
3    *
4    *   Copyright 2004 The Apache Software Foundation
5    *
6    *   Licensed under the Apache License, Version 2.0 (the "License");
7    *   you may not use this file except in compliance with the License.
8    *   You may obtain a copy of the License at
9    *
10   *       http://www.apache.org/licenses/LICENSE-2.0
11   *
12   *   Unless required by applicable law or agreed to in writing, software
13   *   distributed under the License is distributed on an "AS IS" BASIS,
14   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   *   See the License for the specific language governing permissions and
16   *   limitations under the License.
17   *
18   */
19  package org.apache.ldap.server.authz.support;
20  
21  import java.util.ArrayList;
22  import java.util.Collection;
23  import java.util.Collections;
24  import java.util.HashSet;
25  import java.util.List;
26  import java.util.Set;
27  
28  import junit.framework.Assert;
29  import junit.framework.TestCase;
30  
31  import org.apache.ldap.common.aci.ACITuple;
32  import org.apache.ldap.common.aci.AuthenticationLevel;
33  import org.apache.ldap.common.aci.UserClass;
34  
35  /***
36   * Tests {@link MostSpecificUserClassFilter}.
37   *
38   * @author The Apache Directory Project
39   * @version $Rev: 292146 $, $Date: 2005-09-28 04:41:23 -0400 (Wed, 28 Sep 2005) $
40   */
41  public class MostSpecificUserClassFilterTest extends TestCase
42  {
43      private static final Collection EMPTY_COLLECTION =
44          Collections.unmodifiableCollection( new ArrayList() );
45      private static final Set EMPTY_SET =
46          Collections.unmodifiableSet( new HashSet() );
47      
48      private static final List TUPLES_A = new ArrayList();
49      private static final List TUPLES_B = new ArrayList();
50      private static final List TUPLES_C = new ArrayList();
51      private static final List TUPLES_D = new ArrayList();
52      private static final List TUPLES_E = new ArrayList();
53      
54      static
55      {
56          Collection name = new ArrayList();
57          Collection thisEntry = new ArrayList();
58          Collection userGroup = new ArrayList();
59          Collection subtree = new ArrayList();
60          Collection allUsers = new ArrayList();
61          
62          name.add( new UserClass.Name( EMPTY_SET ) );
63          thisEntry.add( UserClass.THIS_ENTRY );
64          userGroup.add( new UserClass.UserGroup( EMPTY_SET ) );
65          subtree.add( new UserClass.Subtree( EMPTY_COLLECTION ) );
66          allUsers.add( UserClass.ALL_USERS );
67  
68          ACITuple nameTuple = new ACITuple(
69                  name, AuthenticationLevel.NONE, EMPTY_COLLECTION,
70                  EMPTY_SET, true, 0 );
71          ACITuple thisEntryTuple = new ACITuple(
72                  thisEntry, AuthenticationLevel.NONE, EMPTY_COLLECTION,
73                  EMPTY_SET, true, 0 );
74          ACITuple userGroupTuple = new ACITuple(
75                  userGroup, AuthenticationLevel.NONE, EMPTY_COLLECTION,
76                  EMPTY_SET, true, 0 );
77          ACITuple subtreeTuple = new ACITuple(
78                  subtree, AuthenticationLevel.NONE, EMPTY_COLLECTION,
79                  EMPTY_SET, true, 0 );
80          ACITuple allUsersTuple = new ACITuple(
81                  allUsers, AuthenticationLevel.NONE, EMPTY_COLLECTION,
82                  EMPTY_SET, true, 0 );
83  
84          TUPLES_A.add( nameTuple );
85          TUPLES_A.add( thisEntryTuple );
86          TUPLES_A.add( userGroupTuple );
87          TUPLES_A.add( subtreeTuple );
88          TUPLES_A.add( allUsersTuple );
89  
90          TUPLES_B.add( thisEntryTuple );
91          TUPLES_B.add( userGroupTuple );
92          TUPLES_B.add( subtreeTuple );
93          TUPLES_B.add( allUsersTuple );
94  
95          TUPLES_C.add( userGroupTuple );
96          TUPLES_C.add( subtreeTuple );
97          TUPLES_C.add( allUsersTuple );
98  
99          TUPLES_D.add( subtreeTuple );
100         TUPLES_D.add( allUsersTuple );
101 
102         TUPLES_E.add( allUsersTuple );
103         TUPLES_E.add( allUsersTuple );
104     }
105     
106     public void testZeroOrOneTuple() throws Exception
107     {
108         MostSpecificUserClassFilter filter = new MostSpecificUserClassFilter();
109 
110         Assert.assertEquals(
111                 0, filter.filter(
112                         EMPTY_COLLECTION, OperationScope.ATTRIBUTE_TYPE_AND_VALUE,
113                         null, null, null, null, null, null, null, null, null, null ).size() );
114 
115         Collection tuples = new ArrayList();
116         tuples.add( new ACITuple(
117                 EMPTY_COLLECTION, AuthenticationLevel.NONE, EMPTY_COLLECTION,
118                 EMPTY_SET, false, 0 ) );
119         
120         Assert.assertEquals(
121                 1, filter.filter(
122                         tuples, OperationScope.ATTRIBUTE_TYPE_AND_VALUE,
123                         null, null, null, null, null, null, null, null, null, null ).size() );
124     }
125     
126     public void testNameAndThisEntry() throws Exception
127     {
128         MostSpecificUserClassFilter filter = new MostSpecificUserClassFilter();
129         
130         List tuples = new ArrayList( TUPLES_A );
131         tuples = ( List ) filter.filter(
132                 tuples, OperationScope.ENTRY, null, null, null,
133                 null, null, null, null, null, null, null );
134         
135         Assert.assertEquals( 2, tuples.size() );
136         Assert.assertSame( TUPLES_A.get( 0 ), tuples.get( 0 ) );
137         Assert.assertSame( TUPLES_A.get( 1 ), tuples.get( 1 ) );
138     }
139 
140     public void testThisEntry() throws Exception
141     {
142         MostSpecificUserClassFilter filter = new MostSpecificUserClassFilter();
143         
144         List tuples = new ArrayList( TUPLES_B );
145         tuples = ( List ) filter.filter(
146                 tuples, OperationScope.ENTRY, null, null, null,
147                 null, null, null, null, null, null, null );
148         
149         Assert.assertEquals( 1, tuples.size() );
150         Assert.assertSame( TUPLES_B.get( 0 ), tuples.get( 0 ) );
151     }
152 
153     public void testUserGroup() throws Exception
154     {
155         MostSpecificUserClassFilter filter = new MostSpecificUserClassFilter();
156         
157         List tuples = new ArrayList( TUPLES_C );
158         tuples = ( List ) filter.filter(
159                 tuples, OperationScope.ENTRY, null, null, null,
160                 null, null, null, null, null, null, null );
161         
162         Assert.assertEquals( 1, tuples.size() );
163         Assert.assertSame( TUPLES_C.get( 0 ), tuples.get( 0 ) );
164     }
165 
166     public void testSubtree() throws Exception
167     {
168         MostSpecificUserClassFilter filter = new MostSpecificUserClassFilter();
169         
170         List tuples = new ArrayList( TUPLES_D );
171         tuples = ( List ) filter.filter(
172                 tuples, OperationScope.ENTRY, null, null, null,
173                 null, null, null, null, null, null, null );
174         
175         Assert.assertEquals( 1, tuples.size() );
176         Assert.assertSame( TUPLES_D.get( 0 ), tuples.get( 0 ) );
177     }
178     
179     public void testOthers() throws Exception
180     {
181         MostSpecificUserClassFilter filter = new MostSpecificUserClassFilter();
182         
183         List tuples = new ArrayList( TUPLES_E );
184         tuples = ( List ) filter.filter(
185                 tuples, OperationScope.ENTRY, null, null, null,
186                 null, null, null, null, null, null, null );
187         
188         Assert.assertEquals( 2, tuples.size() );
189         Assert.assertSame( TUPLES_E.get( 0 ), tuples.get( 0 ) );
190         Assert.assertSame( TUPLES_E.get( 1 ), tuples.get( 1 ) );
191     }
192 }