Testsuite PoC - Add managed user (#31151)
Closes #31150 Signed-off-by: stianst <stianst@gmail.com>
This commit is contained in:
parent
5fdb572f5f
commit
b5468c8b63
8 changed files with 144 additions and 11 deletions
|
@ -4,11 +4,16 @@ import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.keycloak.admin.client.resource.ClientResource;
|
import org.keycloak.admin.client.resource.ClientResource;
|
||||||
import org.keycloak.admin.client.resource.RealmResource;
|
import org.keycloak.admin.client.resource.RealmResource;
|
||||||
|
import org.keycloak.admin.client.resource.UserResource;
|
||||||
import org.keycloak.representations.idm.ClientRepresentation;
|
import org.keycloak.representations.idm.ClientRepresentation;
|
||||||
import org.keycloak.test.framework.KeycloakIntegrationTest;
|
import org.keycloak.test.framework.KeycloakIntegrationTest;
|
||||||
import org.keycloak.test.framework.TestClient;
|
import org.keycloak.test.framework.TestClient;
|
||||||
import org.keycloak.test.framework.TestRealm;
|
import org.keycloak.test.framework.TestRealm;
|
||||||
|
import org.keycloak.test.framework.TestUser;
|
||||||
import org.keycloak.test.framework.injection.LifeCycle;
|
import org.keycloak.test.framework.injection.LifeCycle;
|
||||||
|
import org.keycloak.test.framework.realm.DefaultClientConfig;
|
||||||
|
import org.keycloak.test.framework.realm.DefaultRealmConfig;
|
||||||
|
import org.keycloak.test.framework.realm.DefaultUserConfig;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -18,20 +23,25 @@ public class GlobalManagedResourcesTest {
|
||||||
@TestRealm(lifecycle = LifeCycle.GLOBAL)
|
@TestRealm(lifecycle = LifeCycle.GLOBAL)
|
||||||
RealmResource realmResource;
|
RealmResource realmResource;
|
||||||
|
|
||||||
@TestClient
|
@TestClient(lifecycle = LifeCycle.GLOBAL)
|
||||||
ClientResource clientResource;
|
ClientResource clientResource;
|
||||||
|
|
||||||
|
@TestUser(lifecycle = LifeCycle.GLOBAL)
|
||||||
|
UserResource userResource;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreatedRealm() {
|
public void testCreatedRealm() {
|
||||||
Assertions.assertEquals("DefaultRealmConfig", realmResource.toRepresentation().getRealm());
|
Assertions.assertEquals(DefaultRealmConfig.class.getSimpleName(), realmResource.toRepresentation().getRealm());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreatedClient() {
|
public void testCreatedClient() {
|
||||||
Assertions.assertEquals("GlobalManagedResourcesTest", clientResource.toRepresentation().getClientId());
|
Assertions.assertEquals(DefaultClientConfig.class.getSimpleName(), clientResource.toRepresentation().getClientId());
|
||||||
|
}
|
||||||
|
|
||||||
List<ClientRepresentation> clients = realmResource.clients().findByClientId("GlobalManagedResourcesTest");
|
@Test
|
||||||
Assertions.assertEquals(1, clients.size());
|
public void testCreatedUser() {
|
||||||
|
Assertions.assertEquals(DefaultUserConfig.class.getSimpleName().toLowerCase(), userResource.toRepresentation().getUsername());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,14 +23,14 @@ public class ManagedResources2Test {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreatedRealm() {
|
public void testCreatedRealm() {
|
||||||
Assertions.assertEquals("ManagedResources2Test", realmResource.toRepresentation().getRealm());
|
Assertions.assertEquals(ManagedResources2Test.class.getSimpleName(), realmResource.toRepresentation().getRealm());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreatedClient() {
|
public void testCreatedClient() {
|
||||||
Assertions.assertEquals("ManagedResources2Test", clientResource.toRepresentation().getClientId());
|
Assertions.assertEquals(ManagedResources2Test.class.getSimpleName(), clientResource.toRepresentation().getClientId());
|
||||||
|
|
||||||
List<ClientRepresentation> clients = realmResource.clients().findByClientId("ManagedResources2Test");
|
List<ClientRepresentation> clients = realmResource.clients().findByClientId(ManagedResources2Test.class.getSimpleName());
|
||||||
Assertions.assertEquals(1, clients.size());
|
Assertions.assertEquals(1, clients.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,12 @@ import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.keycloak.admin.client.resource.ClientResource;
|
import org.keycloak.admin.client.resource.ClientResource;
|
||||||
import org.keycloak.admin.client.resource.RealmResource;
|
import org.keycloak.admin.client.resource.RealmResource;
|
||||||
|
import org.keycloak.admin.client.resource.UserResource;
|
||||||
import org.keycloak.representations.idm.ClientRepresentation;
|
import org.keycloak.representations.idm.ClientRepresentation;
|
||||||
import org.keycloak.test.framework.KeycloakIntegrationTest;
|
import org.keycloak.test.framework.KeycloakIntegrationTest;
|
||||||
import org.keycloak.test.framework.TestClient;
|
import org.keycloak.test.framework.TestClient;
|
||||||
import org.keycloak.test.framework.TestRealm;
|
import org.keycloak.test.framework.TestRealm;
|
||||||
|
import org.keycloak.test.framework.TestUser;
|
||||||
import org.keycloak.test.framework.injection.LifeCycle;
|
import org.keycloak.test.framework.injection.LifeCycle;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -21,17 +23,25 @@ public class ManagedResourcesTest {
|
||||||
@TestClient
|
@TestClient
|
||||||
ClientResource clientResource;
|
ClientResource clientResource;
|
||||||
|
|
||||||
|
@TestUser
|
||||||
|
UserResource userResource;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreatedRealm() {
|
public void testCreatedRealm() {
|
||||||
Assertions.assertEquals("ManagedResourcesTest", realmResource.toRepresentation().getRealm());
|
Assertions.assertEquals(ManagedResourcesTest.class.getSimpleName(), realmResource.toRepresentation().getRealm());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreatedClient() {
|
public void testCreatedClient() {
|
||||||
Assertions.assertEquals("ManagedResourcesTest", clientResource.toRepresentation().getClientId());
|
Assertions.assertEquals(ManagedResourcesTest.class.getSimpleName(), clientResource.toRepresentation().getClientId());
|
||||||
|
|
||||||
List<ClientRepresentation> clients = realmResource.clients().findByClientId("ManagedResourcesTest");
|
List<ClientRepresentation> clients = realmResource.clients().findByClientId(ManagedResourcesTest.class.getSimpleName());
|
||||||
Assertions.assertEquals(1, clients.size());
|
Assertions.assertEquals(1, clients.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreatedUser() {
|
||||||
|
Assertions.assertEquals(ManagedResourcesTest.class.getSimpleName().toLowerCase(), userResource.toRepresentation().getUsername());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package org.keycloak.test.framework;
|
||||||
|
|
||||||
|
import org.keycloak.test.framework.injection.LifeCycle;
|
||||||
|
import org.keycloak.test.framework.realm.ClientConfig;
|
||||||
|
import org.keycloak.test.framework.realm.DefaultClientConfig;
|
||||||
|
import org.keycloak.test.framework.realm.DefaultUserConfig;
|
||||||
|
import org.keycloak.test.framework.realm.UserConfig;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
public @interface TestUser {
|
||||||
|
|
||||||
|
Class<? extends UserConfig> config() default DefaultUserConfig.class;
|
||||||
|
|
||||||
|
LifeCycle lifecycle() default LifeCycle.CLASS;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package org.keycloak.test.framework.realm;
|
||||||
|
|
||||||
|
import org.keycloak.representations.idm.UserRepresentation;
|
||||||
|
|
||||||
|
public class DefaultUserConfig implements UserConfig {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UserRepresentation getRepresentation() {
|
||||||
|
return new UserRepresentation();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
package org.keycloak.test.framework.realm;
|
||||||
|
|
||||||
|
import org.keycloak.representations.idm.UserRepresentation;
|
||||||
|
|
||||||
|
public interface UserConfig {
|
||||||
|
|
||||||
|
UserRepresentation getRepresentation();
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
package org.keycloak.test.framework.realm;
|
||||||
|
|
||||||
|
import jakarta.ws.rs.core.Response;
|
||||||
|
import org.keycloak.admin.client.resource.RealmResource;
|
||||||
|
import org.keycloak.admin.client.resource.UserResource;
|
||||||
|
import org.keycloak.representations.idm.UserRepresentation;
|
||||||
|
import org.keycloak.test.framework.TestUser;
|
||||||
|
import org.keycloak.test.framework.injection.InstanceWrapper;
|
||||||
|
import org.keycloak.test.framework.injection.LifeCycle;
|
||||||
|
import org.keycloak.test.framework.injection.Registry;
|
||||||
|
import org.keycloak.test.framework.injection.Supplier;
|
||||||
|
import org.keycloak.test.framework.injection.SupplierHelpers;
|
||||||
|
|
||||||
|
public class UserSupplier implements Supplier<UserResource, TestUser> {
|
||||||
|
|
||||||
|
private static final String USER_UUID_KEY = "userUuid";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<TestUser> getAnnotationClass() {
|
||||||
|
return TestUser.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<UserResource> getValueType() {
|
||||||
|
return UserResource.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InstanceWrapper<UserResource, TestUser> getValue(Registry registry, TestUser annotation) {
|
||||||
|
InstanceWrapper<UserResource, TestUser> wrapper = new InstanceWrapper<>(this, annotation);
|
||||||
|
LifeCycle lifecycle = annotation.lifecycle();
|
||||||
|
|
||||||
|
RealmResource realm = registry.getDependency(RealmResource.class, wrapper);
|
||||||
|
|
||||||
|
UserConfig config = SupplierHelpers.getInstance(annotation.config());
|
||||||
|
UserRepresentation userRepresentation = config.getRepresentation();
|
||||||
|
|
||||||
|
if (userRepresentation.getUsername() == null) {
|
||||||
|
String username = lifecycle.equals(LifeCycle.GLOBAL) ? config.getClass().getSimpleName() : registry.getCurrentContext().getRequiredTestClass().getSimpleName();
|
||||||
|
userRepresentation.setUsername(username);
|
||||||
|
}
|
||||||
|
|
||||||
|
Response response = realm.users().create(userRepresentation);
|
||||||
|
|
||||||
|
String path = response.getLocation().getPath();
|
||||||
|
String userId = path.substring(path.lastIndexOf('/') + 1);
|
||||||
|
|
||||||
|
response.close();
|
||||||
|
|
||||||
|
wrapper.addNote(USER_UUID_KEY, userId);
|
||||||
|
|
||||||
|
UserResource userResource = realm.users().get(userId);
|
||||||
|
wrapper.setValue(userResource, lifecycle);
|
||||||
|
|
||||||
|
return wrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean compatible(InstanceWrapper<UserResource, TestUser> a, InstanceWrapper<UserResource, TestUser> b) {
|
||||||
|
return a.getAnnotation().config().equals(b.getAnnotation().config()) &&
|
||||||
|
a.getNote(USER_UUID_KEY, String.class).equals(b.getNote(USER_UUID_KEY, String.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close(UserResource user) {
|
||||||
|
user.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
org.keycloak.test.framework.admin.KeycloakAdminClientSupplier
|
org.keycloak.test.framework.admin.KeycloakAdminClientSupplier
|
||||||
org.keycloak.test.framework.realm.ClientSupplier
|
org.keycloak.test.framework.realm.ClientSupplier
|
||||||
org.keycloak.test.framework.realm.RealmSupplier
|
org.keycloak.test.framework.realm.RealmSupplier
|
||||||
|
org.keycloak.test.framework.realm.UserSupplier
|
||||||
org.keycloak.test.framework.server.EmbeddedKeycloakTestServerSupplier
|
org.keycloak.test.framework.server.EmbeddedKeycloakTestServerSupplier
|
||||||
org.keycloak.test.framework.server.DistributionKeycloakTestServerSupplier
|
org.keycloak.test.framework.server.DistributionKeycloakTestServerSupplier
|
||||||
org.keycloak.test.framework.server.RemoteKeycloakTestServerSupplier
|
org.keycloak.test.framework.server.RemoteKeycloakTestServerSupplier
|
||||||
|
|
Loading…
Reference in a new issue