user fed tests
This commit is contained in:
parent
8b535c5da6
commit
2a05f00d0c
7 changed files with 87 additions and 16 deletions
|
@ -118,11 +118,6 @@ public class UserStorageManager implements UserProvider {
|
||||||
return localStorage().addUser(realm, username.toLowerCase());
|
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) {
|
public StorageProvider getStorageProvider(RealmModel realm, String providerId) {
|
||||||
StorageProviderModel model = realm.getStorageProvider(providerId);
|
StorageProviderModel model = realm.getStorageProvider(providerId);
|
||||||
if (model == null) return null;
|
if (model == null) return null;
|
||||||
|
|
|
@ -21,7 +21,13 @@ import org.junit.ClassRule;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.keycloak.OAuth2Constants;
|
import org.keycloak.OAuth2Constants;
|
||||||
|
import org.keycloak.models.GroupModel;
|
||||||
|
import org.keycloak.models.KeycloakSession;
|
||||||
import org.keycloak.models.RealmModel;
|
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.services.managers.RealmManager;
|
||||||
import org.keycloak.storage.StorageProviderModel;
|
import org.keycloak.storage.StorageProviderModel;
|
||||||
import org.keycloak.testsuite.OAuthClient;
|
import org.keycloak.testsuite.OAuthClient;
|
||||||
|
@ -32,6 +38,8 @@ import org.keycloak.testsuite.rule.WebResource;
|
||||||
import org.keycloak.testsuite.rule.WebRule;
|
import org.keycloak.testsuite.rule.WebRule;
|
||||||
import org.openqa.selenium.WebDriver;
|
import org.openqa.selenium.WebDriver;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
||||||
* @version $Revision: 1 $
|
* @version $Revision: 1 $
|
||||||
|
@ -43,9 +51,17 @@ public class UserFederationStorageTest {
|
||||||
@Override
|
@Override
|
||||||
public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) {
|
public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) {
|
||||||
StorageProviderModel model = new StorageProviderModel();
|
StorageProviderModel model = new StorageProviderModel();
|
||||||
model.setDisplayName("user-props");
|
model.setDisplayName("read-only-user-props");
|
||||||
model.setPriority(1);
|
model.setPriority(1);
|
||||||
model.setProviderName(UserPropertyFileStorageFactory.PROVIDER_ID);
|
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);
|
appRealm.addStorageProvider(model);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -82,7 +98,52 @@ public class UserFederationStorageTest {
|
||||||
@Test
|
@Test
|
||||||
public void testLoginSuccess() {
|
public void testLoginSuccess() {
|
||||||
loginSuccessAndLogout("tbrady", "goat");
|
loginSuccessAndLogout("tbrady", "goat");
|
||||||
|
loginSuccessAndLogout("thor", "hammer");
|
||||||
loginBadPassword("tbrady");
|
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");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,20 @@ public class UserPropertyFileStorage implements UserLookupProvider, StorageProvi
|
||||||
return createUser(realm, username);
|
return createUser(realm, username);
|
||||||
}
|
}
|
||||||
|
|
||||||
private UserModel createUser(final RealmModel realm, final String 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) {
|
return new AbstractUserAdapter(session, realm, model) {
|
||||||
@Override
|
@Override
|
||||||
public String getUsername() {
|
public String getUsername() {
|
||||||
|
@ -70,6 +83,7 @@ public class UserPropertyFileStorage implements UserLookupProvider, StorageProvi
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UserModel getUserByUsername(String username, RealmModel realm) {
|
public UserModel getUserByUsername(String username, RealmModel realm) {
|
||||||
|
|
|
@ -48,7 +48,7 @@ public class UserPropertyFileStorageFactory implements StorageProviderFactory {
|
||||||
public StorageProvider getInstance(KeycloakSession session, StorageProviderModel model) {
|
public StorageProvider getInstance(KeycloakSession session, StorageProviderModel model) {
|
||||||
Properties props = new Properties();
|
Properties props = new Properties();
|
||||||
try {
|
try {
|
||||||
props.load(getClass().getResourceAsStream("/storage-test/user-password.properties"));
|
props.load(getClass().getResourceAsStream(model.getConfig().get("property.file")));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||||
log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %t [%c] %m%n
|
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
|
# Enable to view events
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
tbrady=goat
|
|
@ -1 +1 @@
|
||||||
tbrady=goat
|
thor=hammer
|
Loading…
Reference in a new issue