keycloak-memoizeit

user fed tests

7/20/2016 6:26:00 PM

Details

diff --git a/server-spi/src/main/java/org/keycloak/storage/UserStorageManager.java b/server-spi/src/main/java/org/keycloak/storage/UserStorageManager.java
index 24f3c3d..72e4280 100755
--- a/server-spi/src/main/java/org/keycloak/storage/UserStorageManager.java
+++ b/server-spi/src/main/java/org/keycloak/storage/UserStorageManager.java
@@ -118,11 +118,6 @@ public class UserStorageManager implements UserProvider {
         return localStorage().addUser(realm, username.toLowerCase());
     }
 
-    public StorageProvider getStorageProvider(StorageProviderModel model) {
-        StorageProviderFactory factory = (StorageProviderFactory)session.getKeycloakSessionFactory().getProviderFactory(StorageProvider.class, model.getProviderName());
-        return factory.getInstance(session, model);
-    }
-
     public StorageProvider getStorageProvider(RealmModel realm, String providerId) {
         StorageProviderModel model = realm.getStorageProvider(providerId);
         if (model == null) return null;
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserFederationStorageTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserFederationStorageTest.java
index 2da8799..6e546a3 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserFederationStorageTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserFederationStorageTest.java
@@ -21,7 +21,13 @@ import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.keycloak.OAuth2Constants;
+import org.keycloak.models.GroupModel;
+import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.RealmModel;
+import org.keycloak.models.RoleModel;
+import org.keycloak.models.UserCredentialModel;
+import org.keycloak.models.UserModel;
+import org.keycloak.models.cache.infinispan.UserAdapter;
 import org.keycloak.services.managers.RealmManager;
 import org.keycloak.storage.StorageProviderModel;
 import org.keycloak.testsuite.OAuthClient;
@@ -32,6 +38,8 @@ import org.keycloak.testsuite.rule.WebResource;
 import org.keycloak.testsuite.rule.WebRule;
 import org.openqa.selenium.WebDriver;
 
+import java.util.Set;
+
 /**
  * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
  * @version $Revision: 1 $
@@ -43,9 +51,17 @@ public class UserFederationStorageTest {
         @Override
         public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) {
             StorageProviderModel model = new StorageProviderModel();
-            model.setDisplayName("user-props");
+            model.setDisplayName("read-only-user-props");
             model.setPriority(1);
             model.setProviderName(UserPropertyFileStorageFactory.PROVIDER_ID);
+            model.getConfig().put("property.file", "/storage-test/read-only-user-password.properties");
+            appRealm.addStorageProvider(model);
+            model = new StorageProviderModel();
+            model.setDisplayName("user-props");
+            model.setPriority(2);
+            model.setProviderName(UserPropertyFileStorageFactory.PROVIDER_ID);
+            model.getConfig().put("property.file", "/storage-test/user-password.properties");
+            model.getConfig().put("USER_FEDERATED_STORAGE", "true");
             appRealm.addStorageProvider(model);
         }
     });
@@ -82,7 +98,52 @@ public class UserFederationStorageTest {
     @Test
     public void testLoginSuccess() {
         loginSuccessAndLogout("tbrady", "goat");
+        loginSuccessAndLogout("thor", "hammer");
         loginBadPassword("tbrady");
     }
 
+    @Test
+    public void testUpdate() {
+        KeycloakSession session = keycloakRule.startSession();
+        RealmModel realm = session.realms().getRealmByName("test");
+        UserModel thor = session.users().getUserByUsername("thor", realm);
+        thor.setFirstName("Stian");
+        thor.setLastName("Thorgersen");
+        thor.setEmailVerified(true);
+        long thorCreated = System.currentTimeMillis() - 100;
+        thor.setCreatedTimestamp(thorCreated);
+        thor.setEmail("thor@hammer.com");
+        thor.setSingleAttribute("test-attribute", "value");
+        RoleModel role = realm.addRole("foo-role");
+        thor.grantRole(role);
+        GroupModel group = realm.createGroup("my-group");
+        thor.joinGroup(group);
+        thor.addRequiredAction("POOP");
+        keycloakRule.stopSession(session, true);
+
+        session = keycloakRule.startSession();
+        realm = session.realms().getRealmByName("test");
+        thor = session.users().getUserByUsername("thor", realm);
+        Assert.assertEquals("Stian", thor.getFirstName());
+        Assert.assertEquals("Thorgersen", thor.getLastName());
+        Assert.assertEquals("thor@hammer.com", thor.getEmail());
+        Assert.assertEquals("value", thor.getFirstAttribute("test-attribute"));
+        Assert.assertTrue(thor.isEmailVerified());
+        Assert.assertTrue(thor instanceof UserAdapter);
+        Set<RoleModel> roles = thor.getRoleMappings();
+        System.out.println("num roles " + roles.size());
+        Assert.assertTrue(roles.size() > 1);
+        role = realm.getRole("foo-role");
+        Assert.assertTrue(thor.hasRole(role));
+
+        Set<GroupModel> groups = thor.getGroups();
+        Assert.assertEquals("my-group", groups.iterator().next().getName());
+        System.out.println("num groups " + groups.size());
+        Assert.assertTrue(thor.getRequiredActions().iterator().next().equals("POOP"));
+        thor.removeRequiredAction("POOP");
+        thor.updateCredential(UserCredentialModel.password("lightning"));
+        keycloakRule.stopSession(session, true);
+        loginSuccessAndLogout("thor", "lightning");
+    }
+
 }
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserPropertyFileStorage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserPropertyFileStorage.java
index 82a10c1..52a43ec 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserPropertyFileStorage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserPropertyFileStorage.java
@@ -62,13 +62,27 @@ public class UserPropertyFileStorage implements UserLookupProvider, StorageProvi
         return createUser(realm, username);
     }
 
-    private UserModel createUser(final RealmModel realm, final String username) {
-        return new AbstractUserAdapter(session, realm, model) {
-            @Override
-            public String getUsername() {
-                return username;
-            }
-        };
+    private UserModel createUser(RealmModel realm, String username) {
+        if (federatedStorageEnabled) {
+            return new AbstractUserAdapterFederatedStorage(session, realm,  model) {
+                @Override
+                public String getUsername() {
+                    return username;
+                }
+
+                @Override
+                public void setUsername(String username) {
+                    throw new RuntimeException("Unsupported");
+                }
+            };
+        } else {
+            return new AbstractUserAdapter(session, realm, model) {
+                @Override
+                public String getUsername() {
+                    return username;
+                }
+            };
+        }
     }
 
     @Override
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserPropertyFileStorageFactory.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserPropertyFileStorageFactory.java
index 0ebbce2..d08065c 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserPropertyFileStorageFactory.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserPropertyFileStorageFactory.java
@@ -48,7 +48,7 @@ public class UserPropertyFileStorageFactory implements StorageProviderFactory {
     public StorageProvider getInstance(KeycloakSession session, StorageProviderModel model) {
         Properties props = new Properties();
         try {
-            props.load(getClass().getResourceAsStream("/storage-test/user-password.properties"));
+            props.load(getClass().getResourceAsStream(model.getConfig().get("property.file")));
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
diff --git a/testsuite/integration/src/test/resources/log4j.properties b/testsuite/integration/src/test/resources/log4j.properties
index 327102e..68671c3 100755
--- a/testsuite/integration/src/test/resources/log4j.properties
+++ b/testsuite/integration/src/test/resources/log4j.properties
@@ -21,7 +21,7 @@ log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %t [%c] %m%n
 
-log4j.logger.org.keycloak=info
+log4j.logger.org.keycloak=debug
 
 
 # Enable to view events
diff --git a/testsuite/integration/src/test/resources/storage-test/read-only-user-password.properties b/testsuite/integration/src/test/resources/storage-test/read-only-user-password.properties
new file mode 100644
index 0000000..1672680
--- /dev/null
+++ b/testsuite/integration/src/test/resources/storage-test/read-only-user-password.properties
@@ -0,0 +1 @@
+tbrady=goat
\ No newline at end of file
diff --git a/testsuite/integration/src/test/resources/storage-test/user-password.properties b/testsuite/integration/src/test/resources/storage-test/user-password.properties
index 1672680..9dd1c15 100644
--- a/testsuite/integration/src/test/resources/storage-test/user-password.properties
+++ b/testsuite/integration/src/test/resources/storage-test/user-password.properties
@@ -1 +1 @@
-tbrady=goat
\ No newline at end of file
+thor=hammer
\ No newline at end of file