Allow accessing server as an instance field and stop hardcoding the local port.
diff --git a/src/test/java/org/apache/sling/uca/impl/IntegrationTest.java b/src/test/java/org/apache/sling/uca/impl/IntegrationTest.java
index d952181..aa02dd1 100644
--- a/src/test/java/org/apache/sling/uca/impl/IntegrationTest.java
+++ b/src/test/java/org/apache/sling/uca/impl/IntegrationTest.java
@@ -29,6 +29,7 @@
import java.net.URLConnection;
import java.util.concurrent.TimeUnit;
+import org.apache.sling.uca.impl.ServerRule.MisbehavingServer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
@@ -65,10 +66,10 @@
* @throws IOException various I/O problems
*/
@Test
- public void readTimeout() throws IOException {
+ public void readTimeout(@MisbehavingServer ServerControl server) throws IOException {
SocketTimeoutException exception = assertThrows(SocketTimeoutException.class,
- () -> assertTimeout(ofSeconds(10), () -> runTest("http://localhost:" + ServerRule.getLocalPort()))
+ () -> assertTimeout(ofSeconds(10), () -> runTest("http://localhost:" + server.getLocalPort()))
);
assertEquals("Read timed out", exception.getMessage());
}
diff --git a/src/test/java/org/apache/sling/uca/impl/ServerControl.java b/src/test/java/org/apache/sling/uca/impl/ServerControl.java
new file mode 100644
index 0000000..e73d682
--- /dev/null
+++ b/src/test/java/org/apache/sling/uca/impl/ServerControl.java
@@ -0,0 +1,6 @@
+package org.apache.sling.uca.impl;
+
+public interface ServerControl {
+
+ int getLocalPort();
+}
diff --git a/src/test/java/org/apache/sling/uca/impl/ServerRule.java b/src/test/java/org/apache/sling/uca/impl/ServerRule.java
index 62a6380..80d4fc4 100644
--- a/src/test/java/org/apache/sling/uca/impl/ServerRule.java
+++ b/src/test/java/org/apache/sling/uca/impl/ServerRule.java
@@ -17,6 +17,10 @@
package org.apache.sling.uca.impl;
import java.io.IOException;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletException;
@@ -31,25 +35,45 @@
import org.junit.jupiter.api.extension.AfterAllCallback;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.ParameterContext;
+import org.junit.jupiter.api.extension.ParameterResolutionException;
+import org.junit.jupiter.api.extension.ParameterResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-class ServerRule implements BeforeAllCallback, AfterAllCallback {
+class ServerRule implements BeforeAllCallback, AfterAllCallback, ParameterResolver, ServerControl {
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.PARAMETER)
+ public @interface MisbehavingServer { }
private final Logger logger = LoggerFactory.getLogger(getClass());
- private static final int LOCAL_PORT = 12312;
-
- public static int getLocalPort() {
- return LOCAL_PORT;
+ public int getLocalPort() {
+ return ((ServerConnector) server.getConnectors()[0]).getLocalPort();
}
private Server server;
@Override
+ public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
+ throws ParameterResolutionException {
+ return parameterContext.isAnnotated(MisbehavingServer.class);
+ }
+
+ @Override
+ public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
+ throws ParameterResolutionException {
+ if ( parameterContext.getParameter().getType() == ServerControl.class )
+ return this;
+
+ throw new ParameterResolutionException("Unable to get a Server instance for " + parameterContext);
+ }
+
+ @Override
public void beforeAll(ExtensionContext context) throws Exception {
- server = new Server(LOCAL_PORT);
+ server = new Server();
ServerConnector connector = new ServerConnector(server) {
@Override
public void accept(int acceptorID) throws IOException {
@@ -64,7 +88,6 @@
LOG.info("Accepted");
}
};
- connector.setPort(LOCAL_PORT);
server.setConnectors(new Connector[] { connector });
server.setHandler(new AbstractHandler() {