keycloak-uncached
Changes
testsuite/integration-arquillian/servers/auth-server/services/event-queue/src/main/java/org/keycloak/testsuite/events/AssertEventsServletFilter.java 71(+0 -71)
testsuite/integration-arquillian/servers/auth-server/services/event-queue/src/main/java/org/keycloak/testsuite/events/EventsServer.java 96(+0 -96)
testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/events/EventsListenerProvider.java 0(+0 -0)
testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/events/EventsListenerProviderFactory.java 4(+0 -4)
testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/rest/TestApplicationResourceProvider.java 0(+0 -0)
testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/rest/TestApplicationResourceProviderFactory.java 0(+0 -0)
testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/rest/TestingResourceProvider.java 82(+78 -4)
testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/rest/TestingResourceProviderFactory.java 6(+3 -3)
testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/resources/META-INF/services/org.keycloak.events.EventListenerProviderFactory 0(+0 -0)
testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/resources/META-INF/services/org.keycloak.services.resource.RealmResourceProviderFactory 2(+1 -1)
testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/resources/org/keycloak/testsuite/integration-arquillian-testsuite-providers/main/module.xml 5(+3 -2)
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/client/KeycloakTestingClient.java 48(+48 -0)
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/client/resources/TestingResource.java 71(+71 -0)
Details
diff --git a/testsuite/integration-arquillian/servers/auth-server/jboss/build.xml b/testsuite/integration-arquillian/servers/auth-server/jboss/build.xml
index b34fc7d..1e4ab78 100644
--- a/testsuite/integration-arquillian/servers/auth-server/jboss/build.xml
+++ b/testsuite/integration-arquillian/servers/auth-server/jboss/build.xml
@@ -29,7 +29,7 @@
// inject provider
providers = root.withArray("providers");
- providers.add("module:org.keycloak.testsuite.integration-arquillian-event-queue");
+ providers.add("module:org.keycloak.testsuite.integration-arquillian-testsuite-providers");
// save file
JsonSerialization.prettyMapper.writeValue(file, root);
diff --git a/testsuite/integration-arquillian/servers/auth-server/jboss/pom.xml b/testsuite/integration-arquillian/servers/auth-server/jboss/pom.xml
index 097e239..66cce9c 100644
--- a/testsuite/integration-arquillian/servers/auth-server/jboss/pom.xml
+++ b/testsuite/integration-arquillian/servers/auth-server/jboss/pom.xml
@@ -101,7 +101,7 @@
</configuration>
</execution>
<execution>
- <id>copy-event-queue-provider</id>
+ <id>copy-testsuite-providers</id>
<phase>generate-resources</phase>
<goals>
<goal>copy</goal>
@@ -110,17 +110,17 @@
<artifactItems>
<artifactItem>
<groupId>org.keycloak.testsuite</groupId>
- <artifactId>integration-arquillian-event-queue</artifactId>
+ <artifactId>integration-arquillian-testsuite-providers</artifactId>
<version>${project.version}</version>
<type>jar</type>
<overWrite>false</overWrite>
- <outputDirectory>${auth.server.home}/modules/org/keycloak/testsuite/integration-arquillian-event-queue/main</outputDirectory>
+ <outputDirectory>${auth.server.home}/modules/org/keycloak/testsuite/integration-arquillian-testsuite-providers/main</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
<execution>
- <id>install-event-queue-module</id>
+ <id>install-testsuite-providers-module</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
@@ -129,7 +129,7 @@
<artifactItems>
<artifactItem>
<groupId>org.keycloak.testsuite</groupId>
- <artifactId>integration-arquillian-event-queue</artifactId>
+ <artifactId>integration-arquillian-testsuite-providers</artifactId>
<version>${project.version}</version>
<type>jar</type>
<outputDirectory>${auth.server.home}/modules</outputDirectory>
diff --git a/testsuite/integration-arquillian/servers/auth-server/services/pom.xml b/testsuite/integration-arquillian/servers/auth-server/services/pom.xml
index 2d96ac0..b875ec5 100644
--- a/testsuite/integration-arquillian/servers/auth-server/services/pom.xml
+++ b/testsuite/integration-arquillian/servers/auth-server/services/pom.xml
@@ -30,7 +30,7 @@
<name>Auth Server Services</name>
<modules>
- <module>event-queue</module>
+ <module>testsuite-providers</module>
</modules>
</project>
diff --git a/testsuite/integration-arquillian/tests/base/pom.xml b/testsuite/integration-arquillian/tests/base/pom.xml
index 21aea19..ee6ad1b 100644
--- a/testsuite/integration-arquillian/tests/base/pom.xml
+++ b/testsuite/integration-arquillian/tests/base/pom.xml
@@ -59,7 +59,7 @@
</dependency>
<dependency>
<groupId>org.keycloak.testsuite</groupId>
- <artifactId>integration-arquillian-event-queue</artifactId>
+ <artifactId>integration-arquillian-testsuite-providers</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/client/KeycloakTestingClient.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/client/KeycloakTestingClient.java
new file mode 100755
index 0000000..cbc639e
--- /dev/null
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/client/KeycloakTestingClient.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2016 Red Hat, Inc. and/or its affiliates
+ * and other contributors as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.keycloak.testsuite.client;
+
+import org.jboss.resteasy.client.jaxrs.ResteasyClient;
+import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
+import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;
+import org.keycloak.testsuite.client.resources.TestingResource;
+
+/**
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class KeycloakTestingClient {
+ private final ResteasyWebTarget target;
+ private final ResteasyClient client;
+
+ KeycloakTestingClient(String serverUrl, ResteasyClient resteasyClient) {
+ client = resteasyClient != null ? resteasyClient : new ResteasyClientBuilder().connectionPoolSize(10).build();
+ target = client.target(serverUrl);
+ }
+
+ public static KeycloakTestingClient getInstance(String serverUrl) {
+ return new KeycloakTestingClient(serverUrl, null);
+ }
+
+ public TestingResource testing() {
+ return target.proxy(TestingResource.class);
+ }
+
+ public void close() {
+ client.close();
+ }
+}
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/client/resources/TestingResource.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/client/resources/TestingResource.java
new file mode 100644
index 0000000..1e98253
--- /dev/null
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/client/resources/TestingResource.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2016 Red Hat, Inc. and/or its affiliates
+ * and other contributors as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.keycloak.testsuite.client.resources;
+
+import org.keycloak.representations.idm.EventRepresentation;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+
+@Path("/realms/master/testing")
+@Consumes(MediaType.APPLICATION_JSON)
+public interface TestingResource {
+
+ @GET
+ @Path("/time-offset")
+ @Produces(MediaType.APPLICATION_JSON)
+ Map<String, String> getTimeOffset() ;
+
+ @PUT
+ @Path("/time-offset")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ Map<String, String> setTimeOffset(Map<String, String> time);
+
+ @POST
+ @Path("/poll-event-queue")
+ @Produces(MediaType.APPLICATION_JSON)
+ EventRepresentation pollEvent();
+
+ @POST
+ @Path("/clear-event-queue")
+ @Produces(MediaType.APPLICATION_JSON)
+ Response clearQueue();
+
+ @POST
+ @Path("/remove-user-session")
+ @Produces(MediaType.APPLICATION_JSON)
+ Response removeUserSession(@QueryParam("realm") final String name, @QueryParam("session") final String sessionId);
+
+ @POST
+ @Path("/remove-expired")
+ @Produces(MediaType.APPLICATION_JSON)
+ Response removeExpired(@QueryParam("realm") final String name);
+}
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java
index 3fd7712..b72a178 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java
@@ -18,19 +18,16 @@ package org.keycloak.testsuite;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
-import org.apache.commons.io.IOUtils;
import org.keycloak.common.util.KeycloakUriBuilder;
import org.keycloak.testsuite.arquillian.TestContext;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.ws.rs.NotFoundException;
import org.jboss.arquillian.container.test.api.RunAsClient;
@@ -56,9 +53,9 @@ import org.keycloak.testsuite.admin.ApiUtil;
import org.keycloak.testsuite.arquillian.AuthServerTestEnricher;
import org.keycloak.testsuite.arquillian.SuiteContext;
import org.keycloak.testsuite.auth.page.WelcomePage;
+import org.keycloak.testsuite.client.KeycloakTestingClient;
import org.keycloak.testsuite.util.DeleteMeOAuthClient;
import org.keycloak.testsuite.util.OAuthClient;
-import org.keycloak.util.JsonSerialization;
import org.openqa.selenium.WebDriver;
import org.keycloak.testsuite.auth.page.AuthServer;
import org.keycloak.testsuite.auth.page.AuthServerContextRoot;
@@ -94,6 +91,8 @@ public abstract class AbstractKeycloakTest {
protected Keycloak adminClient;
+ protected KeycloakTestingClient testingClient;
+
@ArquillianResource
protected OAuthClient oauthClient;
@@ -134,7 +133,8 @@ public abstract class AbstractKeycloakTest {
MASTER, ADMIN, ADMIN, Constants.ADMIN_CLI_CLIENT_ID);
deleteMeOAuthClient = new DeleteMeOAuthClient(AuthServerTestEnricher.getAuthServerContextRoot() + "/auth");
-
+ testingClient = KeycloakTestingClient.getInstance(AuthServerTestEnricher.getAuthServerContextRoot() + "/auth");
+
adminUser = createAdminUserRepresentation();
setDefaultPageUriParameters();
@@ -302,7 +302,7 @@ public abstract class AbstractKeycloakTest {
userResource.update(userRepresentation);
}
- public void setTimeOffset(int offset) {invokeTimeOffset(offset);
+ public void setTimeOffset(int offset) {
String response = invokeTimeOffset(offset);
resetTimeOffset = offset != 0;
log.debugv("Set time offset, response {0}", response);
@@ -315,26 +315,8 @@ public abstract class AbstractKeycloakTest {
}
private String invokeTimeOffset(int offset) {
- try {
- String data = JsonSerialization.writeValueAsString(Collections.singletonMap("offset", String.valueOf(offset)));
- URI uri = KeycloakUriBuilder.fromUri(suiteContext.getAuthServerInfo().getContextRoot().toURI()).path("/auth/realms/master/time-offset").build();
- HttpURLConnection connection = (HttpURLConnection) uri.toURL().openConnection();
- connection.setDoOutput(true);
- connection.setRequestMethod("PUT");
- connection.setRequestProperty("Content-Type", "application/json");
- connection.setRequestProperty("Content-Length", String.valueOf(data.length()));
-
- OutputStream os = connection.getOutputStream();
- os.write(data.getBytes());
- os.close();
-
- InputStream is = connection.getInputStream();
- String response = IOUtils.toString(is);
- is.close();
- return response;
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
+ Map result = testingClient.testing().setTimeOffset(Collections.singletonMap("offset", String.valueOf(offset)));
+ return String.valueOf(result);
}
private void loadConstantsProperties() throws ConfigurationException {
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AssertEvents.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AssertEvents.java
index 6a4a554..01a448a 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AssertEvents.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AssertEvents.java
@@ -17,11 +17,6 @@
package org.keycloak.testsuite;
-import org.apache.commons.io.IOUtils;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
import org.hamcrest.CoreMatchers;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
@@ -38,10 +33,10 @@ import org.keycloak.representations.idm.EventRepresentation;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.representations.idm.UserSessionRepresentation;
-import org.keycloak.util.JsonSerialization;
+import org.keycloak.testsuite.client.resources.TestingResource;
import org.keycloak.util.TokenUtil;
-import java.io.IOException;
+import javax.ws.rs.core.Response;
import java.security.PublicKey;
import java.util.HashMap;
import java.util.List;
@@ -58,9 +53,9 @@ public class AssertEvents {
public static final String DEFAULT_USERNAME = "test-user@localhost";
String defaultRedirectUri = "http://localhost:8180/auth/realms/master/app/auth";
- String defaultEventsQueueUri = "http://localhost:8092";
private RealmResource realmResource;
+ private TestingResource testingResource;
private RealmRepresentation realmRep;
private AbstractKeycloakTest context;
private PublicKey realmPublicKey;
@@ -73,13 +68,11 @@ public class AssertEvents {
String pubKeyString = realmRep.getPublicKey();
realmPublicKey = PemUtils.decodePublicKey(pubKeyString);
- defaultEventsQueueUri = getAuthServerEventsQueueUri();
- }
-
- String getAuthServerEventsQueueUri() {
- int httpPort = Integer.parseInt(System.getProperty("auth.server.event.http.port", "8089"));
- int portOffset = Integer.parseInt(System.getProperty("auth.server.port.offset", "0"));
- return "http://localhost:" + (httpPort + portOffset);
+ UserRepresentation defaultUser = getUser(DEFAULT_USERNAME);
+ if (defaultUser == null) {
+ throw new RuntimeException("Default user does not exist: " + DEFAULT_USERNAME + ". Make sure to add it to your test realm.");
+ }
+ testingResource = context.testingClient.testing();
}
public EventRepresentation poll() {
@@ -90,22 +83,11 @@ public class AssertEvents {
}
public void clear() {
- CloseableHttpClient httpclient = HttpClients.createDefault();
+ Response res = testingResource.clearQueue();
try {
- HttpPost post = new HttpPost(defaultEventsQueueUri + "/clear-event-queue");
- CloseableHttpResponse response = httpclient.execute(post);
- if (response.getStatusLine().getStatusCode() != 200) {
- throw new RuntimeException("Failed to clear events from " + post.getURI() + ": " + response.getStatusLine().toString());
- }
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- finally {
- try {
- httpclient.close();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
+ Assert.assertEquals("clear-event-queue success", res.getStatus(), 200);
+ } finally {
+ res.close();
}
}
@@ -380,24 +362,6 @@ public class AssertEvents {
}
private EventRepresentation fetchNextEvent() {
- CloseableHttpClient httpclient = HttpClients.createDefault();
- try {
- HttpPost post = new HttpPost(defaultEventsQueueUri + "/event-queue");
- CloseableHttpResponse response = httpclient.execute(post);
- if (response.getStatusLine().getStatusCode() != 200) {
- throw new RuntimeException("Failed to retrieve event from " + post.getURI() + ": " + response.getStatusLine().toString() + " / " + IOUtils.toString(response.getEntity().getContent()));
- }
-
- return JsonSerialization.readValue(response.getEntity().getContent(), EventRepresentation.class);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- finally {
- try {
- httpclient.close();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
+ return testingResource.pollEvent();
}
}