keycloak-memoizeit
Changes
testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserFederationStorageTest.java 63(+62 -1)
testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserPropertyFileStorage.java 28(+21 -7)
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