KEYCLOAK-14889 Create test for clientStorageProviderTimeout
This commit is contained in:
parent
cd76ed0d74
commit
7f979ffbcf
3 changed files with 57 additions and 3 deletions
|
@ -38,6 +38,7 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
import org.jboss.logging.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
||||||
|
@ -79,6 +80,11 @@ public class HardcodedClientStorageProvider implements ClientStorageProvider, Cl
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Stream<ClientModel> searchClientsByClientIdStream(RealmModel realm, String clientId, Integer firstResult, Integer maxResults) {
|
public Stream<ClientModel> searchClientsByClientIdStream(RealmModel realm, String clientId, Integer firstResult, Integer maxResults) {
|
||||||
|
if (Boolean.parseBoolean(component.getConfig().getFirst(HardcodedClientStorageProviderFactory.DELAYED_SEARCH))) try {
|
||||||
|
Thread.sleep(5000l);
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
Logger.getLogger(HardcodedClientStorageProvider.class).warn(ex.getCause());
|
||||||
|
}
|
||||||
if (clientId != null && this.clientId.toLowerCase().contains(clientId.toLowerCase())) {
|
if (clientId != null && this.clientId.toLowerCase().contains(clientId.toLowerCase())) {
|
||||||
return Stream.of(new ClientAdapter(realm));
|
return Stream.of(new ClientAdapter(realm));
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,7 @@ public class HardcodedClientStorageProviderFactory implements ClientStorageProvi
|
||||||
|
|
||||||
public static final String REDIRECT_URI = "redirect_uri";
|
public static final String REDIRECT_URI = "redirect_uri";
|
||||||
public static final String CONSENT = "consent";
|
public static final String CONSENT = "consent";
|
||||||
|
public static final String DELAYED_SEARCH = "delayed_search";
|
||||||
|
|
||||||
static {
|
static {
|
||||||
CONFIG_PROPERTIES = ProviderConfigurationBuilder.create()
|
CONFIG_PROPERTIES = ProviderConfigurationBuilder.create()
|
||||||
|
@ -70,6 +71,12 @@ public class HardcodedClientStorageProviderFactory implements ClientStorageProvi
|
||||||
.helpText("Is consent required")
|
.helpText("Is consent required")
|
||||||
.defaultValue("false")
|
.defaultValue("false")
|
||||||
.add()
|
.add()
|
||||||
|
.property().name(DELAYED_SEARCH)
|
||||||
|
.type(ProviderConfigProperty.BOOLEAN_TYPE)
|
||||||
|
.label("Delayes provider by 5s.")
|
||||||
|
.helpText("If true it delayes search for clients within the provider by 5s.")
|
||||||
|
.defaultValue(false)
|
||||||
|
.add()
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.keycloak.OAuth2Constants;
|
import org.keycloak.OAuth2Constants;
|
||||||
import org.keycloak.common.util.MultivaluedHashMap;
|
import org.keycloak.common.util.MultivaluedHashMap;
|
||||||
|
import org.keycloak.component.ComponentModel;
|
||||||
import org.keycloak.events.Details;
|
import org.keycloak.events.Details;
|
||||||
import org.keycloak.models.ClientModel;
|
import org.keycloak.models.ClientModel;
|
||||||
import org.keycloak.models.Constants;
|
import org.keycloak.models.Constants;
|
||||||
|
@ -41,6 +42,7 @@ import org.keycloak.testsuite.AbstractTestRealmKeycloakTest;
|
||||||
import org.keycloak.testsuite.AssertEvents;
|
import org.keycloak.testsuite.AssertEvents;
|
||||||
import org.keycloak.testsuite.admin.ApiUtil;
|
import org.keycloak.testsuite.admin.ApiUtil;
|
||||||
import org.keycloak.testsuite.arquillian.annotation.AuthServerContainerExclude;
|
import org.keycloak.testsuite.arquillian.annotation.AuthServerContainerExclude;
|
||||||
|
import org.keycloak.testsuite.auth.page.AuthRealm;
|
||||||
import org.keycloak.testsuite.federation.HardcodedClientStorageProviderFactory;
|
import org.keycloak.testsuite.federation.HardcodedClientStorageProviderFactory;
|
||||||
import org.keycloak.testsuite.pages.AppPage;
|
import org.keycloak.testsuite.pages.AppPage;
|
||||||
import org.keycloak.testsuite.pages.ErrorPage;
|
import org.keycloak.testsuite.pages.ErrorPage;
|
||||||
|
@ -61,11 +63,16 @@ import java.net.URISyntaxException;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static java.util.Calendar.DAY_OF_WEEK;
|
import static java.util.Calendar.DAY_OF_WEEK;
|
||||||
import static java.util.Calendar.HOUR_OF_DAY;
|
import static java.util.Calendar.HOUR_OF_DAY;
|
||||||
import static java.util.Calendar.MINUTE;
|
import static java.util.Calendar.MINUTE;
|
||||||
|
import static org.hamcrest.Matchers.allOf;
|
||||||
|
import static org.hamcrest.Matchers.hasItem;
|
||||||
|
import static org.hamcrest.Matchers.not;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
import static org.keycloak.testsuite.admin.ApiUtil.findUserByUsername;
|
import static org.keycloak.testsuite.admin.ApiUtil.findUserByUsername;
|
||||||
import org.keycloak.testsuite.arquillian.annotation.AuthServerContainerExclude.AuthServer;
|
import org.keycloak.testsuite.arquillian.annotation.AuthServerContainerExclude.AuthServer;
|
||||||
|
|
||||||
|
@ -92,7 +99,7 @@ public class ClientStorageTest extends AbstractTestRealmKeycloakTest {
|
||||||
public void configureTestRealm(RealmRepresentation testRealm) {
|
public void configureTestRealm(RealmRepresentation testRealm) {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String providerId;
|
private String providerId;
|
||||||
|
|
||||||
protected String addComponent(ComponentRepresentation component) {
|
protected String addComponent(ComponentRepresentation component) {
|
||||||
Response resp = adminClient.realm("test").components().add(component);
|
Response resp = adminClient.realm("test").components().add(component);
|
||||||
|
@ -111,6 +118,7 @@ public class ClientStorageTest extends AbstractTestRealmKeycloakTest {
|
||||||
provider.setConfig(new MultivaluedHashMap<>());
|
provider.setConfig(new MultivaluedHashMap<>());
|
||||||
provider.getConfig().putSingle(HardcodedClientStorageProviderFactory.CLIENT_ID, "hardcoded-client");
|
provider.getConfig().putSingle(HardcodedClientStorageProviderFactory.CLIENT_ID, "hardcoded-client");
|
||||||
provider.getConfig().putSingle(HardcodedClientStorageProviderFactory.REDIRECT_URI, oauth.getRedirectUri());
|
provider.getConfig().putSingle(HardcodedClientStorageProviderFactory.REDIRECT_URI, oauth.getRedirectUri());
|
||||||
|
provider.getConfig().putSingle(HardcodedClientStorageProviderFactory.DELAYED_SEARCH, Boolean.toString(false));
|
||||||
|
|
||||||
providerId = addComponent(provider);
|
providerId = addComponent(provider);
|
||||||
}
|
}
|
||||||
|
@ -123,9 +131,42 @@ public class ClientStorageTest extends AbstractTestRealmKeycloakTest {
|
||||||
oauth.clientId("hardcoded-client");
|
oauth.clientId("hardcoded-client");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(timeout = 4000)
|
||||||
|
public void testSearchTimeout() {
|
||||||
|
String hardcodedClient = HardcodedClientStorageProviderFactory.PROVIDER_ID;
|
||||||
|
String delayedSearch = HardcodedClientStorageProviderFactory.DELAYED_SEARCH;
|
||||||
|
String providerId = this.providerId;
|
||||||
|
testingClient.server().run(session -> {
|
||||||
|
RealmModel realm = session.realms().getRealmByName(AuthRealm.TEST);
|
||||||
|
|
||||||
|
assertThat(session.clientStorageManager()
|
||||||
|
.searchClientsByClientIdStream(realm, "client", null, null)
|
||||||
|
.map(ClientModel::getClientId)
|
||||||
|
.collect(Collectors.toList()),
|
||||||
|
allOf(
|
||||||
|
hasItem(hardcodedClient),
|
||||||
|
hasItem("root-url-client"))
|
||||||
|
);
|
||||||
|
|
||||||
|
//update the provider to simulate delay during the search
|
||||||
|
ComponentModel memoryProvider = realm.getComponent(providerId);
|
||||||
|
memoryProvider.getConfig().putSingle(delayedSearch, Boolean.toString(true));
|
||||||
|
realm.updateComponent(memoryProvider);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
testingClient.server().run(session -> {
|
||||||
|
// search for clients and check hardcoded-client is not present
|
||||||
|
assertThat(session.clientStorageManager()
|
||||||
|
.searchClientsByClientIdStream(session.realms().getRealmByName(AuthRealm.TEST), "client", null, null)
|
||||||
|
.map(ClientModel::getClientId)
|
||||||
|
.collect(Collectors.toList()),
|
||||||
|
allOf(
|
||||||
|
not(hasItem(hardcodedClient)),
|
||||||
|
hasItem("root-url-client")
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testClientStats() throws Exception {
|
public void testClientStats() throws Exception {
|
||||||
|
|
Loading…
Reference in a new issue