1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.server.core.authz.support;
21
22
23 import java.util.ArrayList;
24 import java.util.Collection;
25 import java.util.Collections;
26 import java.util.HashSet;
27 import java.util.List;
28 import java.util.Set;
29
30 import javax.naming.directory.Attribute;
31
32 import junit.framework.Assert;
33 import junit.framework.TestCase;
34
35 import org.apache.directory.server.core.authz.support.MostSpecificProtectedItemFilter;
36 import org.apache.directory.server.core.authz.support.OperationScope;
37 import org.apache.directory.shared.ldap.aci.ACITuple;
38 import org.apache.directory.shared.ldap.aci.MicroOperation;
39 import org.apache.directory.shared.ldap.aci.ProtectedItem;
40 import org.apache.directory.shared.ldap.aci.UserClass;
41 import org.apache.directory.shared.ldap.constants.AuthenticationLevel;
42 import org.apache.directory.shared.ldap.filter.PresenceNode;
43
44
45
46
47
48
49
50
51 public class MostSpecificProtectedItemFilterTest extends TestCase
52 {
53 private static final Collection<String> EMPTY_STRING_COLLECTION = Collections.unmodifiableCollection( new ArrayList<String>() );
54
55 private static final Collection<Attribute> EMPTY_ATTRIBUTE_COLLECTION =
56 Collections.unmodifiableCollection( new ArrayList<Attribute>() );
57
58 private static final Collection<UserClass> EMPTY_USER_CLASS_COLLECTION =
59 Collections.unmodifiableCollection( new ArrayList<UserClass>() );
60
61 private static final Collection<ACITuple> EMPTY_ACI_TUPLE_COLLECTION =
62 Collections.unmodifiableCollection( new ArrayList<ACITuple>() );
63
64 private static final Collection<ProtectedItem> EMPTY_PROTECTED_ITEM_COLLECTION =
65 Collections.unmodifiableCollection( new ArrayList<ProtectedItem>() );
66
67 private static final Set<MicroOperation> EMPTY_MICRO_OPERATION_SET =
68 Collections.unmodifiableSet( new HashSet<MicroOperation>() );
69
70 private static final List<ACITuple> TUPLES_A = new ArrayList<ACITuple>();
71 private static final List<ACITuple> TUPLES_B = new ArrayList<ACITuple>();
72 private static final List<ACITuple> TUPLES_C = new ArrayList<ACITuple>();
73 private static final List<ACITuple> TUPLES_D = new ArrayList<ACITuple>();
74 private static final List<ACITuple> TUPLES_E = new ArrayList<ACITuple>();
75
76 static
77 {
78 Collection<ProtectedItem> attributeType = new ArrayList<ProtectedItem>();
79 Collection<ProtectedItem> allAttributeValues = new ArrayList<ProtectedItem>();
80 Collection<ProtectedItem> selfValue = new ArrayList<ProtectedItem>();
81 Collection<ProtectedItem> attributeValue = new ArrayList<ProtectedItem>();
82 Collection<ProtectedItem> rangeOfValues = new ArrayList<ProtectedItem>();
83 Collection<ProtectedItem> allUserAttributeTypes = new ArrayList<ProtectedItem>();
84 Collection<ProtectedItem> allUserAttributeTypesAndValues = new ArrayList<ProtectedItem>();
85
86 attributeType.add( new ProtectedItem.AttributeType( EMPTY_STRING_COLLECTION ) );
87 allAttributeValues.add( new ProtectedItem.AllAttributeValues( EMPTY_STRING_COLLECTION ) );
88 selfValue.add( new ProtectedItem.SelfValue( EMPTY_STRING_COLLECTION ) );
89 attributeValue.add( new ProtectedItem.AttributeValue( EMPTY_ATTRIBUTE_COLLECTION ) );
90 rangeOfValues.add( new ProtectedItem.RangeOfValues( new PresenceNode( "objectClass" ) ) );
91 allUserAttributeTypes.add( ProtectedItem.ALL_USER_ATTRIBUTE_TYPES );
92 allUserAttributeTypesAndValues.add( ProtectedItem.ALL_USER_ATTRIBUTE_TYPES_AND_VALUES );
93
94 ACITuple attributeTypeTuple = new ACITuple( EMPTY_USER_CLASS_COLLECTION, AuthenticationLevel.NONE, attributeType,
95 EMPTY_MICRO_OPERATION_SET, true, 0 );
96
97 ACITuple allAttributeValuesTuple = new ACITuple( EMPTY_USER_CLASS_COLLECTION, AuthenticationLevel.NONE,
98 allAttributeValues, EMPTY_MICRO_OPERATION_SET, true, 0 );
99
100 ACITuple selfValueTuple = new ACITuple( EMPTY_USER_CLASS_COLLECTION, AuthenticationLevel.NONE, selfValue,
101 EMPTY_MICRO_OPERATION_SET, true, 0 );
102
103 ACITuple attributeValueTuple = new ACITuple( EMPTY_USER_CLASS_COLLECTION, AuthenticationLevel.NONE, attributeValue,
104 EMPTY_MICRO_OPERATION_SET, true, 0 );
105
106 ACITuple rangeOfValuesTuple = new ACITuple( EMPTY_USER_CLASS_COLLECTION, AuthenticationLevel.NONE, rangeOfValues,
107 EMPTY_MICRO_OPERATION_SET, true, 0 );
108
109 ACITuple allUserAttributeTypesTuple = new ACITuple( EMPTY_USER_CLASS_COLLECTION, AuthenticationLevel.NONE,
110 allUserAttributeTypes, EMPTY_MICRO_OPERATION_SET, true, 0 );
111
112 ACITuple allUserAttributeTypesAndValuesTuple = new ACITuple( EMPTY_USER_CLASS_COLLECTION, AuthenticationLevel.NONE,
113 allUserAttributeTypesAndValues, EMPTY_MICRO_OPERATION_SET, true, 0 );
114
115 TUPLES_A.add( attributeTypeTuple );
116 TUPLES_A.add( allAttributeValuesTuple );
117 TUPLES_A.add( selfValueTuple );
118 TUPLES_A.add( attributeValueTuple );
119 TUPLES_A.add( rangeOfValuesTuple );
120 TUPLES_A.add( allUserAttributeTypesTuple );
121 TUPLES_A.add( allUserAttributeTypesAndValuesTuple );
122
123 TUPLES_B.add( allAttributeValuesTuple );
124 TUPLES_B.add( selfValueTuple );
125 TUPLES_B.add( attributeValueTuple );
126 TUPLES_B.add( rangeOfValuesTuple );
127 TUPLES_B.add( allUserAttributeTypesTuple );
128 TUPLES_B.add( allUserAttributeTypesAndValuesTuple );
129
130 TUPLES_C.add( selfValueTuple );
131 TUPLES_C.add( attributeValueTuple );
132 TUPLES_C.add( rangeOfValuesTuple );
133 TUPLES_C.add( allUserAttributeTypesTuple );
134 TUPLES_C.add( allUserAttributeTypesAndValuesTuple );
135
136 TUPLES_D.add( attributeValueTuple );
137 TUPLES_D.add( rangeOfValuesTuple );
138 TUPLES_D.add( allUserAttributeTypesTuple );
139 TUPLES_D.add( allUserAttributeTypesAndValuesTuple );
140
141 TUPLES_E.add( allUserAttributeTypesTuple );
142 TUPLES_E.add( allUserAttributeTypesAndValuesTuple );
143 }
144
145
146 public void testZeroOrOneTuple() throws Exception
147 {
148 MostSpecificProtectedItemFilter filter = new MostSpecificProtectedItemFilter();
149
150 Assert.assertEquals( 0, filter.filter( null, EMPTY_ACI_TUPLE_COLLECTION, OperationScope.ATTRIBUTE_TYPE_AND_VALUE, null, null,
151 null, null, null, null, null, null, null, null, null ).size() );
152
153 Collection<ACITuple> tuples = new ArrayList<ACITuple>();
154 tuples.add( new ACITuple( EMPTY_USER_CLASS_COLLECTION, AuthenticationLevel.NONE, EMPTY_PROTECTED_ITEM_COLLECTION, EMPTY_MICRO_OPERATION_SET, false, 0 ) );
155
156 Assert.assertEquals( 1, filter.filter( null, tuples, OperationScope.ATTRIBUTE_TYPE_AND_VALUE, null, null, null, null,
157 null, null, null, null, null, null, null ).size() );
158 }
159
160
161 public void testTuplesA() throws Exception
162 {
163 MostSpecificProtectedItemFilter filter = new MostSpecificProtectedItemFilter();
164
165 List<ACITuple> tuples = new ArrayList<ACITuple>( TUPLES_A );
166 tuples = ( List<ACITuple> ) filter.filter( null, tuples, OperationScope.ENTRY, null, null, null, null, null, null, null, null,
167 null, null, null );
168
169 Assert.assertEquals( 4, tuples.size() );
170 Assert.assertSame( TUPLES_A.get( 0 ), tuples.get( 0 ) );
171 Assert.assertSame( TUPLES_A.get( 1 ), tuples.get( 1 ) );
172 Assert.assertSame( TUPLES_A.get( 2 ), tuples.get( 2 ) );
173 Assert.assertSame( TUPLES_A.get( 3 ), tuples.get( 3 ) );
174 }
175
176
177 public void testTuplesB() throws Exception
178 {
179 MostSpecificProtectedItemFilter filter = new MostSpecificProtectedItemFilter();
180
181 List<ACITuple> tuples = new ArrayList<ACITuple>( TUPLES_B );
182 tuples = ( List<ACITuple> ) filter.filter( null, tuples, OperationScope.ENTRY, null, null, null, null, null, null, null, null,
183 null, null, null );
184
185 Assert.assertEquals( 3, tuples.size() );
186 Assert.assertSame( TUPLES_B.get( 0 ), tuples.get( 0 ) );
187 Assert.assertSame( TUPLES_B.get( 1 ), tuples.get( 1 ) );
188 Assert.assertSame( TUPLES_B.get( 2 ), tuples.get( 2 ) );
189 }
190
191
192 public void testTuplesC() throws Exception
193 {
194 MostSpecificProtectedItemFilter filter = new MostSpecificProtectedItemFilter();
195
196 List<ACITuple> tuples = new ArrayList<ACITuple>( TUPLES_C );
197 tuples = ( List<ACITuple> ) filter.filter( null, tuples, OperationScope.ENTRY, null, null, null, null, null, null, null, null,
198 null, null, null );
199
200 Assert.assertEquals( 2, tuples.size() );
201 Assert.assertSame( TUPLES_C.get( 0 ), tuples.get( 0 ) );
202 Assert.assertSame( TUPLES_C.get( 1 ), tuples.get( 1 ) );
203 }
204
205
206 public void testTuplesD() throws Exception
207 {
208 MostSpecificProtectedItemFilter filter = new MostSpecificProtectedItemFilter();
209
210 List<ACITuple> tuples = new ArrayList<ACITuple>( TUPLES_D );
211 tuples = ( List<ACITuple> ) filter.filter( null, tuples, OperationScope.ENTRY, null, null, null, null, null, null, null, null,
212 null, null, null );
213
214 Assert.assertEquals( 1, tuples.size() );
215 Assert.assertSame( TUPLES_D.get( 0 ), tuples.get( 0 ) );
216 }
217
218
219 public void testTuplesE() throws Exception
220 {
221 MostSpecificProtectedItemFilter filter = new MostSpecificProtectedItemFilter();
222
223 List<ACITuple> tuples = new ArrayList<ACITuple>( TUPLES_E );
224 tuples = ( List<ACITuple> ) filter.filter( null, tuples, OperationScope.ENTRY, null, null, null, null, null, null, null, null,
225 null, null, null );
226
227 Assert.assertEquals( 2, tuples.size() );
228 Assert.assertSame( TUPLES_E.get( 0 ), tuples.get( 0 ) );
229 Assert.assertSame( TUPLES_E.get( 1 ), tuples.get( 1 ) );
230 }
231 }