This is an automated email from the ASF dual-hosted git repository.
orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new ad596a5092c CAMEL-18456: converted camel-http to camel-test-infra-jetty
ad596a5092c is described below
commit ad596a5092ccb59f63aa85269e9d6d8d270e4478
Author: Otavio Rodolfo Piske <[email protected]>
AuthorDate: Mon Sep 12 15:04:43 2022 +0200
CAMEL-18456: converted camel-http to camel-test-infra-jetty
---
components/camel-http/pom.xml | 19 ++++-
.../component/http/HttpProducerSessionTest.java | 38 ++++-----
.../infra/jetty/services/JettyConfiguration.java | 43 +++++++---
.../jetty/services/JettyConfigurationBuilder.java | 94 +++++++++++++++++++---
4 files changed, 152 insertions(+), 42 deletions(-)
diff --git a/components/camel-http/pom.xml b/components/camel-http/pom.xml
index 62ab84be4e4..b5b5f16ee7d 100644
--- a/components/camel-http/pom.xml
+++ b/components/camel-http/pom.xml
@@ -101,12 +101,25 @@
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
+
+
+ <!-- test infra -->
<dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-server</artifactId>
- <version>${jetty-version}</version>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-test-infra-common</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-test-infra-jetty</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
diff --git
a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProducerSessionTest.java
b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProducerSessionTest.java
index 145cc74ee62..f839a57124d 100644
---
a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProducerSessionTest.java
+++
b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProducerSessionTest.java
@@ -16,25 +16,33 @@
*/
package org.apache.camel.component.http;
-import java.net.InetSocketAddress;
-
import org.apache.camel.BindToRegistry;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.http.handler.SessionReflectionHandler;
import org.apache.camel.http.base.cookie.ExchangeCookieHandler;
import org.apache.camel.http.base.cookie.InstanceCookieHandler;
import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.test.infra.jetty.services.JettyConfiguration;
+import org.apache.camel.test.infra.jetty.services.JettyConfigurationBuilder;
+import org.apache.camel.test.infra.jetty.services.JettyEmbeddedService;
import org.apache.camel.test.junit5.CamelTestSupport;
-import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.session.SessionHandler;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
public class HttpProducerSessionTest extends CamelTestSupport {
- private static volatile int port;
- private static Server localServer;
+ private static final int PORT = AvailablePortFinder.getNextAvailable();
+
+ private final JettyConfiguration jettyConfiguration =
JettyConfigurationBuilder
+ .emptyTemplate()
+ .withPort(PORT)
+ .withContextPath("/session")
+
.withContextHandlerConfiguration().withCustomizer(HttpProducerSessionTest::customizer)
+ .build().build();
+
+ @RegisterExtension
+ public JettyEmbeddedService service = new
JettyEmbeddedService(jettyConfiguration);
@BindToRegistry("instanceCookieHandler")
private InstanceCookieHandler instanceHandler = new
InstanceCookieHandler();
@@ -45,22 +53,10 @@ public class HttpProducerSessionTest extends
CamelTestSupport {
@BindToRegistry("noopCookieStore")
private NoopCookieStore cookieStore = new NoopCookieStore();
- @BeforeAll
- public static void initServer() throws Exception {
- port = AvailablePortFinder.getNextAvailable();
- localServer = new Server(new InetSocketAddress("127.0.0.1", port));
- ContextHandler contextHandler = new ContextHandler();
- contextHandler.setContextPath("/session");
+ private static void customizer(ContextHandler contextHandler) {
SessionHandler sessionHandler = new SessionHandler();
sessionHandler.setHandler(new SessionReflectionHandler());
contextHandler.setHandler(sessionHandler);
- localServer.setHandler(contextHandler);
- localServer.start();
- }
-
- @AfterAll
- public static void shutdownServer() throws Exception {
- localServer.stop();
}
@Test
@@ -89,7 +85,7 @@ public class HttpProducerSessionTest extends CamelTestSupport
{
private String getTestServerEndpointSessionUrl() {
// session handling will not work for localhost
- return "http://127.0.0.1:" + port + "/session/";
+ return "http://127.0.0.1:" + PORT + "/session/";
}
@Override
diff --git
a/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfiguration.java
b/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfiguration.java
index 72ec45ff643..0390d02dade 100644
---
a/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfiguration.java
+++
b/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfiguration.java
@@ -37,6 +37,7 @@ import org.eclipse.jetty.security.UserStore;
import org.eclipse.jetty.security.authentication.BasicAuthenticator;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.handler.ContextHandler;
+import org.eclipse.jetty.server.handler.ErrorHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.util.security.Constraint;
@@ -52,6 +53,7 @@ public class JettyConfiguration {
public abstract static class AbstractContextHandlerConfiguration<T> {
protected final String contextPath;
+ protected Consumer<T> customizer;
public AbstractContextHandlerConfiguration(String contextPath) {
this.contextPath = contextPath;
@@ -61,40 +63,59 @@ public class JettyConfiguration {
return contextPath;
}
- public void customize(Consumer<T> customizer, T handler) {
- customizer.accept(handler);
+ public void customize(Consumer<T> customizer) {
+ this.customizer = customizer;
}
abstract T resolve();
}
public static class ContextHandlerConfiguration extends
AbstractContextHandlerConfiguration<ContextHandler> {
+ private final ContextHandler contextHandler;
+
public ContextHandlerConfiguration(String contextPath) {
super(contextPath);
+
+ contextHandler = new ContextHandler(contextPath);
+ }
+
+ public void setErrorHandler(ErrorHandler errorHandler) {
+ contextHandler.setErrorHandler(errorHandler);
+ }
+
+ public void setHandler(Handler handler) {
+ contextHandler.setHandler(handler);
}
@Override
ContextHandler resolve() {
- ContextHandler contextHandler = new ContextHandler(contextPath);
+ if (customizer != null) {
+ customizer.accept(contextHandler);
+ }
return contextHandler;
}
}
public static class WebContextConfiguration extends
AbstractContextHandlerConfiguration<WebAppContext> {
- private final String webApp;
+ private String webApp;
- public WebContextConfiguration(String webApp, String contextPath) {
+ public WebContextConfiguration(String contextPath) {
super(contextPath);
- this.webApp = webApp;
}
- public String getWebApp() {
- return webApp;
+ public void setWebApp(String webApp) {
+ this.webApp = webApp;
}
public WebAppContext resolve() {
- return new WebAppContext(webApp, super.getContextPath());
+ final WebAppContext webAppContext = new WebAppContext(webApp,
super.getContextPath());
+
+ if (customizer != null) {
+ customizer.accept(webAppContext);
+ }
+
+ return webAppContext;
}
}
@@ -259,6 +280,10 @@ public class JettyConfiguration {
contextHandler.addServlet(servletConfiguration.buildServletHolder(),
servletConfiguration.getPathSpec());
}
+ if (customizer != null) {
+ customizer.accept(contextHandler);
+ }
+
return contextHandler;
}
}
diff --git
a/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfigurationBuilder.java
b/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfigurationBuilder.java
index 8dbf524b8a7..9edad30fbd9 100644
---
a/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfigurationBuilder.java
+++
b/test-infra/camel-test-infra-jetty/src/test/java/org/apache/camel/test/infra/jetty/services/JettyConfigurationBuilder.java
@@ -23,13 +23,20 @@ import java.util.function.Supplier;
import javax.net.ssl.SSLContext;
import org.apache.camel.util.KeyValueHolder;
+import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.handler.ContextHandler;
+import org.eclipse.jetty.server.handler.ErrorHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
/**
* This builder can be used to build and configure a configuration holder for
embedded Jetty instances
*/
public final class JettyConfigurationBuilder {
- public static class ServletConfigurationBuilder {
+ private interface ConfigurationBuilderDelegate {
+ JettyConfigurationBuilder build();
+ }
+
+ public static class ServletConfigurationBuilder implements
ConfigurationBuilderDelegate {
private final JettyConfiguration jettyConfiguration;
private final JettyConfigurationBuilder jettyConfigurationBuilder;
@@ -43,9 +50,8 @@ public final class JettyConfigurationBuilder {
= new
JettyConfiguration.ServletHandlerConfiguration(jettyConfiguration.getContextPath());
}
- public ServletConfigurationBuilder customize(
- Consumer<ServletContextHandler> customizer,
ServletContextHandler handler) {
- servletHandlerConfiguration.customize(customizer, handler);
+ public ServletConfigurationBuilder
customize(Consumer<ServletContextHandler> customizer) {
+ servletHandlerConfiguration.customize(customizer);
return this;
}
@@ -69,12 +75,80 @@ public final class JettyConfigurationBuilder {
return this;
}
+ @Override
public JettyConfigurationBuilder build() {
jettyConfiguration.setContextHandlerConfiguration(servletHandlerConfiguration);
return jettyConfigurationBuilder;
}
}
+ public static class WebAppContextConfigurationBuilder implements
ConfigurationBuilderDelegate {
+ private final JettyConfiguration jettyConfiguration;
+ private final JettyConfigurationBuilder jettyConfigurationBuilder;
+
+ private final JettyConfiguration.WebContextConfiguration
webContextConfiguration;
+
+ public WebAppContextConfigurationBuilder(JettyConfigurationBuilder
jettyConfigurationBuilder,
+ JettyConfiguration
jettyConfiguration) {
+ this.jettyConfigurationBuilder = jettyConfigurationBuilder;
+ this.jettyConfiguration = jettyConfiguration;
+
+ this.webContextConfiguration = new
JettyConfiguration.WebContextConfiguration(jettyConfiguration.getContextPath());
+ }
+
+ public String getContextPath() {
+ return webContextConfiguration.getContextPath();
+ }
+
+ @Override
+ public JettyConfigurationBuilder build() {
+
jettyConfiguration.setContextHandlerConfiguration(webContextConfiguration);
+
+ return jettyConfigurationBuilder;
+ }
+ }
+
+ public static class ContextHandlerConfigurationBuilder implements
ConfigurationBuilderDelegate {
+ private final JettyConfiguration jettyConfiguration;
+ private final JettyConfigurationBuilder jettyConfigurationBuilder;
+
+ private final JettyConfiguration.ContextHandlerConfiguration
contextHandlerConfiguration;
+ private Consumer<ContextHandler> contextHandlerCustomizer;
+
+ public ContextHandlerConfigurationBuilder(JettyConfigurationBuilder
jettyConfigurationBuilder,
+ JettyConfiguration
jettyConfiguration) {
+ this.jettyConfiguration = jettyConfiguration;
+ this.jettyConfigurationBuilder = jettyConfigurationBuilder;
+
+ contextHandlerConfiguration
+ = new
JettyConfiguration.ContextHandlerConfiguration(jettyConfiguration.getContextPath());
+ }
+
+ public ContextHandlerConfigurationBuilder
withErrorHandler(ErrorHandler errorHandler) {
+ contextHandlerConfiguration.setErrorHandler(errorHandler);
+
+ return this;
+ }
+
+ public ContextHandlerConfigurationBuilder withHandler(Handler handler)
{
+ contextHandlerConfiguration.setHandler(handler);
+
+ return this;
+ }
+
+ public ContextHandlerConfigurationBuilder
withCustomizer(Consumer<ContextHandler> contextHandlerCustomizer) {
+ contextHandlerConfiguration.customize(contextHandlerCustomizer);
+ return this;
+ }
+
+ @Override
+ public JettyConfigurationBuilder build() {
+
jettyConfiguration.setContextHandlerConfiguration(contextHandlerConfiguration);
+
+ return jettyConfigurationBuilder;
+ }
+ }
+
private JettyConfiguration jettyConfiguration = new JettyConfiguration();
private JettyConfigurationBuilder() {
@@ -100,14 +174,16 @@ public final class JettyConfigurationBuilder {
return new ServletConfigurationBuilder(this, jettyConfiguration);
}
- public JettyConfigurationBuilder withContextPath(String contextPath) {
- jettyConfiguration.setContextPath(contextPath);
+ public WebAppContextConfigurationBuilder withWebAppContextConfiguration() {
+ return new WebAppContextConfigurationBuilder(this, jettyConfiguration);
+ }
- return this;
+ public ContextHandlerConfigurationBuilder
withContextHandlerConfiguration() {
+ return new ContextHandlerConfigurationBuilder(this,
jettyConfiguration);
}
- public JettyConfigurationBuilder
withWebAppContext(JettyConfiguration.WebContextConfiguration
webContextConfiguration) {
- jettyConfiguration.setWebContextConfiguration(webContextConfiguration);
+ public JettyConfigurationBuilder withContextPath(String contextPath) {
+ jettyConfiguration.setContextPath(contextPath);
return this;
}