diff --git a/build.gradle b/build.gradle
index 9df94319..a5365f89 100644
--- a/build.gradle
+++ b/build.gradle
@@ -98,7 +98,6 @@ testing {
implementation "org.apache.sshd:sshd-sftp:$sshdVersion"
implementation "org.apache.sshd:sshd-scp:$sshdVersion"
implementation "ch.qos.logback:logback-classic:1.5.18"
- implementation 'org.glassfish.grizzly:grizzly-http-server:3.0.1'
}
targets {
diff --git a/src/test/java/com/hierynomus/sshj/connection/channel/forwarded/LocalPortForwarderTest.java b/src/test/java/com/hierynomus/sshj/connection/channel/forwarded/LocalPortForwarderTest.java
index b001a98c..db2df51a 100644
--- a/src/test/java/com/hierynomus/sshj/connection/channel/forwarded/LocalPortForwarderTest.java
+++ b/src/test/java/com/hierynomus/sshj/connection/channel/forwarded/LocalPortForwarderTest.java
@@ -17,7 +17,6 @@ package com.hierynomus.sshj.connection.channel.forwarded;
import com.hierynomus.sshj.test.HttpServer;
import com.hierynomus.sshj.test.SshServerExtension;
-import com.hierynomus.sshj.test.util.FileUtil;
import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.connection.channel.direct.LocalPortForwarder;
import net.schmizz.sshj.connection.channel.direct.Parameters;
@@ -29,13 +28,10 @@ import org.junit.jupiter.api.extension.RegisterExtension;
import java.io.*;
import java.net.*;
-import java.nio.file.Files;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class LocalPortForwarderTest {
- private static final String LOCALHOST_URL = "http://127.0.0.1:8080";
-
@RegisterExtension
public SshServerExtension fixture = new SshServerExtension();
@@ -43,21 +39,19 @@ public class LocalPortForwarderTest {
public HttpServer httpServer = new HttpServer();
@BeforeEach
- public void setUp() throws IOException {
+ public void setUp() {
fixture.getServer().setForwardingFilter(new AcceptAllForwardingFilter());
- File file = Files.createFile(httpServer.getDocRoot().toPath().resolve("index.html")).toFile();
- FileUtil.writeToFile(file, "
Hi!
");
}
@Test
public void shouldHaveWorkingHttpServer() throws IOException {
- assertEquals(200, httpGet());
+ assertEquals(HttpURLConnection.HTTP_NOT_FOUND, httpGet());
}
@Test
public void shouldHaveHttpServerThatClosesConnectionAfterResponse() throws IOException {
// Just to check that the test server does close connections before we try through the forwarder...
- httpGetAndAssertConnectionClosedByServer(8080);
+ httpGetAndAssertConnectionClosedByServer(httpServer.getServerUrl().getPort());
}
@Test
@@ -68,7 +62,8 @@ public class LocalPortForwarderTest {
ServerSocket serverSocket = new ServerSocket();
serverSocket.setReuseAddress(true);
serverSocket.bind(new InetSocketAddress("0.0.0.0", 12345));
- LocalPortForwarder localPortForwarder = sshClient.newLocalPortForwarder(new Parameters("0.0.0.0", 12345, "localhost", 8080), serverSocket);
+ final int serverPort = httpServer.getServerUrl().getPort();
+ LocalPortForwarder localPortForwarder = sshClient.newLocalPortForwarder(new Parameters("0.0.0.0", 12345, "localhost", serverPort), serverSocket);
new Thread(() -> {
try {
localPortForwarder.listen();
@@ -90,7 +85,7 @@ public class LocalPortForwarderTest {
// It returns 400 Bad Request because it's missing a bunch of info, but the HTTP response doesn't matter, we just want to test the connection closing.
OutputStream outputStream = socket.getOutputStream();
PrintWriter writer = new PrintWriter(outputStream);
- writer.println("GET / HTTP/1.1");
+ writer.println("GET / HTTP/1.1\r\n");
writer.println("");
writer.flush();
@@ -111,7 +106,7 @@ public class LocalPortForwarderTest {
}
private int httpGet() throws IOException {
- final URL url = new URL(LOCALHOST_URL);
+ final URL url = httpServer.getServerUrl().toURL();
final HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(3000);
urlConnection.setRequestMethod("GET");
diff --git a/src/test/java/com/hierynomus/sshj/connection/channel/forwarded/RemotePortForwarderTest.java b/src/test/java/com/hierynomus/sshj/connection/channel/forwarded/RemotePortForwarderTest.java
index b07f2d2c..8a1da440 100644
--- a/src/test/java/com/hierynomus/sshj/connection/channel/forwarded/RemotePortForwarderTest.java
+++ b/src/test/java/com/hierynomus/sshj/connection/channel/forwarded/RemotePortForwarderTest.java
@@ -17,7 +17,6 @@ package com.hierynomus.sshj.connection.channel.forwarded;
import com.hierynomus.sshj.test.HttpServer;
import com.hierynomus.sshj.test.SshServerExtension;
-import com.hierynomus.sshj.test.util.FileUtil;
import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.connection.ConnectionException;
import net.schmizz.sshj.connection.channel.forwarded.RemotePortForwarder;
@@ -27,20 +26,18 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
-import java.io.File;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
+import java.net.URI;
import java.net.URL;
-import java.nio.file.Files;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class RemotePortForwarderTest {
private static final PortRange RANGE = new PortRange(9000, 9999);
private static final String LOCALHOST = "127.0.0.1";
- private static final String LOCALHOST_URL_FORMAT = "http://127.0.0.1:%d";
- private static final InetSocketAddress HTTP_SERVER_SOCKET_ADDR = new InetSocketAddress(LOCALHOST, 8080);
+ private static final String URL_FORMAT = "http://%s:%d";
@RegisterExtension
public SshServerExtension fixture = new SshServerExtension();
@@ -49,21 +46,21 @@ public class RemotePortForwarderTest {
public HttpServer httpServer = new HttpServer();
@BeforeEach
- public void setUp() throws IOException {
+ public void setUp() {
fixture.getServer().setForwardingFilter(new AcceptAllForwardingFilter());
- File file = Files.createFile(httpServer.getDocRoot().toPath().resolve("index.html")).toFile();
- FileUtil.writeToFile(file, "Hi!
");
}
@Test
public void shouldHaveWorkingHttpServer() throws IOException {
- assertEquals(200, httpGet(8080));
+ final URI serverUrl = httpServer.getServerUrl();
+
+ assertEquals(HttpURLConnection.HTTP_NOT_FOUND, httpGet(serverUrl.getHost(), serverUrl.getPort()));
}
@Test
public void shouldDynamicallyForwardPortForLocalhost() throws IOException {
SSHClient sshClient = getFixtureClient();
- RemotePortForwarder.Forward bind = forwardPort(sshClient, "127.0.0.1", new SinglePort(0));
+ RemotePortForwarder.Forward bind = forwardPort(sshClient, LOCALHOST, new SinglePort(0));
assertHttpGetSuccess(bind);
}
@@ -84,7 +81,7 @@ public class RemotePortForwarderTest {
@Test
public void shouldForwardPortForLocalhost() throws IOException {
SSHClient sshClient = getFixtureClient();
- RemotePortForwarder.Forward bind = forwardPort(sshClient, "127.0.0.1", RANGE);
+ RemotePortForwarder.Forward bind = forwardPort(sshClient, LOCALHOST, RANGE);
assertHttpGetSuccess(bind);
}
@@ -103,17 +100,22 @@ public class RemotePortForwarderTest {
}
private void assertHttpGetSuccess(final RemotePortForwarder.Forward bind) throws IOException {
- assertEquals(200, httpGet(bind.getPort()));
+ final String bindAddress = bind.getAddress();
+ final String address = bindAddress.isEmpty() ? LOCALHOST : bindAddress;
+ final int port = bind.getPort();
+ assertEquals(HttpURLConnection.HTTP_NOT_FOUND, httpGet(address, port));
}
private RemotePortForwarder.Forward forwardPort(SSHClient sshClient, String address, PortRange portRange) throws IOException {
while (true) {
+ final URI serverUrl = httpServer.getServerUrl();
+ final InetSocketAddress serverAddress = new InetSocketAddress(serverUrl.getHost(), serverUrl.getPort());
try {
return sshClient.getRemotePortForwarder().bind(
// where the server should listen
new RemotePortForwarder.Forward(address, portRange.nextPort()),
// what we do with incoming connections that are forwarded to us
- new SocketForwardingConnectListener(HTTP_SERVER_SOCKET_ADDR));
+ new SocketForwardingConnectListener(serverAddress));
} catch (ConnectionException ce) {
if (!portRange.hasNext()) {
throw ce;
@@ -122,8 +124,8 @@ public class RemotePortForwarderTest {
}
}
- private int httpGet(final int port) throws IOException {
- final URL url = new URL(String.format(LOCALHOST_URL_FORMAT, port));
+ private int httpGet(final String address, final int port) throws IOException {
+ final URL url = new URL(String.format(URL_FORMAT, address, port));
final HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(3000);
urlConnection.setRequestMethod("GET");
diff --git a/src/test/java/com/hierynomus/sshj/test/HttpServer.java b/src/test/java/com/hierynomus/sshj/test/HttpServer.java
index 259235b7..ed7b725a 100644
--- a/src/test/java/com/hierynomus/sshj/test/HttpServer.java
+++ b/src/test/java/com/hierynomus/sshj/test/HttpServer.java
@@ -19,42 +19,36 @@ import org.junit.jupiter.api.extension.AfterEachCallback;
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
-import java.io.File;
-import java.nio.file.Files;
+import java.net.InetSocketAddress;
+import java.net.URI;
/**
* Can be used to setup a test HTTP server
*/
public class HttpServer implements BeforeEachCallback, AfterEachCallback {
- private org.glassfish.grizzly.http.server.HttpServer httpServer;
+ private static final String BIND_ADDRESS = "127.0.0.1";
-
- private File docRoot ;
+ private com.sun.net.httpserver.HttpServer httpServer;
@Override
- public void afterEach(ExtensionContext context) throws Exception {
+ public void afterEach(ExtensionContext context) {
try {
- httpServer.shutdownNow();
- } catch (Exception e) {}
- try {
- docRoot.delete();
- } catch (Exception e) {}
-
+ httpServer.stop(0);
+ } catch (Exception ignored) {}
}
@Override
public void beforeEach(ExtensionContext context) throws Exception {
- docRoot = Files.createTempDirectory("sshj").toFile();
- httpServer = org.glassfish.grizzly.http.server.HttpServer.createSimpleServer(docRoot.getAbsolutePath());
+ httpServer = com.sun.net.httpserver.HttpServer.create();
+ final InetSocketAddress socketAddress = new InetSocketAddress(BIND_ADDRESS, 0);
+ httpServer.bind(socketAddress, 10);
httpServer.start();
}
- public org.glassfish.grizzly.http.server.HttpServer getHttpServer() {
- return httpServer;
- }
-
- public File getDocRoot() {
- return docRoot;
+ public URI getServerUrl() {
+ final InetSocketAddress bindAddress = httpServer.getAddress();
+ final String serverUrl = String.format("http://%s:%d", BIND_ADDRESS, bindAddress.getPort());
+ return URI.create(serverUrl);
}
}