This is an automated email from the ASF dual-hosted git repository.
twolf pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mina-sshd.git
The following commit(s) were added to refs/heads/master by this push:
new 1a6000f13 [test] Use ephemeral port in PortForwardingTest
1a6000f13 is described below
commit 1a6000f1384c287e01f2175e038719ca4b470c48
Author: Thomas Wolf <[email protected]>
AuthorDate: Tue Apr 22 20:48:42 2025 +0200
[test] Use ephemeral port in PortForwardingTest
Don't use hard-coded 8080: the test would fail if something was already
using that port. The test wants to create multiple local forwardings on
the same port, but different network interfaces. So let the first one
choose any free port, then use that same port number for the other
interfaces, too.
---
.../sshd/common/forward/PortForwardingTest.java | 37 +++++++++++++---------
1 file changed, 22 insertions(+), 15 deletions(-)
diff --git
a/sshd-core/src/test/java/org/apache/sshd/common/forward/PortForwardingTest.java
b/sshd-core/src/test/java/org/apache/sshd/common/forward/PortForwardingTest.java
index f05bd4dad..032b7bde0 100644
---
a/sshd-core/src/test/java/org/apache/sshd/common/forward/PortForwardingTest.java
+++
b/sshd-core/src/test/java/org/apache/sshd/common/forward/PortForwardingTest.java
@@ -53,9 +53,6 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
-import com.jcraft.jsch.JSch;
-import com.jcraft.jsch.JSchException;
-import com.jcraft.jsch.Session;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.service.IoHandlerAdapter;
@@ -96,12 +93,9 @@ import org.junit.jupiter.api.Timeout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertSame;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import com.jcraft.jsch.JSch;
+import com.jcraft.jsch.JSchException;
+import com.jcraft.jsch.Session;
/**
* Port forwarding tests
@@ -847,14 +841,23 @@ public class PortForwardingTest extends BaseTestSupport {
List<String> allAddresses = getHostAddresses();
log.info("{} - test on addresses={}", getCurrentTestName(),
allAddresses);
+ Assumptions.assumeTrue(allAddresses.size() > 1, "Test makes only sense
with at least 2 IP addresses");
+ // Create multiple local forwardings on the same port, but different
network interfaces
try (ClientSession session = createNativeSession(null)) {
List<ExplicitPortForwardingTracker> trackers = new ArrayList<>();
try {
+ int port = 0;
for (String host : allAddresses) {
ExplicitPortForwardingTracker tracker =
session.createLocalPortForwardingTracker(
- new SshdSocketAddress(host, 8080),
+ new SshdSocketAddress(host, port),
new SshdSocketAddress("test.javastack.org", 80));
SshdSocketAddress boundAddress = tracker.getBoundAddress();
+ if (port == 0) {
+ port = boundAddress.getPort();
+ assertNotEquals(0, port);
+ } else {
+ assertEquals(port, boundAddress.getPort());
+ }
log.info("{} - test for binding={}", getCurrentTestName(),
boundAddress);
testRemoteURL(new Proxy(Proxy.Type.HTTP,
boundAddress.toInetSocketAddress()),
"http://test.javastack.org/");
@@ -871,11 +874,15 @@ public class PortForwardingTest extends BaseTestSupport {
Enumeration<NetworkInterface> eni =
NetworkInterface.getNetworkInterfaces();
while (eni.hasMoreElements()) {
NetworkInterface networkInterface = eni.nextElement();
- Enumeration<InetAddress> eia = networkInterface.getInetAddresses();
- while (eia.hasMoreElements()) {
- InetAddress ia = eia.nextElement();
- if (ia instanceof Inet4Address) {
- addresses.add(ia.getHostAddress());
+ if (networkInterface.isUp()) {
+ // TODO: if a VPN tunnel exists, we may get a tunnel address,
but that will work
+ // only inside that VPN. How could we recognize and exclude
such tunnel interfaces?
+ Enumeration<InetAddress> eia =
networkInterface.getInetAddresses();
+ while (eia.hasMoreElements()) {
+ InetAddress ia = eia.nextElement();
+ if (ia instanceof Inet4Address) {
+ addresses.add(ia.getHostAddress());
+ }
}
}
}