1   /*
2    *   @(#) $Id: MostSpecificProtectedItemFilterTest.java 292150 2005-09-28 08:55:08Z 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.ProtectedItem;
34  import org.apache.ldap.common.filter.PresenceNode;
35  
36  /***
37   * Tests {@link MostSpecificProtectedItemFilter}.
38   *
39   * @author The Apache Directory Project
40   * @version $Rev: 292150 $, $Date: 2005-09-28 04:55:08 -0400 (Wed, 28 Sep 2005) $
41   */
42  public class MostSpecificProtectedItemFilterTest extends TestCase
43  {
44      private static final Collection EMPTY_COLLECTION =
45          Collections.unmodifiableCollection( new ArrayList() );
46      private static final Set EMPTY_SET =
47          Collections.unmodifiableSet( new HashSet() );
48      
49      private static final List TUPLES_A = new ArrayList();
50      private static final List TUPLES_B = new ArrayList();
51      private static final List TUPLES_C = new ArrayList();
52      private static final List TUPLES_D = new ArrayList();
53      private static final List TUPLES_E = new ArrayList();
54      
55      static
56      {
57          Collection attributeType = new ArrayList();
58          Collection allAttributeValues = new ArrayList();
59          Collection selfValue = new ArrayList();
60          Collection attributeValue = new ArrayList();
61          Collection rangeOfValues = new ArrayList();
62          Collection allUserAttributeTypes = new ArrayList();
63          Collection allUserAttributeTypesAndValues = new ArrayList();
64  
65          attributeType.add( new ProtectedItem.AttributeType( EMPTY_COLLECTION ) );
66          allAttributeValues.add( new ProtectedItem.AllAttributeValues( EMPTY_COLLECTION ) );
67          selfValue.add( new ProtectedItem.SelfValue( EMPTY_COLLECTION ) );
68          attributeValue.add( new ProtectedItem.AttributeValue( EMPTY_COLLECTION ) );
69          rangeOfValues.add( new ProtectedItem.RangeOfValues( new PresenceNode( "objectClass" ) ) );
70          allUserAttributeTypes.add( ProtectedItem.ALL_USER_ATTRIBUTE_TYPES );
71          allUserAttributeTypesAndValues.add( ProtectedItem.ALL_USER_ATTRIBUTE_TYPES_AND_VALUES );
72  
73          ACITuple attributeTypeTuple = new ACITuple(
74                  EMPTY_COLLECTION, AuthenticationLevel.NONE, attributeType,
75                  EMPTY_SET, true, 0 );
76          ACITuple allAttributeValuesTuple = new ACITuple(
77                  EMPTY_COLLECTION, AuthenticationLevel.NONE, allAttributeValues,
78                  EMPTY_SET, true, 0 );
79          ACITuple selfValueTuple = new ACITuple(
80                  EMPTY_COLLECTION, AuthenticationLevel.NONE, selfValue,
81                  EMPTY_SET, true, 0 );
82          ACITuple attributeValueTuple = new ACITuple(
83                  EMPTY_COLLECTION, AuthenticationLevel.NONE, attributeValue,
84                  EMPTY_SET, true, 0 );
85          ACITuple rangeOfValuesTuple = new ACITuple(
86                  EMPTY_COLLECTION, AuthenticationLevel.NONE, rangeOfValues,
87                  EMPTY_SET, true, 0 );
88          ACITuple allUserAttributeTypesTuple = new ACITuple(
89                  EMPTY_COLLECTION, AuthenticationLevel.NONE, allUserAttributeTypes,
90                  EMPTY_SET, true, 0 );
91          ACITuple allUserAttributeTypesAndValuesTuple = new ACITuple(
92                  EMPTY_COLLECTION, AuthenticationLevel.NONE, allUserAttributeTypesAndValues,
93                  EMPTY_SET, true, 0 );
94  
95          TUPLES_A.add( attributeTypeTuple );
96          TUPLES_A.add( allAttributeValuesTuple );
97          TUPLES_A.add( selfValueTuple );
98          TUPLES_A.add( attributeValueTuple );
99          TUPLES_A.add( rangeOfValuesTuple );
100         TUPLES_A.add( allUserAttributeTypesTuple );
101         TUPLES_A.add( allUserAttributeTypesAndValuesTuple );
102 
103         TUPLES_B.add( allAttributeValuesTuple );
104         TUPLES_B.add( selfValueTuple );
105         TUPLES_B.add( attributeValueTuple );
106         TUPLES_B.add( rangeOfValuesTuple );
107         TUPLES_B.add( allUserAttributeTypesTuple );
108         TUPLES_B.add( allUserAttributeTypesAndValuesTuple );
109 
110         TUPLES_C.add( selfValueTuple );
111         TUPLES_C.add( attributeValueTuple );
112         TUPLES_C.add( rangeOfValuesTuple );
113         TUPLES_C.add( allUserAttributeTypesTuple );
114         TUPLES_C.add( allUserAttributeTypesAndValuesTuple );
115 
116         TUPLES_D.add( attributeValueTuple );
117         TUPLES_D.add( rangeOfValuesTuple );
118         TUPLES_D.add( allUserAttributeTypesTuple );
119         TUPLES_D.add( allUserAttributeTypesAndValuesTuple );
120 
121         TUPLES_E.add( allUserAttributeTypesTuple );
122         TUPLES_E.add( allUserAttributeTypesAndValuesTuple );
123     }
124     
125     public void testZeroOrOneTuple() throws Exception
126     {
127         MostSpecificProtectedItemFilter filter = new MostSpecificProtectedItemFilter();
128 
129         Assert.assertEquals(
130                 0, filter.filter(
131                         EMPTY_COLLECTION, OperationScope.ATTRIBUTE_TYPE_AND_VALUE,
132                         null, null, null, null, null, null, null, null, null, null ).size() );
133 
134         Collection tuples = new ArrayList();
135         tuples.add( new ACITuple(
136                 EMPTY_COLLECTION, AuthenticationLevel.NONE, EMPTY_COLLECTION,
137                 EMPTY_SET, false, 0 ) );
138         
139         Assert.assertEquals(
140                 1, filter.filter(
141                         tuples, OperationScope.ATTRIBUTE_TYPE_AND_VALUE,
142                         null, null, null, null, null, null, null, null, null, null ).size() );
143     }
144     
145     public void testTuplesA() throws Exception
146     {
147         MostSpecificProtectedItemFilter filter = new MostSpecificProtectedItemFilter();
148         
149         List tuples = new ArrayList( TUPLES_A );
150         tuples = ( List ) filter.filter(
151                 tuples, OperationScope.ENTRY, null, null, null,
152                 null, null, null, null, null, null, null );
153         
154         Assert.assertEquals( 4, tuples.size() );
155         Assert.assertSame( TUPLES_A.get( 0 ), tuples.get( 0 ) );
156         Assert.assertSame( TUPLES_A.get( 1 ), tuples.get( 1 ) );
157         Assert.assertSame( TUPLES_A.get( 2 ), tuples.get( 2 ) );
158         Assert.assertSame( TUPLES_A.get( 3 ), tuples.get( 3 ) );
159     }
160 
161     public void testTuplesB() throws Exception
162     {
163         MostSpecificProtectedItemFilter filter = new MostSpecificProtectedItemFilter();
164         
165         List tuples = new ArrayList( TUPLES_B );
166         tuples = ( List ) filter.filter(
167                 tuples, OperationScope.ENTRY, null, null, null,
168                 null, null, null, null, null, null, null );
169         
170         Assert.assertEquals( 3, tuples.size() );
171         Assert.assertSame( TUPLES_B.get( 0 ), tuples.get( 0 ) );
172         Assert.assertSame( TUPLES_B.get( 1 ), tuples.get( 1 ) );
173         Assert.assertSame( TUPLES_B.get( 2 ), tuples.get( 2 ) );
174     }
175 
176     public void testTuplesC() throws Exception
177     {
178         MostSpecificProtectedItemFilter filter = new MostSpecificProtectedItemFilter();
179         
180         List tuples = new ArrayList( TUPLES_C );
181         tuples = ( List ) filter.filter(
182                 tuples, OperationScope.ENTRY, null, null, null,
183                 null, null, null, null, null, null, null );
184         
185         Assert.assertEquals( 2, tuples.size() );
186         Assert.assertSame( TUPLES_C.get( 0 ), tuples.get( 0 ) );
187         Assert.assertSame( TUPLES_C.get( 1 ), tuples.get( 1 ) );
188     }
189 
190     public void testTuplesD() throws Exception
191     {
192         MostSpecificProtectedItemFilter filter = new MostSpecificProtectedItemFilter();
193         
194         List tuples = new ArrayList( TUPLES_D );
195         tuples = ( List ) filter.filter(
196                 tuples, OperationScope.ENTRY, null, null, null,
197                 null, null, null, null, null, null, null );
198         
199         Assert.assertEquals( 1, tuples.size() );
200         Assert.assertSame( TUPLES_D.get( 0 ), tuples.get( 0 ) );
201     }
202     
203     public void testTuplesE() throws Exception
204     {
205         MostSpecificProtectedItemFilter filter = new MostSpecificProtectedItemFilter();
206         
207         List tuples = new ArrayList( TUPLES_E );
208         tuples = ( List ) filter.filter(
209                 tuples, OperationScope.ENTRY, null, null, null,
210                 null, null, null, null, null, null, null );
211         
212         Assert.assertEquals( 2, tuples.size() );
213         Assert.assertSame( TUPLES_E.get( 0 ), tuples.get( 0 ) );
214         Assert.assertSame( TUPLES_E.get( 1 ), tuples.get( 1 ) );
215     }
216 }