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 junit.framework.Assert;
31 import junit.framework.TestCase;
32
33 import org.apache.directory.server.core.authz.support.MostSpecificUserClassFilter;
34 import org.apache.directory.server.core.authz.support.OperationScope;
35 import org.apache.directory.shared.ldap.aci.ACITuple;
36 import org.apache.directory.shared.ldap.aci.MicroOperation;
37 import org.apache.directory.shared.ldap.aci.ProtectedItem;
38 import org.apache.directory.shared.ldap.aci.UserClass;
39 import org.apache.directory.shared.ldap.constants.AuthenticationLevel;
40 import org.apache.directory.shared.ldap.name.LdapDN;
41 import org.apache.directory.shared.ldap.subtree.SubtreeSpecification;
42
43
44
45
46
47
48
49
50 public class MostSpecificUserClassFilterTest extends TestCase
51 {
52 private static final Set<LdapDN> EMPTY_NAME_SET = Collections.unmodifiableSet( new HashSet<LdapDN>() );
53 private static final Set<MicroOperation> EMPTY_MICRO_OPERATION_SET = Collections.unmodifiableSet( new HashSet<MicroOperation>() );
54 private static final Collection<UserClass> EMPTY_USER_CLASS_COLLECTION = Collections.unmodifiableCollection( new ArrayList<UserClass>() );
55 private static final Collection<SubtreeSpecification> EMPTY_SUBTREE_SPECIFICATION_COLLECTION = Collections.unmodifiableCollection( new ArrayList<SubtreeSpecification>() );
56 private static final Collection<ProtectedItem> EMPTY_PROTECTED_ITEM_COLLECTION = Collections.unmodifiableCollection( new ArrayList<ProtectedItem>() );
57 private static final Collection<ACITuple> EMPTY_ACI_TUPLE_COLLECTION = Collections.unmodifiableCollection( new ArrayList<ACITuple>() );
58
59 private static final List<ACITuple> TUPLES_A = new ArrayList<ACITuple>();
60 private static final List<ACITuple> TUPLES_B = new ArrayList<ACITuple>();
61 private static final List<ACITuple> TUPLES_C = new ArrayList<ACITuple>();
62 private static final List<ACITuple> TUPLES_D = new ArrayList<ACITuple>();
63 private static final List<ACITuple> TUPLES_E = new ArrayList<ACITuple>();
64
65 static
66 {
67 Collection<UserClass> name = new ArrayList<UserClass>();
68 Collection<UserClass> thisEntry = new ArrayList<UserClass>();
69 Collection<UserClass> userGroup = new ArrayList<UserClass>();
70 Collection<UserClass> subtree = new ArrayList<UserClass>();
71 Collection<UserClass> allUsers = new ArrayList<UserClass>();
72
73 name.add( new UserClass.Name( EMPTY_NAME_SET ) );
74 thisEntry.add( UserClass.THIS_ENTRY );
75 userGroup.add( new UserClass.UserGroup( EMPTY_NAME_SET ) );
76 subtree.add( new UserClass.Subtree( EMPTY_SUBTREE_SPECIFICATION_COLLECTION ) );
77 allUsers.add( UserClass.ALL_USERS );
78
79 ACITuple nameTuple = new ACITuple( name, AuthenticationLevel.NONE, EMPTY_PROTECTED_ITEM_COLLECTION, EMPTY_MICRO_OPERATION_SET, true, 0 );
80 ACITuple thisEntryTuple = new ACITuple( thisEntry, AuthenticationLevel.NONE, EMPTY_PROTECTED_ITEM_COLLECTION, EMPTY_MICRO_OPERATION_SET, true, 0 );
81 ACITuple userGroupTuple = new ACITuple( userGroup, AuthenticationLevel.NONE, EMPTY_PROTECTED_ITEM_COLLECTION, EMPTY_MICRO_OPERATION_SET, true, 0 );
82 ACITuple subtreeTuple = new ACITuple( subtree, AuthenticationLevel.NONE, EMPTY_PROTECTED_ITEM_COLLECTION, EMPTY_MICRO_OPERATION_SET, true, 0 );
83 ACITuple allUsersTuple = new ACITuple( allUsers, AuthenticationLevel.NONE, EMPTY_PROTECTED_ITEM_COLLECTION, EMPTY_MICRO_OPERATION_SET, true, 0 );
84
85 TUPLES_A.add( nameTuple );
86 TUPLES_A.add( thisEntryTuple );
87 TUPLES_A.add( userGroupTuple );
88 TUPLES_A.add( subtreeTuple );
89 TUPLES_A.add( allUsersTuple );
90
91 TUPLES_B.add( thisEntryTuple );
92 TUPLES_B.add( userGroupTuple );
93 TUPLES_B.add( subtreeTuple );
94 TUPLES_B.add( allUsersTuple );
95
96 TUPLES_C.add( userGroupTuple );
97 TUPLES_C.add( subtreeTuple );
98 TUPLES_C.add( allUsersTuple );
99
100 TUPLES_D.add( subtreeTuple );
101 TUPLES_D.add( allUsersTuple );
102
103 TUPLES_E.add( allUsersTuple );
104 TUPLES_E.add( allUsersTuple );
105 }
106
107
108 public void testZeroOrOneTuple() throws Exception
109 {
110 MostSpecificUserClassFilter filter = new MostSpecificUserClassFilter();
111
112 Assert.assertEquals( 0, filter.filter( null, EMPTY_ACI_TUPLE_COLLECTION, OperationScope.ATTRIBUTE_TYPE_AND_VALUE, null, null,
113 null, null, null, null, null, null, null, null, null ).size() );
114
115 Collection<ACITuple> tuples = new ArrayList<ACITuple>();
116 tuples.add( new ACITuple( EMPTY_USER_CLASS_COLLECTION, AuthenticationLevel.NONE, EMPTY_PROTECTED_ITEM_COLLECTION, EMPTY_MICRO_OPERATION_SET, false, 0 ) );
117
118 Assert.assertEquals( 1, filter.filter( null, tuples, OperationScope.ATTRIBUTE_TYPE_AND_VALUE, null, null, null, null,
119 null, null, null, null, null, null, null ).size() );
120 }
121
122
123 public void testNameAndThisEntry() throws Exception
124 {
125 MostSpecificUserClassFilter filter = new MostSpecificUserClassFilter();
126
127 List<ACITuple> tuples = new ArrayList<ACITuple>( TUPLES_A );
128 tuples = ( List<ACITuple> ) filter.filter( null, tuples, OperationScope.ENTRY, null, null, null, null, null, null, null, null,
129 null, null, null );
130
131 Assert.assertEquals( 2, tuples.size() );
132 Assert.assertSame( TUPLES_A.get( 0 ), tuples.get( 0 ) );
133 Assert.assertSame( TUPLES_A.get( 1 ), tuples.get( 1 ) );
134 }
135
136
137 public void testThisEntry() throws Exception
138 {
139 MostSpecificUserClassFilter filter = new MostSpecificUserClassFilter();
140
141 List<ACITuple> tuples = new ArrayList<ACITuple>( TUPLES_B );
142 tuples = ( List<ACITuple> ) filter.filter( null, tuples, OperationScope.ENTRY, null, null, null, null, null, null, null, null,
143 null, null, null );
144
145 Assert.assertEquals( 1, tuples.size() );
146 Assert.assertSame( TUPLES_B.get( 0 ), tuples.get( 0 ) );
147 }
148
149
150 public void testUserGroup() throws Exception
151 {
152 MostSpecificUserClassFilter filter = new MostSpecificUserClassFilter();
153
154 List<ACITuple> tuples = new ArrayList<ACITuple>( TUPLES_C );
155 tuples = ( List<ACITuple> ) filter.filter( null, tuples, OperationScope.ENTRY, null, null, null, null, null, null, null, null,
156 null, null, null );
157
158 Assert.assertEquals( 1, tuples.size() );
159 Assert.assertSame( TUPLES_C.get( 0 ), tuples.get( 0 ) );
160 }
161
162
163 public void testSubtree() throws Exception
164 {
165 MostSpecificUserClassFilter filter = new MostSpecificUserClassFilter();
166
167 List<ACITuple> tuples = new ArrayList<ACITuple>( TUPLES_D );
168 tuples = ( List<ACITuple> ) filter.filter( null, tuples, OperationScope.ENTRY, null, null, null, null, null, null, null, null,
169 null, null, null );
170
171 Assert.assertEquals( 1, tuples.size() );
172 Assert.assertSame( TUPLES_D.get( 0 ), tuples.get( 0 ) );
173 }
174
175
176 public void testOthers() throws Exception
177 {
178 MostSpecificUserClassFilter filter = new MostSpecificUserClassFilter();
179
180 List<ACITuple> tuples = new ArrayList<ACITuple>( TUPLES_E );
181 tuples = (List<ACITuple>)filter.filter( null, tuples, OperationScope.ENTRY, null, null, null, null, null, null, null, null,
182 null, null, null );
183
184 Assert.assertEquals( 2, tuples.size() );
185 Assert.assertSame( TUPLES_E.get( 0 ), tuples.get( 0 ) );
186 Assert.assertSame( TUPLES_E.get( 1 ), tuples.get( 1 ) );
187 }
188 }