@@ -86,59 +86,56 @@ class LdapUserRolesProviderTest extends Specification {
86
86
" notEmpty" |_
87
87
}
88
88
89
- void " multiLoadRoles should use loadRoles when groupUserAttributes is empty " () {
89
+ void " multiLoadRoles should call ldap only N+1 times for groups and users in each group " () {
90
90
given :
91
91
def users = [externalUser(" user1" ), externalUser(" user2" )]
92
92
def role1 = new Role (" group1" )
93
93
def role2 = new Role (" group2" )
94
94
95
95
def configProps = baseConfigProps()
96
- def provider = Spy ( LdapUserRolesProvider ){
97
- loadRoles(_ as ExternalUser ) >>> [[role1], [role2]]
98
- } . setConfigProps( configProps)
96
+ configProps . groupSearchBase = " group search base "
97
+ configProps . userSearchBase = " user search base "
98
+ configProps. userIdAttribute = " sAMAccountName "
99
99
100
- when :
101
- configProps. groupSearchBase = " "
102
- def roles = provider. multiLoadRoles(users)
100
+ provider. configProps = configProps
103
101
104
- then :
105
- roles == [:]
102
+ provider. ldapTemplate = Mock (SpringSecurityLdapTemplate ) {
103
+ 1 * search(configProps. groupSearchBase, * _) >> [Pair . of(" group1 dn" , role1) , Pair . of(" group2 dn" , role2)]
104
+ 1 * search(configProps. userSearchBase, { it. contains(" group1 dn" ) }, _) >> [Pair . of(" user1" , role1)]
105
+ 1 * search(configProps. userSearchBase, { it. contains(" group2 dn" ) }, _) >> [Pair . of(" user2" , role2)]
106
+ }
106
107
107
108
when :
108
- configProps. groupSearchBase = " notEmpty"
109
- roles = provider. multiLoadRoles(users)
109
+ def roles = provider. multiLoadRoles(users)
110
110
111
111
then :
112
112
roles == [user1 : [role1], user2 : [role2]]
113
113
}
114
114
115
- void " multiLoadRoles should use groupUserAttributes when groupUserAttributes is not empty " () {
115
+ void " multiLoadRoles should use provided user ids because ldap filters can be case insensitive " () {
116
116
given :
117
- def users = [externalUser(" user1 " ), externalUser(" user2 " )]
117
+ def users = [externalUser(" User1 " ), externalUser(" User2 " )]
118
118
def role1 = new Role (" group1" )
119
119
def role2 = new Role (" group2" )
120
120
121
- def configProps = baseConfigProps(). setGroupSearchBase(" notEmpty" ). setGroupUserAttributes(" member" )
122
- def provider = Spy (LdapUserRolesProvider ){
123
- 2 * loadRoles(_) >>> [[role1], [role2]]
124
- }. setConfigProps(configProps)
125
-
126
- when : " thresholdToUseGroupMembership is too high"
127
- configProps. thresholdToUseGroupMembership = 100
128
- def roles = provider. multiLoadRoles(users)
121
+ def configProps = baseConfigProps()
122
+ configProps. groupSearchBase = " group search base"
123
+ configProps. userSearchBase = " user search base"
124
+ configProps. userIdAttribute = " sAMAccountName"
129
125
130
- then : " should use loadRoles"
131
- roles == [user1 : [role1], user2 : [role2]]
126
+ provider. configProps = configProps
132
127
133
- when : " users count is greater than thresholdToUseGroupMembership"
134
- configProps. thresholdToUseGroupMembership = 1
135
128
provider. ldapTemplate = Mock (SpringSecurityLdapTemplate ) {
136
- 1 * search(* _) >> [[Pair . of(" user1" ,role1)], [Pair . of(" user2" , role2)], [Pair . of(" unknown" , role2)]]
129
+ 1 * search(configProps. groupSearchBase, * _) >> [Pair . of(" group1 dn" , role1) , Pair . of(" group2 dn" , role2)]
130
+ 1 * search(configProps. userSearchBase, { it. contains(" group1 dn" ) }, _) >> [Pair . of(" user1" , role1)]
131
+ 1 * search(configProps. userSearchBase, { it. contains(" group2 dn" ) }, _) >> [Pair . of(" user2" , role2)]
137
132
}
138
- roles = provider. multiLoadRoles(users)
139
133
140
- then : " should use ldapTemplate.search method"
141
- roles == [user1 : [role1], user2 : [role2]]
134
+ when :
135
+ def roles = provider. multiLoadRoles(users)
136
+
137
+ then :
138
+ roles == [User1 : [role1], User2 : [role2]]
142
139
}
143
140
144
141
private static ExternalUser externalUser (String id ) {
0 commit comments