From: Thomas Wolf Date: Fri, 3 Jul 2020 18:43:00 +0000 (+0200) Subject: Add a test for upstream bug SSHD-1028 X-Git-Tag: v5.9.0.202008260805-m3~26 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=151f0cb82bacb678a4d0ff6eed4a04aacf1efa2e;p=jgit.git Add a test for upstream bug SSHD-1028 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 --- diff --git a/org.eclipse.jgit.junit.ssh/src/org/eclipse/jgit/junit/ssh/SshTestGitServer.java b/org.eclipse.jgit.junit.ssh/src/org/eclipse/jgit/junit/ssh/SshTestGitServer.java index 03e2855829..9aa4afcef1 100644 --- a/org.eclipse.jgit.junit.ssh/src/org/eclipse/jgit/junit/ssh/SshTestGitServer.java +++ b/org.eclipse.jgit.junit.ssh/src/org/eclipse/jgit/junit/ssh/SshTestGitServer.java @@ -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 getProperties() { + return server.getProperties(); + } + /** * Starts the test server, listening on a random port. * diff --git a/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF index 3bcd02f27f..c4ffda9998 100644 --- a/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF @@ -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)", diff --git a/org.eclipse.jgit.ssh.apache.test/tst/org/eclipse/jgit/transport/sshd/ApacheSshTest.java b/org.eclipse.jgit.ssh.apache.test/tst/org/eclipse/jgit/transport/sshd/ApacheSshTest.java index bfee04219d..1b2f7f32f4 100644 --- a/org.eclipse.jgit.ssh.apache.test/tst/org/eclipse/jgit/transport/sshd/ApacheSshTest.java +++ b/org.eclipse.jgit.ssh.apache.test/tst/org/eclipse/jgit/transport/sshd/ApacheSshTest.java @@ -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 SSHD-1028 + */ + @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(); + } + } }