You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by gn...@apache.org on 2014/12/12 14:18:10 UTC
[1/6] mina-sshd git commit: [SSHD-380] Refactor tests to let the
system choose the port instead of using getFreePort() which can lead to
problems
Repository: mina-sshd
Updated Branches:
refs/heads/master 158785367 -> f3d58b906
[SSHD-380] Refactor tests to let the system choose the port instead of using getFreePort() which can lead to problems
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/24a5f7de
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/24a5f7de
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/24a5f7de
Branch: refs/heads/master
Commit: 24a5f7ded90becf4bcb8b174c23d9e0fee948d58
Parents: 1587853
Author: Guillaume Nodet <gn...@apache.org>
Authored: Mon Dec 1 09:30:39 2014 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Thu Dec 4 10:42:47 2014 +0100
----------------------------------------------------------------------
.../org/apache/sshd/common/util/IoUtils.java | 10 ----
.../test/java/org/apache/sshd/AgentTest.java | 9 ++-
.../org/apache/sshd/AuthenticationTest.java | 4 +-
.../test/java/org/apache/sshd/CipherTest.java | 4 +-
.../test/java/org/apache/sshd/ClientTest.java | 4 +-
.../test/java/org/apache/sshd/EcdsaTest.java | 5 +-
.../java/org/apache/sshd/KeepAliveTest.java | 4 +-
.../src/test/java/org/apache/sshd/KexTest.java | 4 +-
.../java/org/apache/sshd/KeyReExchangeTest.java | 4 +-
.../src/test/java/org/apache/sshd/LoadTest.java | 4 +-
.../src/test/java/org/apache/sshd/MacTest.java | 4 +-
.../org/apache/sshd/PortForwardingLoadTest.java | 33 +++++------
.../org/apache/sshd/PortForwardingTest.java | 59 +++++---------------
.../test/java/org/apache/sshd/ProxyTest.java | 9 +--
.../src/test/java/org/apache/sshd/ScpTest.java | 5 +-
.../test/java/org/apache/sshd/ServerTest.java | 4 +-
.../src/test/java/org/apache/sshd/SftpTest.java | 4 +-
.../apache/sshd/SinglePublicKeyAuthTest.java | 3 +-
.../java/org/apache/sshd/WelcomeBannerTest.java | 4 +-
.../test/java/org/apache/sshd/util/Utils.java | 6 +-
20 files changed, 59 insertions(+), 124 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/main/java/org/apache/sshd/common/util/IoUtils.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/IoUtils.java b/sshd-core/src/main/java/org/apache/sshd/common/util/IoUtils.java
index 77f1de2..da53e91 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/util/IoUtils.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/util/IoUtils.java
@@ -20,7 +20,6 @@ package org.apache.sshd.common.util;
import java.io.Closeable;
import java.io.IOException;
-import java.net.ServerSocket;
/**
* TODO Add javadoc
@@ -29,15 +28,6 @@ import java.net.ServerSocket;
*/
public class IoUtils {
- public static int getFreePort() throws IOException {
- ServerSocket s = new ServerSocket(0);
- try {
- return s.getLocalPort();
- } finally {
- s.close();
- }
- }
-
public static void closeQuietly(Closeable... closeables) {
for (Closeable c : closeables) {
try {
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/AgentTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/AgentTest.java b/sshd-core/src/test/java/org/apache/sshd/AgentTest.java
index c7caba5..c268d76 100644
--- a/sshd-core/src/test/java/org/apache/sshd/AgentTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/AgentTest.java
@@ -43,7 +43,6 @@ import org.apache.sshd.util.Utils;
import org.junit.Test;
import static org.apache.sshd.util.Utils.createTestKeyPairProvider;
-import static org.apache.sshd.util.Utils.getFreePort;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -99,8 +98,8 @@ public class AgentTest extends BaseTest {
return;
}
- int port1 = getFreePort();
- int port2 = getFreePort();
+ int port1;
+ int port2;
TestEchoShellFactory shellFactory = new TestEchoShellFactory();
ProxyAgentFactory agentFactory = new ProxyAgentFactory();
@@ -110,22 +109,22 @@ public class AgentTest extends BaseTest {
localAgentFactory.getAgent().addIdentity(pair, "smx");
SshServer sshd1 = SshServer.setUpDefaultServer();
- sshd1.setPort(port1);
sshd1.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd1.setShellFactory(shellFactory);
sshd1.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd1.setPublickeyAuthenticator(new BogusPublickeyAuthenticator());
sshd1.setAgentFactory(agentFactory);
sshd1.start();
+ port1 = sshd1.getPort();
SshServer sshd2 = SshServer.setUpDefaultServer();
- sshd2.setPort(port2);
sshd2.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd2.setShellFactory(new TestEchoShellFactory());
sshd2.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd2.setPublickeyAuthenticator(new BogusPublickeyAuthenticator());
sshd2.setAgentFactory(new ProxyAgentFactory());
sshd2.start();
+ port2 = sshd2.getPort();
SshClient client1 = SshClient.setUpDefaultClient();
client1.setAgentFactory(localAgentFactory);
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java b/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java
index 5a7ce51..8c1fb0b 100644
--- a/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java
@@ -48,10 +48,7 @@ public class AuthenticationTest extends BaseTest {
@Before
public void setUp() throws Exception {
- port = Utils.getFreePort();
-
sshd = SshServer.setUpDefaultServer();
- sshd.setPort(port);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.setPublickeyAuthenticator(new BogusPublickeyAuthenticator());
@@ -64,6 +61,7 @@ public class AuthenticationTest extends BaseTest {
}
});
sshd.start();
+ port = sshd.getPort();
}
@After
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/CipherTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/CipherTest.java b/sshd-core/src/test/java/org/apache/sshd/CipherTest.java
index 7d2334f..af53004 100644
--- a/sshd-core/src/test/java/org/apache/sshd/CipherTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/CipherTest.java
@@ -116,15 +116,13 @@ public class CipherTest extends BaseTest {
protected void setUp(NamedFactory<org.apache.sshd.common.Cipher> cipher) throws Exception {
- port = Utils.getFreePort();
-
sshd = SshServer.setUpDefaultServer();
- sshd.setPort(port);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setCipherFactories(Arrays.<NamedFactory<org.apache.sshd.common.Cipher>>asList(cipher));
sshd.setShellFactory(new EchoShellFactory());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.start();
+ port = sshd.getPort();
}
@After
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/ClientTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/ClientTest.java b/sshd-core/src/test/java/org/apache/sshd/ClientTest.java
index 22d738d..245973d 100644
--- a/sshd-core/src/test/java/org/apache/sshd/ClientTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/ClientTest.java
@@ -105,12 +105,10 @@ public class ClientTest extends BaseTest {
@Before
public void setUp() throws Exception {
- port = Utils.getFreePort();
authLatch = new CountDownLatch(0);
channelLatch = new CountDownLatch(0);
sshd = SshServer.setUpDefaultServer();
- sshd.setPort(port);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setShellFactory(new TestEchoShellFactory());
sshd.setCommandFactory(new CommandFactory() {
@@ -159,6 +157,7 @@ public class ClientTest extends BaseTest {
},
new TcpipServerChannel.DirectTcpipFactory()));
sshd.start();
+ port = sshd.getPort();
client = SshClient.setUpDefaultClient();
}
@@ -620,7 +619,6 @@ public class ClientTest extends BaseTest {
@Test
public void testKeyboardInteractiveWithFailures() throws Exception {
final AtomicInteger count = new AtomicInteger();
- SshClient client = SshClient.setUpDefaultClient();
client.getProperties().put(ClientFactoryManager.PASSWORD_PROMPTS, "3");
client.setUserAuthFactories(Arrays.<NamedFactory<UserAuth>>asList(new UserAuthKeyboardInteractive.Factory()));
client.setUserInteraction(new UserInteraction() {
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/EcdsaTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/EcdsaTest.java b/sshd-core/src/test/java/org/apache/sshd/EcdsaTest.java
index 894c9a9..ae60071 100644
--- a/sshd-core/src/test/java/org/apache/sshd/EcdsaTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/EcdsaTest.java
@@ -90,10 +90,7 @@ public class EcdsaTest extends BaseTest {
@Before
public void setUp() throws Exception {
- port = Utils.getFreePort();
-
sshd = SshServer.setUpDefaultServer();
- sshd.setPort(port);
// sshd.setShellFactory(new TestEchoShellFactory());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.setSessionFactory(new org.apache.sshd.server.session.SessionFactory());
@@ -127,6 +124,7 @@ public class EcdsaTest extends BaseTest {
}
});
sshd.start();
+ port = sshd.getPort();
client = SshClient.setUpDefaultClient();
client.setSignatureFactories(Arrays.<NamedFactory<Signature>>asList(
@@ -150,6 +148,7 @@ public class EcdsaTest extends BaseTest {
}
});
sshd.start();
+ port = sshd.getPort();
client = SshClient.setUpDefaultClient();
client.start();
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/KeepAliveTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/KeepAliveTest.java b/sshd-core/src/test/java/org/apache/sshd/KeepAliveTest.java
index 3c3f5a2..0b51c33 100644
--- a/sshd-core/src/test/java/org/apache/sshd/KeepAliveTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/KeepAliveTest.java
@@ -51,16 +51,14 @@ public class KeepAliveTest extends BaseTest {
@Before
public void setUp() throws Exception {
- port = Utils.getFreePort();
-
sshd = SshServer.setUpDefaultServer();
sshd.getProperties().put(ServerFactoryManager.IDLE_TIMEOUT, Integer.toString(timeout));
- sshd.setPort(port);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setShellFactory(new TestEchoShellFactory());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.setPublickeyAuthenticator(new BogusPublickeyAuthenticator());
sshd.start();
+ port = sshd.getPort();
}
@After
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/KexTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/KexTest.java b/sshd-core/src/test/java/org/apache/sshd/KexTest.java
index ecca320..2b866e5 100644
--- a/sshd-core/src/test/java/org/apache/sshd/KexTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/KexTest.java
@@ -58,14 +58,12 @@ public class KexTest extends BaseTest {
@Before
public void setUp() throws Exception {
- port = Utils.getFreePort();
-
sshd = SshServer.setUpDefaultServer();
- sshd.setPort(port);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setShellFactory(new EchoShellFactory());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.start();
+ port = sshd.getPort();
}
@After
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/KeyReExchangeTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/KeyReExchangeTest.java b/sshd-core/src/test/java/org/apache/sshd/KeyReExchangeTest.java
index d94d768..34e1560 100644
--- a/sshd-core/src/test/java/org/apache/sshd/KeyReExchangeTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/KeyReExchangeTest.java
@@ -60,8 +60,6 @@ public class KeyReExchangeTest extends BaseTest {
}
protected void setUp(long bytesLimit, long timeLimit) throws Exception {
- port = Utils.getFreePort();
-
sshd = SshServer.setUpDefaultServer();
if (bytesLimit > 0) {
sshd.getProperties().put(ServerFactoryManager.REKEY_BYTES_LIMIT, Long.toString(bytesLimit));
@@ -69,11 +67,11 @@ public class KeyReExchangeTest extends BaseTest {
if (timeLimit > 0) {
sshd.getProperties().put(ServerFactoryManager.REKEY_TIME_LIMIT, Long.toString(timeLimit));
}
- sshd.setPort(port);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setShellFactory(new EchoShellFactory());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.start();
+ port = sshd.getPort();
}
@Test
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/LoadTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/LoadTest.java b/sshd-core/src/test/java/org/apache/sshd/LoadTest.java
index 067bb08..cd73484 100644
--- a/sshd-core/src/test/java/org/apache/sshd/LoadTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/LoadTest.java
@@ -47,14 +47,12 @@ public class LoadTest extends BaseTest {
@Before
public void setUp() throws Exception {
- port = Utils.getFreePort();
-
sshd = SshServer.setUpDefaultServer();
- sshd.setPort(port);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setShellFactory(new EchoShellFactory());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.start();
+ port = sshd.getPort();
}
@After
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/MacTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/MacTest.java b/sshd-core/src/test/java/org/apache/sshd/MacTest.java
index 478d9be..54e8d4a 100644
--- a/sshd-core/src/test/java/org/apache/sshd/MacTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/MacTest.java
@@ -127,15 +127,13 @@ public class MacTest extends BaseTest {
protected void setUp(NamedFactory<Mac> mac) throws Exception {
- port = Utils.getFreePort();
-
sshd = SshServer.setUpDefaultServer();
- sshd.setPort(port);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setMacFactories(Arrays.<NamedFactory<Mac>>asList(mac));
sshd.setShellFactory(new EchoShellFactory());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.start();
+ port = sshd.getPort();
}
@After
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/PortForwardingLoadTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/PortForwardingLoadTest.java b/sshd-core/src/test/java/org/apache/sshd/PortForwardingLoadTest.java
index 66b2584..bee776c 100644
--- a/sshd-core/src/test/java/org/apache/sshd/PortForwardingLoadTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/PortForwardingLoadTest.java
@@ -23,6 +23,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
@@ -76,16 +77,13 @@ public class PortForwardingLoadTest extends BaseTest {
@Before
public void setUp() throws Exception {
- sshPort = getFreePort();
- echoPort = getFreePort();
-
sshd = SshServer.setUpDefaultServer();
- sshd.setPort(sshPort);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setShellFactory(new EchoShellFactory());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.setTcpipForwardingFilter(new BogusForwardingFilter());
sshd.start();
+ sshPort = sshd.getPort();
NioSocketAcceptor acceptor = new NioSocketAcceptor();
acceptor.setHandler(new IoHandlerAdapter() {
@@ -99,7 +97,8 @@ public class PortForwardingLoadTest extends BaseTest {
}
});
acceptor.setReuseAddress(true);
- acceptor.bind(new InetSocketAddress(echoPort));
+ acceptor.bind(new InetSocketAddress(0));
+ echoPort = acceptor.getLocalAddress().getPort();
this.acceptor = acceptor;
}
@@ -129,10 +128,11 @@ public class PortForwardingLoadTest extends BaseTest {
}
final String PAYLOAD = sb.toString();
Session session = createSession();
- final ServerSocket ss = new ServerSocket(0);
+ final ServerSocket ss = new ServerSocket();
+ ss.setReuseAddress(true);
+ ss.bind(new InetSocketAddress((InetAddress) null, 0));
int forwardedPort = ss.getLocalPort();
- int sinkPort = getFreePort();
- session.setPortForwardingL(sinkPort, "localhost", forwardedPort);
+ int sinkPort = session.setPortForwardingL(0, "localhost", forwardedPort);
final AtomicInteger conCount = new AtomicInteger(0);
new Thread() {
@@ -188,6 +188,7 @@ public class PortForwardingLoadTest extends BaseTest {
}
}
session.delPortForwardingL(sinkPort);
+ ss.close();
}
@Test
@@ -200,7 +201,9 @@ public class PortForwardingLoadTest extends BaseTest {
"longer Test Data. This is significantly longer Test Data. This is significantly "+
"longer Test Data. ";
Session session = createSession();
- final ServerSocket ss = new ServerSocket(0);
+ final ServerSocket ss = new ServerSocket();
+ ss.setReuseAddress(true);
+ ss.bind(new InetSocketAddress((InetAddress) null, 0));
int forwardedPort = ss.getLocalPort();
int sinkPort = getFreePort();
session.setPortForwardingR(sinkPort, "localhost", forwardedPort);
@@ -262,6 +265,7 @@ public class PortForwardingLoadTest extends BaseTest {
Assert.assertTrue(dataOK[i]);
}
session.delPortForwardingR(forwardedPort);
+ ss.close();
}
@Test
@@ -276,7 +280,6 @@ public class PortForwardingLoadTest extends BaseTest {
final int nbDownloads = 2;
final int nbLoops = 2;
- final int port = getFreePort();
StringBuilder resp = new StringBuilder();
resp.append("<html><body>\n");
for (int i = 0; i < 1000; i++) {
@@ -297,17 +300,15 @@ public class PortForwardingLoadTest extends BaseTest {
}
});
acceptor.setReuseAddress(true);
- acceptor.bind(new InetSocketAddress(port));
-
+ acceptor.bind(new InetSocketAddress(0));
+ final int port = acceptor.getLocalAddress().getPort();
Session session = createSession();
- final int forwardedPort1 = getFreePort();
+ final int forwardedPort1 = session.setPortForwardingL(0, host, port);
final int forwardedPort2 = getFreePort();
- System.err.println("URL: http://localhost:" + forwardedPort2);
-
- session.setPortForwardingL(forwardedPort1, host, port);
session.setPortForwardingR(forwardedPort2, "localhost", forwardedPort1);
+ System.err.println("URL: http://localhost:" + forwardedPort2);
final CountDownLatch latch = new CountDownLatch(nbThread * nbDownloads * nbLoops);
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java b/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java
index 4f8be1c..cd21784 100644
--- a/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java
@@ -33,8 +33,6 @@ import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.apache.sshd.client.channel.ChannelDirectTcpip;
-import org.apache.sshd.client.future.AuthFuture;
-import org.apache.sshd.client.future.ConnectFuture;
import org.apache.sshd.common.SshdSocketAddress;
import org.apache.sshd.util.BaseTest;
import org.apache.sshd.util.BogusForwardingFilter;
@@ -67,18 +65,15 @@ public class PortForwardingTest extends BaseTest {
@Before
public void setUp() throws Exception {
- sshPort = getFreePort();
- echoPort = getFreePort();
-
sshd = SshServer.setUpDefaultServer();
sshd.getProperties().put(SshServer.WINDOW_SIZE, "2048");
sshd.getProperties().put(SshServer.MAX_PACKET_SIZE, "256");
- sshd.setPort(sshPort);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setShellFactory(new EchoShellFactory());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.setTcpipForwardingFilter(new BogusForwardingFilter());
sshd.start();
+ sshPort = sshd.getPort();
NioSocketAcceptor acceptor = new NioSocketAcceptor();
acceptor.setHandler(new IoHandlerAdapter() {
@@ -92,7 +87,8 @@ public class PortForwardingTest extends BaseTest {
}
});
acceptor.setReuseAddress(true);
- acceptor.bind(new InetSocketAddress(echoPort));
+ acceptor.bind(new InetSocketAddress(0));
+ echoPort = acceptor.getLocalAddress().getPort();
this.acceptor = acceptor;
}
@@ -135,13 +131,12 @@ public class PortForwardingTest extends BaseTest {
public void testRemoteForwardingNative() throws Exception {
ClientSession session = createNativeSession();
- int forwardedPort = getFreePort();
- SshdSocketAddress remote = new SshdSocketAddress("", forwardedPort);
+ SshdSocketAddress remote = new SshdSocketAddress("", 0);
SshdSocketAddress local = new SshdSocketAddress("localhost", echoPort);
- session.startRemotePortForwarding(remote, local);
+ SshdSocketAddress bound = session.startRemotePortForwarding(remote, local);
- Socket s = new Socket(remote.getHostName(), remote.getPort());
+ Socket s = new Socket(bound.getHostName(), bound.getPort());
s.getOutputStream().write("Hello".getBytes());
s.getOutputStream().flush();
byte[] buf = new byte[1024];
@@ -158,15 +153,14 @@ public class PortForwardingTest extends BaseTest {
public void testRemoteForwardingNativeBigPayload() throws Exception {
ClientSession session = createNativeSession();
- int forwardedPort = getFreePort();
- SshdSocketAddress remote = new SshdSocketAddress("", forwardedPort);
+ SshdSocketAddress remote = new SshdSocketAddress("", 0);
SshdSocketAddress local = new SshdSocketAddress("localhost", echoPort);
- session.startRemotePortForwarding(remote, local);
+ SshdSocketAddress bound = session.startRemotePortForwarding(remote, local);
byte[] buf = new byte[1024];
- Socket s = new Socket(remote.getHostName(), remote.getPort());
+ Socket s = new Socket(bound.getHostName(), bound.getPort());
for (int i = 0; i < 1000; i++) {
s.getOutputStream().write("0123456789".getBytes());
s.getOutputStream().flush();
@@ -181,28 +175,6 @@ public class PortForwardingTest extends BaseTest {
}
@Test
- public void testRemoteForwardingNativeNoExplicitPort() throws Exception {
- ClientSession session = createNativeSession();
-
- SshdSocketAddress remote = new SshdSocketAddress("0.0.0.0", 0);
- SshdSocketAddress local = new SshdSocketAddress("localhost", echoPort);
-
- SshdSocketAddress bound = session.startRemotePortForwarding(remote, local);
-
- Socket s = new Socket(bound.getHostName(), bound.getPort());
- s.getOutputStream().write("Hello".getBytes());
- s.getOutputStream().flush();
- byte[] buf = new byte[1024];
- int n = s.getInputStream().read(buf);
- String res = new String(buf, 0, n);
- assertEquals("Hello", res);
- s.close();
-
- session.stopRemotePortForwarding(bound);
- session.close(false).await();
- }
-
- @Test
public void testLocalForwarding() throws Exception {
Session session = createSession();
@@ -248,9 +220,7 @@ public class PortForwardingTest extends BaseTest {
public void testLocalForwardingNativeReuse() throws Exception {
ClientSession session = createNativeSession();
- int port = getFreePort();
-
- SshdSocketAddress local = new SshdSocketAddress("", port);
+ SshdSocketAddress local = new SshdSocketAddress("", 0);
SshdSocketAddress remote = new SshdSocketAddress("localhost", echoPort);
SshdSocketAddress bound = session.startLocalPortForwarding(local, remote);
@@ -266,7 +236,7 @@ public class PortForwardingTest extends BaseTest {
public void testLocalForwardingNativeBigPayload() throws Exception {
ClientSession session = createNativeSession();
- SshdSocketAddress local = new SshdSocketAddress("", getFreePort());
+ SshdSocketAddress local = new SshdSocketAddress("", 0);
SshdSocketAddress remote = new SshdSocketAddress("localhost", echoPort);
SshdSocketAddress bound = session.startLocalPortForwarding(local, remote);
@@ -290,8 +260,7 @@ public class PortForwardingTest extends BaseTest {
public void testForwardingChannel() throws Exception {
ClientSession session = createNativeSession();
- int forwardedPort = getFreePort();
- SshdSocketAddress local = new SshdSocketAddress("", forwardedPort);
+ SshdSocketAddress local = new SshdSocketAddress("", 0);
SshdSocketAddress remote = new SshdSocketAddress("localhost", echoPort);
ChannelDirectTcpip channel = session.createDirectTcpipChannel(local, remote);
@@ -317,7 +286,7 @@ public class PortForwardingTest extends BaseTest {
session.setPortForwardingR(forwardedPort, "localhost", echoPort);
// 2. Establish a connection through it
- new Socket("localhost", forwardedPort);
+ Socket s = new Socket("localhost", forwardedPort);
// 3. Simulate the client going away
rudelyDisconnectJschSession(session);
@@ -348,6 +317,8 @@ public class PortForwardingTest extends BaseTest {
session.delPortForwardingR(forwardedPort);
session.disconnect();
+
+ s.close();
}
/**
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/ProxyTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/ProxyTest.java b/sshd-core/src/test/java/org/apache/sshd/ProxyTest.java
index e8170a5..0bb3dba 100644
--- a/sshd-core/src/test/java/org/apache/sshd/ProxyTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/ProxyTest.java
@@ -42,7 +42,6 @@ import org.junit.Before;
import org.junit.Test;
import org.slf4j.LoggerFactory;
-import static org.apache.sshd.util.Utils.getFreePort;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
@@ -61,18 +60,15 @@ public class ProxyTest extends BaseTest {
@Before
public void setUp() throws Exception {
- sshPort = getFreePort();
- echoPort = getFreePort();
-
sshd = SshServer.setUpDefaultServer();
sshd.getProperties().put(SshServer.WINDOW_SIZE, "2048");
sshd.getProperties().put(SshServer.MAX_PACKET_SIZE, "256");
- sshd.setPort(sshPort);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setShellFactory(new EchoShellFactory());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.setTcpipForwardingFilter(new BogusForwardingFilter());
sshd.start();
+ sshPort = sshd.getPort();
NioSocketAcceptor acceptor = new NioSocketAcceptor();
acceptor.setHandler(new IoHandlerAdapter() {
@@ -86,7 +82,8 @@ public class ProxyTest extends BaseTest {
}
});
acceptor.setReuseAddress(true);
- acceptor.bind(new InetSocketAddress(echoPort));
+ acceptor.bind(new InetSocketAddress(0));
+ echoPort = acceptor.getLocalAddress().getPort();
this.acceptor = acceptor;
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/ScpTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/ScpTest.java b/sshd-core/src/test/java/org/apache/sshd/ScpTest.java
index 66322b1..0c6679b 100644
--- a/sshd-core/src/test/java/org/apache/sshd/ScpTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/ScpTest.java
@@ -63,16 +63,13 @@ public class ScpTest extends BaseTest {
@Before
public void setUp() throws Exception {
- port = Utils.getFreePort();
-// port = 8102;
-
sshd = SshServer.setUpDefaultServer();
- sshd.setPort(port);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setCommandFactory(new ScpCommandFactory());
sshd.setShellFactory(new EchoShellFactory());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.start();
+ port = sshd.getPort();
}
protected com.jcraft.jsch.Session getJschSession() throws JSchException {
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/ServerTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/ServerTest.java b/sshd-core/src/test/java/org/apache/sshd/ServerTest.java
index 87b59e5..a1ce149 100644
--- a/sshd-core/src/test/java/org/apache/sshd/ServerTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/ServerTest.java
@@ -63,15 +63,13 @@ public class ServerTest extends BaseTest {
@Before
public void setUp() throws Exception {
- port = Utils.getFreePort();
-
sshd = SshServer.setUpDefaultServer();
- sshd.setPort(port);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setShellFactory(new TestEchoShellFactory());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.setSessionFactory(new org.apache.sshd.server.session.SessionFactory());
sshd.start();
+ port = sshd.getPort();
}
@After
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/SftpTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/SftpTest.java b/sshd-core/src/test/java/org/apache/sshd/SftpTest.java
index 2d1b341..6585966 100644
--- a/sshd-core/src/test/java/org/apache/sshd/SftpTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/SftpTest.java
@@ -62,16 +62,14 @@ public class SftpTest extends BaseTest {
@Before
public void setUp() throws Exception {
- port = Utils.getFreePort();
-
sshd = SshServer.setUpDefaultServer();
- sshd.setPort(port);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setSubsystemFactories(Arrays.<NamedFactory<Command>>asList(new SftpSubsystem.Factory()));
sshd.setCommandFactory(new ScpCommandFactory());
sshd.setShellFactory(new EchoShellFactory());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.start();
+ port = sshd.getPort();
JSchLogger.init();
JSch sch = new JSch();
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/SinglePublicKeyAuthTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/SinglePublicKeyAuthTest.java b/sshd-core/src/test/java/org/apache/sshd/SinglePublicKeyAuthTest.java
index 5341bbb..240ba1f 100644
--- a/sshd-core/src/test/java/org/apache/sshd/SinglePublicKeyAuthTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/SinglePublicKeyAuthTest.java
@@ -57,9 +57,7 @@ public class SinglePublicKeyAuthTest extends BaseTest {
@Before
public void setUp() throws Exception {
- port = Utils.getFreePort();
sshd = SshServer.setUpDefaultServer();
- sshd.setPort(port);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setCommandFactory(new CommandFactory() {
public Command createCommand(String command) {
@@ -73,6 +71,7 @@ public class SinglePublicKeyAuthTest extends BaseTest {
}
});
sshd.start();
+ port = sshd.getPort();
}
@After
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/WelcomeBannerTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/WelcomeBannerTest.java b/sshd-core/src/test/java/org/apache/sshd/WelcomeBannerTest.java
index cafdc34..9fae759 100644
--- a/sshd-core/src/test/java/org/apache/sshd/WelcomeBannerTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/WelcomeBannerTest.java
@@ -40,15 +40,13 @@ public class WelcomeBannerTest extends BaseTest {
@Before
public void setUp() throws Exception {
- port = Utils.getFreePort();
-
sshd = SshServer.setUpDefaultServer();
- sshd.setPort(port);
sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator());
sshd.setPublickeyAuthenticator(new BogusPublickeyAuthenticator());
sshd.getProperties().put(SshServer.WELCOME_BANNER, WELCOME);
sshd.start();
+ port = sshd.getPort();
}
@After
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/24a5f7de/sshd-core/src/test/java/org/apache/sshd/util/Utils.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/util/Utils.java b/sshd-core/src/test/java/org/apache/sshd/util/Utils.java
index ae91d64..7cdf950 100644
--- a/sshd-core/src/test/java/org/apache/sshd/util/Utils.java
+++ b/sshd-core/src/test/java/org/apache/sshd/util/Utils.java
@@ -19,6 +19,8 @@
package org.apache.sshd.util;
import java.io.File;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.URISyntaxException;
import java.net.URL;
@@ -39,8 +41,10 @@ public class Utils {
}
public static int getFreePort() throws Exception {
- ServerSocket s = new ServerSocket(0);
+ ServerSocket s = new ServerSocket();
try {
+ s.setReuseAddress(true);
+ s.bind(new InetSocketAddress((InetAddress) null, 0));
return s.getLocalPort();
} finally {
s.close();
[5/6] mina-sshd git commit: [SSHD-385] Fix log statement when a
window is unblocked
Posted by gn...@apache.org.
[SSHD-385] Fix log statement when a window is unblocked
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/55bc6815
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/55bc6815
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/55bc6815
Branch: refs/heads/master
Commit: 55bc68154d6c4f9d62aaacf84f97911e4f0023d5
Parents: 41b261c
Author: Guillaume Nodet <gn...@apache.org>
Authored: Fri Dec 12 10:54:56 2014 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Fri Dec 12 10:54:56 2014 +0100
----------------------------------------------------------------------
.../java/org/apache/sshd/common/channel/Window.java | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/55bc6815/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
index bc7e685..cf7534c 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
@@ -127,7 +127,11 @@ public class Window {
lock.wait();
}
if (waiting) {
- log.debug("Space available for {}", name);
+ if (closed) {
+ log.debug("Window {} has been closed", name);
+ } else {
+ log.debug("Space available for {}", name);
+ }
waiting = false;
}
if (closed) {
@@ -148,7 +152,11 @@ public class Window {
lock.wait();
}
if (waiting) {
- log.debug("Space available for {}", name);
+ if (closed) {
+ log.debug("Window {} has been closed", name);
+ } else {
+ log.debug("Space available for {}", name);
+ }
waiting = false;
}
if (closed) {
[6/6] mina-sshd git commit: [SSHD-386] Allow controlling socket
options
Posted by gn...@apache.org.
[SSHD-386] Allow controlling socket options
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/f3d58b90
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/f3d58b90
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/f3d58b90
Branch: refs/heads/master
Commit: f3d58b906d795bac587f77eedb4647ad421b260d
Parents: 55bc681
Author: Guillaume Nodet <gn...@apache.org>
Authored: Fri Dec 12 14:07:55 2014 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Fri Dec 12 14:07:55 2014 +0100
----------------------------------------------------------------------
.../org/apache/sshd/common/FactoryManager.java | 42 ++++++++++++++++++++
.../sshd/common/io/mina/MinaAcceptor.java | 35 +++++-----------
.../sshd/common/io/mina/MinaConnector.java | 6 +--
.../apache/sshd/common/io/mina/MinaService.java | 37 +++++++++++++++++
.../sshd/common/io/nio2/Nio2Acceptor.java | 14 ++++++-
.../sshd/common/io/nio2/Nio2Connector.java | 7 ++++
.../apache/sshd/common/io/nio2/Nio2Service.java | 26 ++++++++++++
7 files changed, 136 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/f3d58b90/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java b/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java
index 037b718..c78f8e8 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java
@@ -71,6 +71,48 @@ public interface FactoryManager {
public static final String IDLE_TIMEOUT = "idle-timeout";
/**
+ * Socket backlog.
+ * See {@link java.nio.channels.AsynchronousServerSocketChannel#bind(java.net.SocketAddress, int)}
+ */
+ public static final String SOCKET_BACKLOG = "socket-backlog";
+
+ /**
+ * Socket keep-alive.
+ * See {@link java.net.StandardSocketOptions#SO_KEEPALIVE}
+ */
+ public static final String SOCKET_KEEPALIVE = "socket-keepalive";
+
+ /**
+ * Socket send buffer size.
+ * See {@link java.net.StandardSocketOptions#SO_SNDBUF}
+ */
+ public static final String SOCKET_SNDBUF = "socket-sndbuf";
+
+ /**
+ * Socket receive buffer size.
+ * See {@link java.net.StandardSocketOptions#SO_RCVBUF}
+ */
+ public static final String SOCKET_RCVBUF = "socket-rcvbuf";
+
+ /**
+ * Socket reuse address.
+ * See {@link java.net.StandardSocketOptions#SO_REUSEADDR}
+ */
+ public static final String SOCKET_REUSEADDR = "socket-reuseaddr";
+
+ /**
+ * Socket linger.
+ * See {@link java.net.StandardSocketOptions#SO_LINGER}
+ */
+ public static final String SOCKET_LINGER = "socket-linger";
+
+ /**
+ * Socket tcp no-delay.
+ * See {@link java.net.StandardSocketOptions#TCP_NODELAY}
+ */
+ public static final String TCP_NODELAY = "tcp-nodelay";
+
+ /**
* A map of properties that can be used to configure the SSH server
* or client. This map will never be changed by either the server or
* client and is not supposed to be changed at runtime (changes are not
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/f3d58b90/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaAcceptor.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaAcceptor.java b/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaAcceptor.java
index 107972e..7a20d78 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaAcceptor.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaAcceptor.java
@@ -19,7 +19,6 @@
package org.apache.sshd.common.io.mina;
import java.io.IOException;
-import java.net.Socket;
import java.net.SocketAddress;
import java.util.Collection;
import java.util.Set;
@@ -28,7 +27,6 @@ import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.service.IoProcessor;
import org.apache.mina.core.service.IoService;
-import org.apache.mina.core.session.IoSessionConfig;
import org.apache.mina.transport.socket.nio.NioSession;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.apache.sshd.common.FactoryManager;
@@ -39,12 +37,20 @@ public class MinaAcceptor extends MinaService implements org.apache.sshd.common.
protected volatile IoAcceptor acceptor;
// Acceptor
- protected int backlog = 50;
+ protected int backlog = 0;
protected boolean reuseAddress = true;
- protected IoSessionConfig sessionConfig;
public MinaAcceptor(FactoryManager manager, org.apache.sshd.common.io.IoHandler handler, IoProcessor<NioSession> ioProcessor) {
super(manager, handler, ioProcessor);
+
+ String valStr = manager.getProperties().get(FactoryManager.SOCKET_BACKLOG);
+ if (valStr != null) {
+ backlog = Integer.parseInt(valStr);
+ }
+ valStr = manager.getProperties().get(FactoryManager.SOCKET_REUSEADDR);
+ if (valStr != null) {
+ reuseAddress = Boolean.parseBoolean(valStr);
+ }
}
protected IoAcceptor createAcceptor() {
@@ -52,26 +58,7 @@ public class MinaAcceptor extends MinaService implements org.apache.sshd.common.
acceptor.setCloseOnDeactivation(false);
acceptor.setReuseAddress(reuseAddress);
acceptor.setBacklog(backlog);
-
- // MINA itself forces our socket receive buffer to 1024 bytes
- // by default, despite what the operating system defaults to.
- // This limits us to about 3 MB/s incoming data transfer. By
- // forcing back to the operating system default we can get a
- // decent transfer rate again.
- //
- final Socket s = new Socket();
- try {
- try {
- acceptor.getSessionConfig().setReceiveBufferSize(s.getReceiveBufferSize());
- } finally {
- s.close();
- }
- } catch (IOException e) {
- log.warn("cannot adjust SO_RCVBUF back to system default", e);
- }
- if (sessionConfig != null) {
- acceptor.getSessionConfig().setAll(sessionConfig);
- }
+ configure(acceptor.getSessionConfig());
return acceptor;
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/f3d58b90/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaConnector.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaConnector.java b/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaConnector.java
index 8181652..6e4e368 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaConnector.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaConnector.java
@@ -25,7 +25,6 @@ import org.apache.mina.core.future.IoFutureListener;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.service.IoProcessor;
-import org.apache.mina.core.session.IoSessionConfig;
import org.apache.mina.transport.socket.nio.NioSession;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.apache.sshd.common.FactoryManager;
@@ -37,7 +36,6 @@ import org.apache.sshd.common.io.IoConnectFuture;
public class MinaConnector extends MinaService implements org.apache.sshd.common.io.IoConnector, IoHandler {
protected volatile IoConnector connector;
- protected IoSessionConfig sessionConfig;
public MinaConnector(FactoryManager manager, org.apache.sshd.common.io.IoHandler handler, IoProcessor<NioSession> ioProcessor) {
super(manager, handler, ioProcessor);
@@ -45,9 +43,7 @@ public class MinaConnector extends MinaService implements org.apache.sshd.common
protected IoConnector createConnector() {
NioSocketConnector connector = new NioSocketConnector(ioProcessor);
- if (sessionConfig != null) {
- connector.getSessionConfig().setAll(sessionConfig);
- }
+ configure(connector.getSessionConfig());
return connector;
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/f3d58b90/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaService.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaService.java b/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaService.java
index 6d962ed..1981eb8 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaService.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaService.java
@@ -28,6 +28,8 @@ import org.apache.mina.core.service.IoProcessor;
import org.apache.mina.core.service.IoService;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
+import org.apache.mina.core.session.IoSessionConfig;
+import org.apache.mina.transport.socket.SocketSessionConfig;
import org.apache.mina.transport.socket.nio.NioSession;
import org.apache.sshd.common.Closeable;
import org.apache.sshd.common.FactoryManager;
@@ -45,6 +47,7 @@ public abstract class MinaService extends IoHandlerAdapter implements org.apache
protected final FactoryManager manager;
protected final org.apache.sshd.common.io.IoHandler handler;
protected final IoProcessor<NioSession> ioProcessor;
+ protected IoSessionConfig sessionConfig;
public MinaService(FactoryManager manager, org.apache.sshd.common.io.IoHandler handler, IoProcessor<NioSession> ioProcessor) {
this.manager = manager;
@@ -106,4 +109,38 @@ public abstract class MinaService extends IoHandlerAdapter implements org.apache
return (org.apache.sshd.common.io.IoSession)
session.getAttribute(org.apache.sshd.common.io.IoSession.class);
}
+
+ protected void configure(SocketSessionConfig config) {
+ Integer intVal;
+ Boolean boolVal;
+ if ((boolVal = getBoolean(FactoryManager.SOCKET_KEEPALIVE)) != null) {
+ config.setKeepAlive(boolVal);
+ }
+ if ((intVal = getInteger(FactoryManager.SOCKET_SNDBUF)) != null) {
+ config.setSendBufferSize(intVal);
+ }
+ if ((intVal = getInteger(FactoryManager.SOCKET_RCVBUF)) != null) {
+ config.setReceiveBufferSize(intVal);
+ }
+ if ((intVal = getInteger(FactoryManager.SOCKET_LINGER)) != null) {
+ config.setSoLinger(intVal);
+ }
+ if ((boolVal = getBoolean(FactoryManager.SOCKET_LINGER)) != null) {
+ config.setTcpNoDelay(boolVal);
+ }
+ if (sessionConfig != null) {
+ config.setAll(sessionConfig);
+ }
+ }
+
+ protected Integer getInteger(String property) {
+ String strVal = manager.getProperties().get(property);
+ return (strVal != null) ? Integer.parseInt(strVal) : null;
+ }
+
+ protected Boolean getBoolean(String property) {
+ String strVal = manager.getProperties().get(property);
+ return (strVal != null) ? Boolean.parseBoolean(strVal) : null;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/f3d58b90/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
index f9fab11..9bba704 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
@@ -41,18 +41,28 @@ import org.apache.sshd.common.io.IoHandler;
public class Nio2Acceptor extends Nio2Service implements IoAcceptor {
private final Map<SocketAddress, AsynchronousServerSocketChannel> channels;
- private int backlog = 50;
+ private int backlog = 0;
public Nio2Acceptor(FactoryManager manager, IoHandler handler, AsynchronousChannelGroup group) {
super(manager, handler, group);
channels = new ConcurrentHashMap<SocketAddress, AsynchronousServerSocketChannel>();
+
+ String valStr = manager.getProperties().get(FactoryManager.SOCKET_BACKLOG);
+ if (valStr != null) {
+ backlog = Integer.parseInt(valStr);
+ }
}
public void bind(Collection<? extends SocketAddress> addresses) throws IOException {
for (SocketAddress address : addresses) {
logger.debug("Binding Nio2Acceptor to address {}", address);
AsynchronousServerSocketChannel socket = AsynchronousServerSocketChannel.open(group);
- socket.setOption(StandardSocketOptions.SO_REUSEADDR, Boolean.TRUE);
+ setOption(socket, FactoryManager.SOCKET_KEEPALIVE, StandardSocketOptions.SO_KEEPALIVE, null);
+ setOption(socket, FactoryManager.SOCKET_LINGER, StandardSocketOptions.SO_LINGER, null);
+ setOption(socket, FactoryManager.SOCKET_RCVBUF, StandardSocketOptions.SO_RCVBUF, null);
+ setOption(socket, FactoryManager.SOCKET_REUSEADDR, StandardSocketOptions.SO_REUSEADDR, Boolean.TRUE);
+ setOption(socket, FactoryManager.SOCKET_SNDBUF, StandardSocketOptions.SO_SNDBUF, null);
+ setOption(socket, FactoryManager.TCP_NODELAY, StandardSocketOptions.TCP_NODELAY, null);
socket.bind(address, backlog);
SocketAddress local = socket.getLocalAddress();
channels.put(local, socket);
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/f3d58b90/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java
index d427ef4..0ad182b 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java
@@ -20,6 +20,7 @@ package org.apache.sshd.common.io.nio2;
import java.io.IOException;
import java.net.SocketAddress;
+import java.net.StandardSocketOptions;
import java.nio.channels.AsynchronousChannelGroup;
import java.nio.channels.AsynchronousSocketChannel;
@@ -43,6 +44,12 @@ public class Nio2Connector extends Nio2Service implements IoConnector {
final IoConnectFuture future = new DefaultIoConnectFuture(null);
try {
final AsynchronousSocketChannel socket = AsynchronousSocketChannel.open(group);
+ setOption(socket, FactoryManager.SOCKET_KEEPALIVE, StandardSocketOptions.SO_KEEPALIVE, null);
+ setOption(socket, FactoryManager.SOCKET_LINGER, StandardSocketOptions.SO_LINGER, null);
+ setOption(socket, FactoryManager.SOCKET_RCVBUF, StandardSocketOptions.SO_RCVBUF, null);
+ setOption(socket, FactoryManager.SOCKET_REUSEADDR, StandardSocketOptions.SO_REUSEADDR, Boolean.TRUE);
+ setOption(socket, FactoryManager.SOCKET_SNDBUF, StandardSocketOptions.SO_SNDBUF, null);
+ setOption(socket, FactoryManager.TCP_NODELAY, StandardSocketOptions.TCP_NODELAY, null);
socket.connect(address, null, new Nio2CompletionHandler<Void, Object>() {
protected void onCompleted(Void result, Object attachment) {
try {
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/f3d58b90/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
index 3c5a2b7..4bdb8f7 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
@@ -18,7 +18,10 @@
*/
package org.apache.sshd.common.io.nio2;
+import java.io.IOException;
+import java.net.SocketOption;
import java.nio.channels.AsynchronousChannelGroup;
+import java.nio.channels.NetworkChannel;
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -72,4 +75,27 @@ public abstract class Nio2Service extends CloseableUtils.AbstractInnerCloseable
public void sessionClosed(Nio2Session session) {
sessions.remove(session.getId());
}
+
+ protected <T> void setOption(NetworkChannel socket, String property, SocketOption<T> option, T defaultValue) throws IOException {
+ String valStr = manager.getProperties().get(property);
+ T val = defaultValue;
+ if (valStr != null) {
+ Class<T> type = option.type();
+ if (type == Integer.class) {
+ val = type.cast(Integer.parseInt(valStr));
+ } else if (type == Boolean.class) {
+ val = type.cast(Boolean.parseBoolean(valStr));
+ } else {
+ throw new IllegalStateException("Unsupported socket option type " + type);
+ }
+ }
+ if (val != null) {
+ try {
+ socket.setOption(option, val);
+ } catch (IOException e) {
+ logger.warn("Unable to set socket option " + option + " to " + val, e);
+ }
+ }
+ }
+
}
[4/6] mina-sshd git commit: [SSHD-384] Fix broken client demo when
executing a command
Posted by gn...@apache.org.
[SSHD-384] Fix broken client demo when executing a command
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/41b261c7
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/41b261c7
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/41b261c7
Branch: refs/heads/master
Commit: 41b261c75a0e19e95dc328dd50b601b4429de8c8
Parents: 3b1308e
Author: Guillaume Nodet <gn...@apache.org>
Authored: Fri Dec 12 10:52:04 2014 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Fri Dec 12 10:52:04 2014 +0100
----------------------------------------------------------------------
sshd-core/src/main/java/org/apache/sshd/SshClient.java | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/41b261c7/sshd-core/src/main/java/org/apache/sshd/SshClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/SshClient.java b/sshd-core/src/main/java/org/apache/sshd/SshClient.java
index 7156bf0..1b2e6aa 100644
--- a/sshd-core/src/main/java/org/apache/sshd/SshClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/SshClient.java
@@ -557,15 +557,12 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa
((ChannelShell) channel).setAgentForwarding(agentForward);
channel.setIn(new NoCloseInputStream(System.in));
} else {
- channel = session.createChannel(ClientChannel.CHANNEL_EXEC);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- Writer w = new OutputStreamWriter(baos);
+ StringWriter w = new StringWriter();
for (String cmd : command) {
w.append(cmd).append(" ");
}
- w.append("\n");
w.close();
- channel.setIn(new ByteArrayInputStream(baos.toByteArray()));
+ channel = session.createChannel(ClientChannel.CHANNEL_EXEC, w.toString());
}
channel.setOut(new NoCloseOutputStream(System.out));
channel.setErr(new NoCloseOutputStream(System.err));
[3/6] mina-sshd git commit: [SSHD-383] Support for loading ecdsa keys
in the client demo
Posted by gn...@apache.org.
[SSHD-383] Support for loading ecdsa keys in the client demo
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/3b1308e8
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/3b1308e8
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/3b1308e8
Branch: refs/heads/master
Commit: 3b1308e8f17e042d13c9a2ef63675b1939efe0fd
Parents: 71ad6a0
Author: Guillaume Nodet <gn...@apache.org>
Authored: Fri Dec 12 10:50:51 2014 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Fri Dec 12 10:50:51 2014 +0100
----------------------------------------------------------------------
sshd-core/src/main/java/org/apache/sshd/SshClient.java | 4 ++++
1 file changed, 4 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/3b1308e8/sshd-core/src/main/java/org/apache/sshd/SshClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/SshClient.java b/sshd-core/src/main/java/org/apache/sshd/SshClient.java
index ef34288..7156bf0 100644
--- a/sshd-core/src/main/java/org/apache/sshd/SshClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/SshClient.java
@@ -474,6 +474,10 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa
if (f.exists() && f.isFile() && f.canRead()) {
files.add(f.getAbsolutePath());
}
+ f = new File(System.getProperty("user.home"), ".ssh/id_ecdsa");
+ if (f.exists() && f.isFile() && f.canRead()) {
+ files.add(f.getAbsolutePath());
+ }
if (files.size() > 0) {
// SSHD-292: we need to use a different class to load the FileKeyPairProvider
// in order to break the link between SshClient and BouncyCastle
[2/6] mina-sshd git commit: [SSHD-382] Add support for custom
properties on the command line for client and server
Posted by gn...@apache.org.
[SSHD-382] Add support for custom properties on the command line for client and server
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/71ad6a07
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/71ad6a07
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/71ad6a07
Branch: refs/heads/master
Commit: 71ad6a07607ce1178ef913b3d3f3040114603617
Parents: 24a5f7d
Author: Guillaume Nodet <gn...@apache.org>
Authored: Fri Dec 12 10:48:27 2014 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Fri Dec 12 10:48:27 2014 +0100
----------------------------------------------------------------------
.../main/java/org/apache/sshd/SshClient.java | 20 +++++++++++++++++++-
.../main/java/org/apache/sshd/SshServer.java | 20 +++++++++++++++++++-
2 files changed, 38 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/71ad6a07/sshd-core/src/main/java/org/apache/sshd/SshClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/SshClient.java b/sshd-core/src/main/java/org/apache/sshd/SshClient.java
index 461b8ca..ef34288 100644
--- a/sshd-core/src/main/java/org/apache/sshd/SshClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/SshClient.java
@@ -33,7 +33,9 @@ import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.Callable;
import java.util.logging.ConsoleHandler;
import java.util.logging.Formatter;
@@ -374,6 +376,7 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa
int socksPort = -1;
boolean error = false;
List<String> identities = new ArrayList<String>();
+ Map<String, String> options = new LinkedHashMap<String, String>();
for (int i = 0; i < args.length; i++) {
if (command == null && "-p".equals(args[i])) {
@@ -414,6 +417,20 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa
break;
}
identities.add(args[++i]);
+ } else if (command == null && "-o".equals(args[i])) {
+ if (i + 1 >= args.length) {
+ System.err.println("option requires and argument: " + args[i]);
+ error = true;
+ break;
+ }
+ String opt = args[++i];
+ int idx = opt.indexOf('=');
+ if (idx <= 0) {
+ System.err.println("bad syntax for option: " + opt);
+ error = true;
+ break;
+ }
+ options.put(opt.substring(0, idx), opt.substring(idx + 1));
} else if (command == null && args[i].startsWith("-")) {
System.err.println("illegal option: " + args[i]);
error = true;
@@ -434,7 +451,7 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa
error = true;
}
if (error) {
- System.err.println("usage: ssh [-A|-a] [-v[v][v]] [-D socksPort] [-l login] [-p port] hostname [command]");
+ System.err.println("usage: ssh [-A|-a] [-v[v][v]] [-D socksPort] [-l login] [-p port] [-o option=value] hostname [command]");
System.exit(-1);
}
if (logLevel <= 0) {
@@ -486,6 +503,7 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa
}
SshClient client = SshClient.setUpDefaultClient();
+ client.getProperties().putAll(options);
client.start();
client.setKeyPairProvider(provider);
client.setUserInteraction(new UserInteraction() {
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/71ad6a07/sshd-core/src/main/java/org/apache/sshd/SshServer.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/SshServer.java b/sshd-core/src/main/java/org/apache/sshd/SshServer.java
index 2424df4..d29ef9e 100644
--- a/sshd-core/src/main/java/org/apache/sshd/SshServer.java
+++ b/sshd-core/src/main/java/org/apache/sshd/SshServer.java
@@ -25,7 +25,9 @@ import java.security.PublicKey;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import org.apache.sshd.common.AbstractFactoryManager;
import org.apache.sshd.common.Closeable;
@@ -372,6 +374,7 @@ public class SshServer extends AbstractFactoryManager implements ServerFactoryMa
int port = 8000;
String provider;
boolean error = false;
+ Map<String, String> options = new LinkedHashMap<String, String>();
for (int i = 0; i < args.length; i++) {
if ("-p".equals(args[i])) {
@@ -394,6 +397,20 @@ public class SshServer extends AbstractFactoryManager implements ServerFactoryMa
System.err.println("provider should be mina or nio2: " + args[i]);
break;
}
+ } else if ("-o".equals(args[i])) {
+ if (i + 1 >= args.length) {
+ System.err.println("option requires and argument: " + args[i]);
+ error = true;
+ break;
+ }
+ String opt = args[++i];
+ int idx = opt.indexOf('=');
+ if (idx <= 0) {
+ System.err.println("bad syntax for option: " + opt);
+ error = true;
+ break;
+ }
+ options.put(opt.substring(0, idx), opt.substring(idx + 1));
} else if (args[i].startsWith("-")) {
System.err.println("illegal option: " + args[i]);
error = true;
@@ -405,13 +422,14 @@ public class SshServer extends AbstractFactoryManager implements ServerFactoryMa
}
}
if (error) {
- System.err.println("usage: sshd [-p port] [-io mina|nio2]");
+ System.err.println("usage: sshd [-p port] [-io mina|nio2] [-o option=value]");
System.exit(-1);
}
System.err.println("Starting SSHD on port " + port);
SshServer sshd = SshServer.setUpDefaultServer();
+ sshd.getProperties().putAll(options);
sshd.setPort(port);
sshd.getProperties().put(SshServer.WELCOME_BANNER, "Welcome to SSHD\n");
if (SecurityUtils.isBouncyCastleRegistered()) {