keycloak-aplcache

Keycloak 4533 commit

4/7/2017 10:26:22 AM

Details

diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/ldap/LDAPProvidersIntegrationTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/ldap/LDAPProvidersIntegrationTest.java
index 0982d5d..3f8e854 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/ldap/LDAPProvidersIntegrationTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/ldap/LDAPProvidersIntegrationTest.java
@@ -432,7 +432,7 @@ public class LDAPProvidersIntegrationTest {
         loginPage.open();
         loginPage.clickRegister();
         registerPage.assertCurrent();
-
+        
         // check existing username
         registerPage.register("firstName", "lastName", "email@mail.cz", "existing", "Password1", "Password1");
         registerPage.assertCurrent();
@@ -443,7 +443,44 @@ public class LDAPProvidersIntegrationTest {
         registerPage.assertCurrent();
         Assert.assertEquals("Email already exists.", registerPage.getError());
     }
-
+  
+    
+   
+    //
+    // KEYCLOAK-4533
+    //
+    @Test
+    public void testLDAPUserDeletionImport() {
+       
+    	KeycloakSession session = keycloakRule.startSession();
+        RealmModel appRealm = new RealmManager(session).getRealmByName("test");
+        LDAPStorageProvider ldapProvider = LDAPTestUtils.getLdapProvider(session, ldapModel);        	
+      	LDAPConfig config = ldapProvider.getLdapIdentityStore().getConfig();      
+      
+      	// Make sure mary is gone
+      	LDAPTestUtils.removeLDAPUserByUsername(ldapProvider, appRealm, config, "maryjane");
+      	
+     // Create the user in LDAP and register him
+
+       LDAPObject mary = LDAPTestUtils.addLDAPUser(ldapProvider, appRealm, "maryjane", "mary", "yram", "mj@testing.redhat.cz", null, "12398");
+       LDAPTestUtils.updateLDAPPassword(ldapProvider, mary, "Password1");
+        
+        try {
+        	
+        	// Log in and out of the user
+         	loginSuccessAndLogout("maryjane", "Password1");  
+           
+         	// Delete LDAP User
+        	LDAPTestUtils.removeLDAPUserByUsername(ldapProvider, appRealm, config, "maryjane");
+   
+        	// Make sure the deletion took place. 
+        	List<UserModel> deletedUsers = session.users().searchForUser("mary yram", appRealm);
+            Assert.assertTrue(deletedUsers.isEmpty());
+                  
+        } finally {
+            keycloakRule.stopSession(session, false);
+        }
+    }
     @Test
     public void registerUserLdapSuccess() {
         loginPage.open();
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/ldap/LDAPTestUtils.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/ldap/LDAPTestUtils.java
index f41a7ba..6a90636 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/ldap/LDAPTestUtils.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/ldap/LDAPTestUtils.java
@@ -32,6 +32,7 @@ import org.keycloak.representations.idm.CredentialRepresentation;
 import org.keycloak.representations.idm.SynchronizationResultRepresentation;
 import org.keycloak.storage.UserStorageProvider;
 import org.keycloak.storage.ldap.LDAPStorageProvider;
+import org.keycloak.storage.ldap.LDAPConfig;
 import org.keycloak.storage.ldap.LDAPUtils;
 import org.keycloak.storage.ldap.idm.model.LDAPObject;
 import org.keycloak.storage.ldap.idm.query.internal.LDAPQuery;
@@ -263,7 +264,20 @@ public class LDAPTestUtils {
             ldapStore.remove(ldapUser);
         }
     }
-
+    
+    public static void removeLDAPUserByUsername(LDAPStorageProvider ldapProvider, RealmModel realm, LDAPConfig config, String username) {
+        LDAPIdentityStore ldapStore = ldapProvider.getLdapIdentityStore();
+        LDAPQuery ldapQuery = LDAPUtils.createQueryForUserSearch(ldapProvider, realm);
+        List<LDAPObject> allUsers = ldapQuery.getResultList();
+        
+        // This is ugly, we are iterating over the entire set of ldap users and deleting the one where the username matches.  TODO: Find a better way!
+        for (LDAPObject ldapUser : allUsers) {
+            if (username.equals(LDAPUtils.getUsername(ldapUser, config))) {
+            	ldapStore.remove(ldapUser);
+            }
+        }
+    }
+    
     public static void removeAllLDAPRoles(KeycloakSession session, RealmModel appRealm, ComponentModel ldapModel, String mapperName) {
         ComponentModel mapperModel = getSubcomponentByName(appRealm, ldapModel, mapperName);
         LDAPStorageProvider ldapProvider = LDAPTestUtils.getLdapProvider(session, ldapModel);