SSHD-1028:[1] server doesn't close server-side sessions properly when client disconnects. [1] https://issues.apache.org/jira/projects/SSHD/issues/SSHD-1028 Change-Id: I0d67f49e35abe8375cb1370a494dc01d0fb2c9b1 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>tags/v5.9.0.202008260805-m3
@@ -22,6 +22,7 @@ import java.util.ArrayList; | |||
import java.util.Collections; | |||
import java.util.List; | |||
import java.util.Locale; | |||
import java.util.Map; | |||
import org.apache.sshd.common.NamedResource; | |||
import org.apache.sshd.common.PropertyResolverUtils; | |||
@@ -297,6 +298,17 @@ public class SshTestGitServer { | |||
DefaultKeyboardInteractiveAuthenticator.INSTANCE); | |||
} | |||
/** | |||
* Retrieves the server's property map. This is a live map; changing it | |||
* affects the server. | |||
* | |||
* @return a live map of the server's properties | |||
* @since 5.9 | |||
*/ | |||
public Map<String, Object> getProperties() { | |||
return server.getProperties(); | |||
} | |||
/** | |||
* Starts the test server, listening on a random port. | |||
* |
@@ -15,6 +15,8 @@ Import-Package: org.apache.sshd.client.config.hosts;version="[2.4.0,2.5.0)", | |||
org.apache.sshd.common.session;version="[2.4.0,2.5.0)", | |||
org.apache.sshd.common.util.net;version="[2.4.0,2.5.0)", | |||
org.apache.sshd.common.util.security;version="[2.4.0,2.5.0)", | |||
org.apache.sshd.server;version="[2.4.0,2.5.0)", | |||
org.eclipse.jgit.api;version="[5.9.0,5.10.0)", | |||
org.eclipse.jgit.api.errors;version="[5.9.0,5.10.0)", | |||
org.eclipse.jgit.internal.transport.sshd.proxy;version="[5.9.0,5.10.0)", | |||
org.eclipse.jgit.junit;version="[5.9.0,5.10.0)", |
@@ -21,6 +21,8 @@ import java.util.Arrays; | |||
import java.util.List; | |||
import java.util.stream.Collectors; | |||
import org.apache.sshd.client.config.hosts.KnownHostEntry; | |||
import org.apache.sshd.server.ServerFactoryManager; | |||
import org.eclipse.jgit.api.Git; | |||
import org.eclipse.jgit.api.errors.TransportException; | |||
import org.eclipse.jgit.junit.ssh.SshTestBase; | |||
import org.eclipse.jgit.lib.Constants; | |||
@@ -175,4 +177,31 @@ public class ApacheSshTest extends SshTestBase { | |||
defaultCloneDir, null, | |||
"IdentityFile " + privateKey1.getAbsolutePath()); | |||
} | |||
/** | |||
* Test for SSHD-1028. If the server doesn't close sessions, the second | |||
* fetch will fail. Occurs on sshd 2.5.[01]. | |||
* | |||
* @throws Exception | |||
* on errors | |||
* @see <a href= | |||
* "https://issues.apache.org/jira/projects/SSHD/issues/SSHD-1028">SSHD-1028</a> | |||
*/ | |||
@Test | |||
public void testPushWithSessionLimit() throws Exception { | |||
server.getProperties().put(ServerFactoryManager.MAX_CONCURRENT_SESSIONS, | |||
Integer.valueOf(2)); | |||
File localClone = cloneWith("ssh://localhost/doesntmatter", | |||
defaultCloneDir, null, // | |||
"Host localhost", // | |||
"HostName localhost", // | |||
"Port " + testPort, // | |||
"User " + TEST_USER, // | |||
"IdentityFile " + privateKey1.getAbsolutePath()); | |||
// Fetch a couple of times | |||
try (Git git = Git.open(localClone)) { | |||
git.fetch().call(); | |||
git.fetch().call(); | |||
} | |||
} | |||
} |