keycloak-memoizeit

Details

diff --git a/testsuite/integration/src/main/java/org/keycloak/testutils/KeycloakServer.java b/testsuite/integration/src/main/java/org/keycloak/testutils/KeycloakServer.java
index 6f2aaf9..c401f0a 100755
--- a/testsuite/integration/src/main/java/org/keycloak/testutils/KeycloakServer.java
+++ b/testsuite/integration/src/main/java/org/keycloak/testutils/KeycloakServer.java
@@ -59,6 +59,7 @@ public class KeycloakServer {
     public static class KeycloakServerConfig {
         private String host = "localhost";
         private int port = 8081;
+        private int workerThreads = Math.max(Runtime.getRuntime().availableProcessors(), 2) * 8;
         private String resourcesHome;
 
         public String getHost() {
@@ -84,6 +85,14 @@ public class KeycloakServer {
         public void setResourcesHome(String resourcesHome) {
             this.resourcesHome = resourcesHome;
         }
+
+        public int getWorkerThreads() {
+            return workerThreads;
+        }
+
+        public void setWorkerThreads(int workerThreads) {
+            this.workerThreads = workerThreads;
+        }
     }
 
     public static <T> T loadJson(InputStream is, Class<T> type) {
@@ -141,6 +150,10 @@ public class KeycloakServer {
             config.setResourcesHome(dir.getAbsolutePath());
         }
 
+        if (System.getProperties().containsKey("undertowWorkerThreads")) {
+            int undertowWorkerThreads = Integer.parseInt(System.getProperty("undertowWorkerThreads"));
+            config.setWorkerThreads(undertowWorkerThreads);
+        }
 
         final KeycloakServer keycloak = new KeycloakServer(config);
         keycloak.sysout = true;
@@ -244,7 +257,10 @@ public class KeycloakServer {
         ResteasyDeployment deployment = new ResteasyDeployment();
         deployment.setApplicationClass(KeycloakApplication.class.getName());
 
-        Builder builder = Undertow.builder().addListener(config.getPort(), config.getHost());
+        Builder builder = Undertow.builder()
+                .addHttpListener(config.getPort(), config.getHost())
+                .setWorkerThreads(config.getWorkerThreads())
+                .setIoThreads(config.getWorkerThreads() / 8);
 
         server = new UndertowJaxrsServer().start(builder);
 
diff --git a/testsuite/performance-web/src/main/java/org/keycloak/testsuite/performance/web/KeycloakPerfServer.java b/testsuite/performance-web/src/main/java/org/keycloak/testsuite/performance/web/KeycloakPerfServer.java
index 9a64680..2ad2fa2 100644
--- a/testsuite/performance-web/src/main/java/org/keycloak/testsuite/performance/web/KeycloakPerfServer.java
+++ b/testsuite/performance-web/src/main/java/org/keycloak/testsuite/performance/web/KeycloakPerfServer.java
@@ -8,7 +8,6 @@ import io.undertow.server.handlers.resource.ClassPathResourceManager;
 import io.undertow.servlet.Servlets;
 import io.undertow.servlet.api.DeploymentInfo;
 import io.undertow.servlet.api.FilterInfo;
-import io.undertow.servlet.api.MimeMapping;
 import io.undertow.servlet.api.ServletInfo;
 import org.jboss.resteasy.plugins.server.undertow.UndertowJaxrsServer;
 import org.jboss.resteasy.spi.ResteasyDeployment;
@@ -28,7 +27,7 @@ public class KeycloakPerfServer {
         KeycloakServer keycloakServer = KeycloakServer.bootstrapKeycloakServer(args);
         System.out.println("Keycloak server bootstrapped");
 
-        ProviderSessionFactoryHolder.setProviderSessionFactory(keycloakServer.getProviderSessionFactory());
+        KeycloakSessionFactoryHolder.setKeycloakSessionFactory(keycloakServer.getSessionFactory());
         new KeycloakPerfServer(keycloakServer).start();
     }
 
diff --git a/testsuite/performance-web/src/main/java/org/keycloak/testsuite/performance/web/KeycloakToolsApplication.java b/testsuite/performance-web/src/main/java/org/keycloak/testsuite/performance/web/KeycloakToolsApplication.java
index 94798d9..e0612c1 100644
--- a/testsuite/performance-web/src/main/java/org/keycloak/testsuite/performance/web/KeycloakToolsApplication.java
+++ b/testsuite/performance-web/src/main/java/org/keycloak/testsuite/performance/web/KeycloakToolsApplication.java
@@ -8,7 +8,7 @@ import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Context;
 
 import org.jboss.resteasy.core.Dispatcher;
-import org.keycloak.provider.ProviderSessionFactory;
+import org.keycloak.models.KeycloakSessionFactory;
 import org.keycloak.test.tools.PerfTools;
 
 /**
@@ -18,14 +18,14 @@ import org.keycloak.test.tools.PerfTools;
  */
 public class KeycloakToolsApplication extends Application {
 
-    protected ProviderSessionFactory providerSessionFactory;
+    protected KeycloakSessionFactory keycloakSessionFactory;
     protected Set<Class<?>> classes = new HashSet<Class<?>>();
     protected Set<Object> singletons = new HashSet<Object>();
 
     public KeycloakToolsApplication(@Context ServletContext context, @Context Dispatcher dispatcher) {
-        this.providerSessionFactory = ProviderSessionFactoryHolder.getProviderSessionFactory();
-        context.setAttribute(ProviderSessionFactory.class.getName(), this.providerSessionFactory);
-        singletons.add(new PerfTools(providerSessionFactory));
+        this.keycloakSessionFactory = KeycloakSessionFactoryHolder.getKeycloakSessionFactory();
+        context.setAttribute(KeycloakSessionFactory.class.getName(), this.keycloakSessionFactory);
+        singletons.add(new PerfTools(keycloakSessionFactory));
     }
 
     @Override
diff --git a/testsuite/tools/src/main/java/org/keycloak/test/tools/PerfTools.java b/testsuite/tools/src/main/java/org/keycloak/test/tools/PerfTools.java
index 60a5baa..32a1fdc 100644
--- a/testsuite/tools/src/main/java/org/keycloak/test/tools/PerfTools.java
+++ b/testsuite/tools/src/main/java/org/keycloak/test/tools/PerfTools.java
@@ -113,9 +113,9 @@ public class PerfTools {
     // Same as createUsers, but dynamically compute "start" (Next available user)
     @GET
     @Path("{realm}/create-available-users")
-    public Response createAvailableUsers(@PathParam("realm") String realmName, @QueryParam("count") Integer count, @QueryParam("batch") Integer batch, @QueryParam("prefix") String prefix, @QueryParam("roles") String roles) throws InterruptedException {
+    public void createAvailableUsers(@PathParam("realm") String realmName, @QueryParam("count") Integer count, @QueryParam("batch") Integer batch, @QueryParam("prefix") String prefix, @QueryParam("roles") String roles) throws InterruptedException {
         int start = getUsersCount(realmName, prefix);
-        return createUsers(realmName, count, batch, start, prefix, roles);
+        createUsers(realmName, count, batch, start, prefix, roles);
     }
 
     private int getUsersCount(String realmName, String prefix) {