Sfoglia il codice sorgente

Added some further tests for LDAP searching with a different user search base.

Luke Taylor 17 anni fa
parent
commit
e82dfd3f1a

+ 10 - 0
core/src/test/java/org/springframework/security/config/LdapUserServiceBeanDefinitionParserTests.java

@@ -38,6 +38,16 @@ public class LdapUserServiceBeanDefinitionParserTests {
         assertEquals(2, ben.getAuthorities().length);
     }
 
+    @Test
+    public void differentUserSearchBaseWorksAsExpected() throws Exception {
+        setContext("<ldap-user-service id='ldapUDS' user-search-base='ou=otherpeople' user-search-filter='(cn={0})' group-search-filter='member={0}' /><ldap-server />");
+
+        UserDetailsService uds = (UserDetailsService) appCtx.getBean("ldapUDS");
+        UserDetails joe = uds.loadUserByUsername("Joe Smeth");
+
+        assertEquals("Joe Smeth", joe.getUsername());
+    }
+
     private void setContext(String context) {
         appCtx = new InMemoryXmlApplicationContext(context);
     }

+ 12 - 6
core/src/test/java/org/springframework/security/ldap/search/FilterBasedLdapUserSearchTests.java

@@ -44,7 +44,7 @@ public class FilterBasedLdapUserSearchTests extends AbstractLdapIntegrationTests
     }
 
     @Test
-    public void testBasicSearch() {
+    public void basicSearchSucceeds() {
         FilterBasedLdapUserSearch locator = new FilterBasedLdapUserSearch("ou=people", "(uid={0})", dirCtxFactory);
         locator.setSearchSubtree(false);
         locator.setSearchTimeLimit(0);
@@ -58,7 +58,7 @@ public class FilterBasedLdapUserSearchTests extends AbstractLdapIntegrationTests
 
     // Try some funny business with filters.
     @Test
-    public void testExtraFilterPartToExcludeBob() throws Exception {
+    public void extraFilterPartToExcludeBob() throws Exception {
         FilterBasedLdapUserSearch locator = new FilterBasedLdapUserSearch("ou=people",
                 "(&(cn=*)(!(|(uid={0})(uid=rod))))", dirCtxFactory);
 
@@ -70,19 +70,19 @@ public class FilterBasedLdapUserSearchTests extends AbstractLdapIntegrationTests
     }
 
     @Test(expected=IncorrectResultSizeDataAccessException.class)
-    public void testFailsOnMultipleMatches() {
+    public void searchFailsOnMultipleMatches() {
         FilterBasedLdapUserSearch locator = new FilterBasedLdapUserSearch("ou=people", "(cn=*)", dirCtxFactory);
         locator.searchForUser("Ignored");
     }
 
     @Test(expected=UsernameNotFoundException.class)
-    public void testSearchForInvalidUserFails() {
+    public void searchForInvalidUserFails() {
         FilterBasedLdapUserSearch locator = new FilterBasedLdapUserSearch("ou=people", "(uid={0})", dirCtxFactory);
         locator.searchForUser("Joe");
     }
 
     @Test
-    public void testSubTreeSearchSucceeds() {
+    public void subTreeSearchSucceeds() {
         // Don't set the searchBase, so search from the root.
         FilterBasedLdapUserSearch locator = new FilterBasedLdapUserSearch("", "(cn={0})", dirCtxFactory);
         locator.setSearchSubtree(true);
@@ -93,5 +93,11 @@ public class FilterBasedLdapUserSearchTests extends AbstractLdapIntegrationTests
         assertEquals(new DistinguishedName("uid=ben,ou=people"), ben.getDn());
     }
 
-    // TODO: Add test with non-uid username
+    @Test
+    public void searchWithDifferentSearchBaseIsSuccessful() throws Exception {
+        FilterBasedLdapUserSearch locator = new FilterBasedLdapUserSearch("ou=otherpeople", "(cn={0})", dirCtxFactory);
+        DirContextOperations joe = locator.searchForUser("Joe Smeth");
+        assertEquals("Joe Smeth", joe.getStringAttribute("cn"));
+    }
+
 }

+ 15 - 0
core/src/test/resources/test-server.ldif

@@ -13,6 +13,11 @@ objectclass: top
 objectclass: organizationalUnit
 ou: people
 
+dn: ou=otherpeople,dc=springframework,dc=org
+objectclass: top
+objectclass: organizationalUnit
+ou: otherpeople
+
 dn: uid=ben,ou=people,dc=springframework,dc=org
 objectclass: top
 objectclass: person
@@ -33,6 +38,16 @@ sn: Hamilton
 uid: bob
 userPassword: bobspassword
 
+dn: uid=joe,ou=otherpeople,dc=springframework,dc=org
+objectclass: top
+objectclass: person
+objectclass: organizationalPerson
+objectclass: inetOrgPerson
+cn: Joe Smeth
+sn: Smeth
+uid: joe
+userPassword: joespassword
+
 dn: cn=developers,ou=groups,dc=springframework,dc=org
 objectclass: top
 objectclass: groupOfNames