You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by lg...@apache.org on 2016/08/21 15:38:54 UTC
[2/4] mina-sshd git commit: [SSHD-691] Attempt to create server
instance only once per test as much as possible
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/ae8d1c99/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java b/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java
index 3ddfe18..983addf 100644
--- a/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java
@@ -34,10 +34,10 @@ import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.EnumSet;
-import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -89,15 +89,14 @@ import org.apache.sshd.server.subsystem.sftp.AbstractSftpEventListenerAdapter;
import org.apache.sshd.server.subsystem.sftp.DirectoryHandle;
import org.apache.sshd.server.subsystem.sftp.FileHandle;
import org.apache.sshd.server.subsystem.sftp.Handle;
+import org.apache.sshd.server.subsystem.sftp.SftpEventListener;
import org.apache.sshd.server.subsystem.sftp.SftpSubsystem;
import org.apache.sshd.server.subsystem.sftp.SftpSubsystemFactory;
-import org.apache.sshd.util.test.JSchLogger;
import org.apache.sshd.util.test.SimpleUserInfo;
import org.apache.sshd.util.test.Utils;
import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
@@ -115,11 +114,6 @@ public class SftpTest extends AbstractSftpClientTestSupport {
super();
}
- @BeforeClass
- public static void jschInit() {
- JSchLogger.init();
- }
-
@Before
public void setUp() throws Exception {
setupServer();
@@ -134,8 +128,6 @@ public class SftpTest extends AbstractSftpClientTestSupport {
if (session != null) {
session.disconnect();
}
-
- tearDownServer();
}
@Test // see SSHD-547
@@ -152,32 +144,26 @@ public class SftpTest extends AbstractSftpClientTestSupport {
rnd.fill(expectedRandom);
byte[] expectedText = (getClass().getName() + "#" + getCurrentTestName()).getBytes(StandardCharsets.UTF_8);
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
-
- try (SftpClient sftp = session.createSftpClient()) {
- String file = Utils.resolveRelativeRemotePath(parentPath, testFile);
-
- try (CloseableHandle handle = sftp.open(file, OpenMode.Create, OpenMode.Write, OpenMode.Read, OpenMode.Append)) {
- sftp.write(handle, 7365L, expectedRandom);
- byte[] actualRandom = new byte[expectedRandom.length];
- int readLen = sftp.read(handle, 0L, actualRandom);
- assertEquals("Incomplete random data read", expectedRandom.length, readLen);
- assertArrayEquals("Mismatched read random data", expectedRandom, actualRandom);
-
- sftp.write(handle, 3777347L, expectedText);
- byte[] actualText = new byte[expectedText.length];
- readLen = sftp.read(handle, actualRandom.length, actualText);
- assertEquals("Incomplete text data read", actualText.length, readLen);
- assertArrayEquals("Mismatched read text data", expectedText, actualText);
- }
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
+
+ try (SftpClient sftp = session.createSftpClient()) {
+ String file = Utils.resolveRelativeRemotePath(parentPath, testFile);
+
+ try (CloseableHandle handle = sftp.open(file, OpenMode.Create, OpenMode.Write, OpenMode.Read, OpenMode.Append)) {
+ sftp.write(handle, 7365L, expectedRandom);
+ byte[] actualRandom = new byte[expectedRandom.length];
+ int readLen = sftp.read(handle, 0L, actualRandom);
+ assertEquals("Incomplete random data read", expectedRandom.length, readLen);
+ assertArrayEquals("Mismatched read random data", expectedRandom, actualRandom);
+
+ sftp.write(handle, 3777347L, expectedText);
+ byte[] actualText = new byte[expectedText.length];
+ readLen = sftp.read(handle, actualRandom.length, actualText);
+ assertEquals("Incomplete text data read", actualText.length, readLen);
+ assertArrayEquals("Mismatched read text data", expectedText, actualText);
}
- } finally {
- client.stop();
}
}
@@ -204,36 +190,32 @@ public class SftpTest extends AbstractSftpClientTestSupport {
rnd.fill(expected);
Files.write(testFile, expected);
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
-
- try (SftpClient sftp = session.createSftpClient()) {
- String file = Utils.resolveRelativeRemotePath(parentPath, testFile);
- byte[] actual = new byte[expected.length];
- int maxAllowed = actual.length / 4;
- // allow less than actual
- PropertyResolverUtils.updateProperty(sshd, SftpSubsystem.MAX_PACKET_LENGTH_PROP, maxAllowed);
- try (CloseableHandle handle = sftp.open(file, OpenMode.Read)) {
- int readLen = sftp.read(handle, 0L, actual);
- assertEquals("Mismatched read len", maxAllowed, readLen);
-
- for (int index = 0; index < readLen; index++) {
- byte expByte = expected[index];
- byte actByte = actual[index];
- if (expByte != actByte) {
- fail("Mismatched values at index=" + index
- + ": expected=0x" + Integer.toHexString(expByte & 0xFF)
- + ", actual=0x" + Integer.toHexString(actByte & 0xFF));
- }
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
+
+ try (SftpClient sftp = session.createSftpClient()) {
+ String file = Utils.resolveRelativeRemotePath(parentPath, testFile);
+ byte[] actual = new byte[expected.length];
+ int maxAllowed = actual.length / 4;
+ // allow less than actual
+ PropertyResolverUtils.updateProperty(sshd, SftpSubsystem.MAX_PACKET_LENGTH_PROP, maxAllowed);
+ try (CloseableHandle handle = sftp.open(file, OpenMode.Read)) {
+ int readLen = sftp.read(handle, 0L, actual);
+ assertEquals("Mismatched read len", maxAllowed, readLen);
+
+ for (int index = 0; index < readLen; index++) {
+ byte expByte = expected[index];
+ byte actByte = actual[index];
+ if (expByte != actByte) {
+ fail("Mismatched values at index=" + index
+ + ": expected=0x" + Integer.toHexString(expByte & 0xFF)
+ + ", actual=0x" + Integer.toHexString(actByte & 0xFF));
}
}
+ } finally {
+ PropertyResolverUtils.updateProperty(sshd, SftpSubsystem.MAX_PACKET_LENGTH_PROP, SftpSubsystem.DEFAULT_MAX_PACKET_LENGTH);
}
- } finally {
- client.stop();
}
}
}
@@ -249,20 +231,14 @@ public class SftpTest extends AbstractSftpClientTestSupport {
}
});
- try (SshClient client = setupTestClient()) {
- client.start();
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
-
- try (SftpClient sftp = session.createSftpClient()) {
- String rootDir = sftp.canonicalPath("/");
- String upDir = sftp.canonicalPath(rootDir + "/..");
- assertEquals("Mismatched root dir parent", rootDir, upDir);
- }
- } finally {
- client.stop();
+ try (SftpClient sftp = session.createSftpClient()) {
+ String rootDir = sftp.canonicalPath("/");
+ String upDir = sftp.canonicalPath(rootDir + "/..");
+ assertEquals("Mismatched root dir parent", rootDir, upDir);
}
}
}
@@ -283,70 +259,58 @@ public class SftpTest extends AbstractSftpClientTestSupport {
assertHierarchyTargetFolderExists(lclSftp);
sshd.setFileSystemFactory(new VirtualFileSystemFactory(lclSftp));
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
- String escapePath;
- if (useAbsolutePath) {
- escapePath = targetPath.toString();
- if (OsUtils.isWin32()) {
- escapePath = "/" + escapePath.replace(File.separatorChar, '/');
- }
- } else {
- Path parent = lclSftp.getParent();
- Path forbidden = Files.createDirectories(parent.resolve("forbidden"));
- escapePath = "../" + forbidden.getFileName();
+ String escapePath;
+ if (useAbsolutePath) {
+ escapePath = targetPath.toString();
+ if (OsUtils.isWin32()) {
+ escapePath = "/" + escapePath.replace(File.separatorChar, '/');
}
+ } else {
+ Path parent = lclSftp.getParent();
+ Path forbidden = Files.createDirectories(parent.resolve("forbidden"));
+ escapePath = "../" + forbidden.getFileName();
+ }
- try (SftpClient sftp = session.createSftpClient()) {
- SftpClient.Attributes attrs = sftp.stat(escapePath);
- fail("Unexpected escape success for path=" + escapePath + ": " + attrs);
- } catch (SftpException e) {
- int expected = OsUtils.isWin32() || (!useAbsolutePath)
- ? SftpConstants.SSH_FX_INVALID_FILENAME
- : SftpConstants.SSH_FX_NO_SUCH_FILE;
- assertEquals("Mismatched status for " + escapePath,
- SftpConstants.getStatusName(expected),
- SftpConstants.getStatusName(e.getStatus()));
- }
- } finally {
- client.stop();
+ try (SftpClient sftp = session.createSftpClient()) {
+ SftpClient.Attributes attrs = sftp.stat(escapePath);
+ fail("Unexpected escape success for path=" + escapePath + ": " + attrs);
+ } catch (SftpException e) {
+ int expected = OsUtils.isWin32() || (!useAbsolutePath)
+ ? SftpConstants.SSH_FX_INVALID_FILENAME
+ : SftpConstants.SSH_FX_NO_SUCH_FILE;
+ assertEquals("Mismatched status for " + escapePath,
+ SftpConstants.getStatusName(expected),
+ SftpConstants.getStatusName(e.getStatus()));
}
}
}
@Test
public void testNormalizeRemoteRootValues() throws Exception {
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
-
- try (SftpClient sftp = session.createSftpClient()) {
- StringBuilder sb = new StringBuilder(Long.SIZE + 1);
- String expected = sftp.canonicalPath("/");
- for (int i = 0; i < Long.SIZE; i++) {
- if (sb.length() > 0) {
- sb.setLength(0);
- }
-
- for (int j = 1; j <= i; j++) {
- sb.append('/');
- }
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
+
+ try (SftpClient sftp = session.createSftpClient()) {
+ StringBuilder sb = new StringBuilder(Long.SIZE + 1);
+ String expected = sftp.canonicalPath("/");
+ for (int i = 0; i < Long.SIZE; i++) {
+ if (sb.length() > 0) {
+ sb.setLength(0);
+ }
- String remotePath = sb.toString();
- String actual = sftp.canonicalPath(remotePath);
- assertEquals("Mismatched roots for " + remotePath.length() + " slashes", expected, actual);
+ for (int j = 1; j <= i; j++) {
+ sb.append('/');
}
+
+ String remotePath = sb.toString();
+ String actual = sftp.canonicalPath(remotePath);
+ assertEquals("Mismatched roots for " + remotePath.length() + " slashes", expected, actual);
}
- } finally {
- client.stop();
}
}
}
@@ -360,42 +324,36 @@ public class SftpTest extends AbstractSftpClientTestSupport {
String file = Utils.resolveRelativeRemotePath(parentPath, testFile);
String[] comps = GenericUtils.split(file, '/');
- try (SshClient client = setupTestClient()) {
- client.start();
-
- Factory<? extends Random> factory = client.getRandomFactory();
- Random rnd = factory.create();
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
-
- try (SftpClient sftp = session.createSftpClient()) {
- StringBuilder sb = new StringBuilder(file.length() + comps.length);
- String expected = sftp.canonicalPath(file);
- for (int i = 0; i < file.length(); i++) {
- if (sb.length() > 0) {
- sb.setLength(0);
- }
+ Factory<? extends Random> factory = client.getRandomFactory();
+ Random rnd = factory.create();
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
+
+ try (SftpClient sftp = session.createSftpClient()) {
+ StringBuilder sb = new StringBuilder(file.length() + comps.length);
+ String expected = sftp.canonicalPath(file);
+ for (int i = 0; i < file.length(); i++) {
+ if (sb.length() > 0) {
+ sb.setLength(0);
+ }
- sb.append(comps[0]);
- for (int j = 1; j < comps.length; j++) {
- String name = comps[j];
- slashify(sb, rnd);
- sb.append(name);
- }
+ sb.append(comps[0]);
+ for (int j = 1; j < comps.length; j++) {
+ String name = comps[j];
slashify(sb, rnd);
+ sb.append(name);
+ }
+ slashify(sb, rnd);
- if (rnd.random(Byte.SIZE) < (Byte.SIZE / 2)) {
- sb.append('.');
- }
-
- String remotePath = sb.toString();
- String actual = sftp.canonicalPath(remotePath);
- assertEquals("Mismatched canonical value for " + remotePath, expected, actual);
+ if (rnd.random(Byte.SIZE) < (Byte.SIZE / 2)) {
+ sb.append('.');
}
+
+ String remotePath = sb.toString();
+ String actual = sftp.canonicalPath(remotePath);
+ assertEquals("Mismatched canonical value for " + remotePath, expected, actual);
}
- } finally {
- client.stop();
}
}
}
@@ -421,94 +379,88 @@ public class SftpTest extends AbstractSftpClientTestSupport {
File javaFile = testFile.toFile();
assertHierarchyTargetFolderExists(javaFile.getParentFile());
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
- javaFile.createNewFile();
- javaFile.setWritable(false, false);
- javaFile.setReadable(false, false);
+ javaFile.createNewFile();
+ javaFile.setWritable(false, false);
+ javaFile.setReadable(false, false);
- try (SftpClient sftp = session.createSftpClient()) {
- boolean isWindows = OsUtils.isWin32();
-
- try (SftpClient.CloseableHandle h = sftp.open(file /* no mode == read */)) {
- // NOTE: on Windows files are always readable
- // see https://svn.apache.org/repos/asf/harmony/enhanced/java/branches/java6/classlib/modules/
- // luni/src/test/api/windows/org/apache/harmony/luni/tests/java/io/WinFileTest.java
- assertTrue("Empty read should have failed on " + file, isWindows);
- } catch (IOException e) {
- if (isWindows) {
- throw e;
- }
- }
+ try (SftpClient sftp = session.createSftpClient()) {
+ boolean isWindows = OsUtils.isWin32();
- try (SftpClient.CloseableHandle h = sftp.open(file, EnumSet.of(SftpClient.OpenMode.Write))) {
- fail("Empty write should have failed on " + file);
- } catch (IOException e) {
- // ok
+ try (SftpClient.CloseableHandle h = sftp.open(file /* no mode == read */)) {
+ // NOTE: on Windows files are always readable
+ // see https://svn.apache.org/repos/asf/harmony/enhanced/java/branches/java6/classlib/modules/
+ // luni/src/test/api/windows/org/apache/harmony/luni/tests/java/io/WinFileTest.java
+ assertTrue("Empty read should have failed on " + file, isWindows);
+ } catch (IOException e) {
+ if (isWindows) {
+ throw e;
}
+ }
- try (SftpClient.CloseableHandle h = sftp.open(file, EnumSet.of(SftpClient.OpenMode.Truncate))) {
- // NOTE: on Windows files are always readable
- assertTrue("Empty truncate should have failed on " + file, isWindows);
- } catch (IOException e) {
- // ok
- }
+ try (SftpClient.CloseableHandle h = sftp.open(file, EnumSet.of(SftpClient.OpenMode.Write))) {
+ fail("Empty write should have failed on " + file);
+ } catch (IOException e) {
+ // ok
+ }
+ try (SftpClient.CloseableHandle h = sftp.open(file, EnumSet.of(SftpClient.OpenMode.Truncate))) {
// NOTE: on Windows files are always readable
- int perms = sftp.stat(file).getPermissions();
- int readMask = isWindows ? 0 : SftpConstants.S_IRUSR;
- int permsMask = SftpConstants.S_IWUSR | readMask;
- assertEquals("Mismatched permissions for " + file + ": 0x" + Integer.toHexString(perms), 0, perms & permsMask);
+ assertTrue("Empty truncate should have failed on " + file, isWindows);
+ } catch (IOException e) {
+ // ok
+ }
- javaFile.setWritable(true, false);
+ // NOTE: on Windows files are always readable
+ int perms = sftp.stat(file).getPermissions();
+ int readMask = isWindows ? 0 : SftpConstants.S_IRUSR;
+ int permsMask = SftpConstants.S_IWUSR | readMask;
+ assertEquals("Mismatched permissions for " + file + ": 0x" + Integer.toHexString(perms), 0, perms & permsMask);
- try (SftpClient.CloseableHandle h = sftp.open(file, EnumSet.of(SftpClient.OpenMode.Truncate, SftpClient.OpenMode.Write))) {
- // OK should succeed
- assertTrue("Handle not marked as open for file=" + file, h.isOpen());
- }
+ javaFile.setWritable(true, false);
- byte[] d = "0123456789\n".getBytes(StandardCharsets.UTF_8);
- try (SftpClient.CloseableHandle h = sftp.open(file, EnumSet.of(SftpClient.OpenMode.Write))) {
- sftp.write(h, 0, d, 0, d.length);
- sftp.write(h, d.length, d, 0, d.length);
- }
+ try (SftpClient.CloseableHandle h = sftp.open(file, EnumSet.of(SftpClient.OpenMode.Truncate, SftpClient.OpenMode.Write))) {
+ // OK should succeed
+ assertTrue("Handle not marked as open for file=" + file, h.isOpen());
+ }
- try (SftpClient.CloseableHandle h = sftp.open(file, EnumSet.of(SftpClient.OpenMode.Write))) {
- sftp.write(h, d.length * 2, d, 0, d.length);
- }
+ byte[] d = "0123456789\n".getBytes(StandardCharsets.UTF_8);
+ try (SftpClient.CloseableHandle h = sftp.open(file, EnumSet.of(SftpClient.OpenMode.Write))) {
+ sftp.write(h, 0, d, 0, d.length);
+ sftp.write(h, d.length, d, 0, d.length);
+ }
- try (SftpClient.CloseableHandle h = sftp.open(file, EnumSet.of(SftpClient.OpenMode.Write))) {
- byte[] overwrite = "-".getBytes(StandardCharsets.UTF_8);
- sftp.write(h, 3L, overwrite, 0, 1);
- d[3] = overwrite[0];
- }
+ try (SftpClient.CloseableHandle h = sftp.open(file, EnumSet.of(SftpClient.OpenMode.Write))) {
+ sftp.write(h, d.length * 2, d, 0, d.length);
+ }
- try (SftpClient.CloseableHandle h = sftp.open(file /* no mode == read */)) {
- // NOTE: on Windows files are always readable
- assertTrue("Data read should have failed on " + file, isWindows);
- } catch (IOException e) {
- if (isWindows) {
- throw e;
- }
+ try (SftpClient.CloseableHandle h = sftp.open(file, EnumSet.of(SftpClient.OpenMode.Write))) {
+ byte[] overwrite = "-".getBytes(StandardCharsets.UTF_8);
+ sftp.write(h, 3L, overwrite, 0, 1);
+ d[3] = overwrite[0];
+ }
+
+ try (SftpClient.CloseableHandle h = sftp.open(file /* no mode == read */)) {
+ // NOTE: on Windows files are always readable
+ assertTrue("Data read should have failed on " + file, isWindows);
+ } catch (IOException e) {
+ if (isWindows) {
+ throw e;
}
+ }
- javaFile.setReadable(true, false);
+ javaFile.setReadable(true, false);
- byte[] buf = new byte[3];
- try (SftpClient.CloseableHandle h = sftp.open(file /* no mode == read */)) {
- int l = sftp.read(h, 2L, buf, 0, buf.length);
- String expected = new String(d, 2, l, StandardCharsets.UTF_8);
- String actual = new String(buf, 0, l, StandardCharsets.UTF_8);
- assertEquals("Mismatched read data", expected, actual);
- }
+ byte[] buf = new byte[3];
+ try (SftpClient.CloseableHandle h = sftp.open(file /* no mode == read */)) {
+ int l = sftp.read(h, 2L, buf, 0, buf.length);
+ String expected = new String(d, 2, l, StandardCharsets.UTF_8);
+ String actual = new String(buf, 0, l, StandardCharsets.UTF_8);
+ assertEquals("Mismatched read data", expected, actual);
}
- } finally {
- client.stop();
}
}
}
@@ -535,8 +487,7 @@ public class SftpTest extends AbstractSftpClientTestSupport {
final AtomicInteger removedCount = new AtomicInteger(0);
final AtomicInteger modifyingCount = new AtomicInteger(0);
final AtomicInteger modifiedCount = new AtomicInteger(0);
-
- factory.addSftpEventListener(new AbstractSftpEventListenerAdapter() {
+ SftpEventListener listener = new AbstractSftpEventListenerAdapter() {
@Override
public void initialized(ServerSession session, int version) {
log.info("initialized(" + session + ") version: " + version);
@@ -686,33 +637,30 @@ public class SftpTest extends AbstractSftpClientTestSupport {
log.info("close(" + session + ")[" + remoteHandle + "] " + (Files.isDirectory(path) ? "directory" : "file") + " " + path);
closeCount.incrementAndGet();
}
- });
-
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
+ };
+ factory.addSftpEventListener(listener);
- try (SftpClient sftp = session.createSftpClient()) {
- assertEquals("Mismatched negotiated version", sftp.getVersion(), versionHolder.get());
- testClient(client, sftp);
- }
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
- assertEquals("Mismatched open/close count", openCount.get(), closeCount.get());
- assertTrue("No entries read", entriesCount.get() > 0);
- assertTrue("No data read", readSize.get() > 0L);
- assertTrue("No data written", writeSize.get() > 0L);
- assertEquals("Mismatched removal counts", removingCount.get(), removedCount.get());
- assertTrue("No removals signalled", removedCount.get() > 0);
- assertEquals("Mismatched creation counts", creatingCount.get(), createdCount.get());
- assertTrue("No creations signalled", creatingCount.get() > 0);
- assertEquals("Mismatched modification counts", modifyingCount.get(), modifiedCount.get());
- assertTrue("No modifications signalled", modifiedCount.get() > 0);
- } finally {
- client.stop();
+ try (SftpClient sftp = session.createSftpClient()) {
+ assertEquals("Mismatched negotiated version", sftp.getVersion(), versionHolder.get());
+ testClient(client, sftp);
}
+
+ assertEquals("Mismatched open/close count", openCount.get(), closeCount.get());
+ assertTrue("No entries read", entriesCount.get() > 0);
+ assertTrue("No data read", readSize.get() > 0L);
+ assertTrue("No data written", writeSize.get() > 0L);
+ assertEquals("Mismatched removal counts", removingCount.get(), removedCount.get());
+ assertTrue("No removals signalled", removedCount.get() > 0);
+ assertEquals("Mismatched creation counts", creatingCount.get(), createdCount.get());
+ assertTrue("No creations signalled", creatingCount.get() > 0);
+ assertEquals("Mismatched modification counts", modifyingCount.get(), modifiedCount.get());
+ assertTrue("No modifications signalled", modifiedCount.get() > 0);
+ } finally {
+ factory.removeSftpEventListener(listener);
}
}
@@ -725,45 +673,39 @@ public class SftpTest extends AbstractSftpClientTestSupport {
*/
@Test
public void testWriteChunking() throws Exception {
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
-
- Path targetPath = detectTargetFolder();
- Path lclSftp = Utils.resolve(targetPath, SftpConstants.SFTP_SUBSYSTEM_NAME, getClass().getSimpleName(), getCurrentTestName());
- Utils.deleteRecursive(lclSftp);
-
- Path parentPath = targetPath.getParent();
- Path clientFolder = assertHierarchyTargetFolderExists(lclSftp).resolve("client");
- String dir = Utils.resolveRelativeRemotePath(parentPath, clientFolder);
-
- try (SftpClient sftp = session.createSftpClient()) {
- sftp.mkdir(dir);
-
- uploadAndVerifyFile(sftp, clientFolder, dir, 0, "emptyFile.txt");
- uploadAndVerifyFile(sftp, clientFolder, dir, 1000, "smallFile.txt");
- uploadAndVerifyFile(sftp, clientFolder, dir, ByteArrayBuffer.MAX_LEN - 1, "bufferMaxLenMinusOneFile.txt");
- uploadAndVerifyFile(sftp, clientFolder, dir, ByteArrayBuffer.MAX_LEN, "bufferMaxLenFile.txt");
- // were chunking not implemented, these would fail. these sizes should invoke our internal chunking mechanism
- uploadAndVerifyFile(sftp, clientFolder, dir, ByteArrayBuffer.MAX_LEN + 1, "bufferMaxLenPlusOneFile.txt");
- uploadAndVerifyFile(sftp, clientFolder, dir, (int) (1.5 * ByteArrayBuffer.MAX_LEN), "1point5BufferMaxLenFile.txt");
- uploadAndVerifyFile(sftp, clientFolder, dir, (2 * ByteArrayBuffer.MAX_LEN) - 1, "2TimesBufferMaxLenMinusOneFile.txt");
- uploadAndVerifyFile(sftp, clientFolder, dir, 2 * ByteArrayBuffer.MAX_LEN, "2TimesBufferMaxLenFile.txt");
- uploadAndVerifyFile(sftp, clientFolder, dir, (2 * ByteArrayBuffer.MAX_LEN) + 1, "2TimesBufferMaxLenPlusOneFile.txt");
- uploadAndVerifyFile(sftp, clientFolder, dir, 200000, "largerFile.txt");
-
- // test erroneous calls that check for negative values
- Path invalidPath = clientFolder.resolve(getCurrentTestName() + "-invalid");
- testInvalidParams(sftp, invalidPath, Utils.resolveRelativeRemotePath(parentPath, invalidPath));
-
- // cleanup
- sftp.rmdir(dir);
- }
- } finally {
- client.stop();
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
+
+ Path targetPath = detectTargetFolder();
+ Path lclSftp = Utils.resolve(targetPath, SftpConstants.SFTP_SUBSYSTEM_NAME, getClass().getSimpleName(), getCurrentTestName());
+ Utils.deleteRecursive(lclSftp);
+
+ Path parentPath = targetPath.getParent();
+ Path clientFolder = assertHierarchyTargetFolderExists(lclSftp).resolve("client");
+ String dir = Utils.resolveRelativeRemotePath(parentPath, clientFolder);
+
+ try (SftpClient sftp = session.createSftpClient()) {
+ sftp.mkdir(dir);
+
+ uploadAndVerifyFile(sftp, clientFolder, dir, 0, "emptyFile.txt");
+ uploadAndVerifyFile(sftp, clientFolder, dir, 1000, "smallFile.txt");
+ uploadAndVerifyFile(sftp, clientFolder, dir, ByteArrayBuffer.MAX_LEN - 1, "bufferMaxLenMinusOneFile.txt");
+ uploadAndVerifyFile(sftp, clientFolder, dir, ByteArrayBuffer.MAX_LEN, "bufferMaxLenFile.txt");
+ // were chunking not implemented, these would fail. these sizes should invoke our internal chunking mechanism
+ uploadAndVerifyFile(sftp, clientFolder, dir, ByteArrayBuffer.MAX_LEN + 1, "bufferMaxLenPlusOneFile.txt");
+ uploadAndVerifyFile(sftp, clientFolder, dir, (int) (1.5 * ByteArrayBuffer.MAX_LEN), "1point5BufferMaxLenFile.txt");
+ uploadAndVerifyFile(sftp, clientFolder, dir, (2 * ByteArrayBuffer.MAX_LEN) - 1, "2TimesBufferMaxLenMinusOneFile.txt");
+ uploadAndVerifyFile(sftp, clientFolder, dir, 2 * ByteArrayBuffer.MAX_LEN, "2TimesBufferMaxLenFile.txt");
+ uploadAndVerifyFile(sftp, clientFolder, dir, (2 * ByteArrayBuffer.MAX_LEN) + 1, "2TimesBufferMaxLenPlusOneFile.txt");
+ uploadAndVerifyFile(sftp, clientFolder, dir, 200000, "largerFile.txt");
+
+ // test erroneous calls that check for negative values
+ Path invalidPath = clientFolder.resolve(getCurrentTestName() + "-invalid");
+ testInvalidParams(sftp, invalidPath, Utils.resolveRelativeRemotePath(parentPath, invalidPath));
+
+ // cleanup
+ sftp.rmdir(dir);
}
}
}
@@ -903,8 +845,8 @@ public class SftpTest extends AbstractSftpClientTestSupport {
Vector<?> res = c.ls(path);
File dir = baseDir.getParentFile();
Collection<String> expNames = OsUtils.isUNIX()
- ? new LinkedList<String>()
- : new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
+ ? new LinkedList<>()
+ : new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
String[] names = dir.list();
if (GenericUtils.length(names) > 0) {
for (String n : names) {
@@ -942,123 +884,110 @@ public class SftpTest extends AbstractSftpClientTestSupport {
Path parentPath = targetPath.getParent();
Path clientFolder = assertHierarchyTargetFolderExists(lclSftp.resolve("client"));
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
+
+ try (SftpClient sftp = session.createSftpClient()) {
+ Path file1 = clientFolder.resolve("file-1.txt");
+ String file1Path = Utils.resolveRelativeRemotePath(parentPath, file1);
+ try (OutputStream os = sftp.write(file1Path, SftpClient.MIN_WRITE_BUFFER_SIZE)) {
+ os.write((getCurrentTestName() + "\n").getBytes(StandardCharsets.UTF_8));
+ }
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
-
- try (SftpClient sftp = session.createSftpClient()) {
- Path file1 = clientFolder.resolve("file-1.txt");
- String file1Path = Utils.resolveRelativeRemotePath(parentPath, file1);
- try (OutputStream os = sftp.write(file1Path, SftpClient.MIN_WRITE_BUFFER_SIZE)) {
- os.write((getCurrentTestName() + "\n").getBytes(StandardCharsets.UTF_8));
- }
-
- Path file2 = clientFolder.resolve("file-2.txt");
- String file2Path = Utils.resolveRelativeRemotePath(parentPath, file2);
- Path file3 = clientFolder.resolve("file-3.txt");
- String file3Path = Utils.resolveRelativeRemotePath(parentPath, file3);
- try {
- sftp.rename(file2Path, file3Path);
- fail("Unxpected rename success of " + file2Path + " => " + file3Path);
- } catch (org.apache.sshd.common.subsystem.sftp.SftpException e) {
- assertEquals("Mismatched status for failed rename of " + file2Path + " => " + file3Path, SftpConstants.SSH_FX_NO_SUCH_FILE, e.getStatus());
- }
-
- try (OutputStream os = sftp.write(file2Path, SftpClient.MIN_WRITE_BUFFER_SIZE)) {
- os.write("h".getBytes(StandardCharsets.UTF_8));
- }
+ Path file2 = clientFolder.resolve("file-2.txt");
+ String file2Path = Utils.resolveRelativeRemotePath(parentPath, file2);
+ Path file3 = clientFolder.resolve("file-3.txt");
+ String file3Path = Utils.resolveRelativeRemotePath(parentPath, file3);
+ try {
+ sftp.rename(file2Path, file3Path);
+ fail("Unxpected rename success of " + file2Path + " => " + file3Path);
+ } catch (org.apache.sshd.common.subsystem.sftp.SftpException e) {
+ assertEquals("Mismatched status for failed rename of " + file2Path + " => " + file3Path, SftpConstants.SSH_FX_NO_SUCH_FILE, e.getStatus());
+ }
- try {
- sftp.rename(file1Path, file2Path);
- fail("Unxpected rename success of " + file1Path + " => " + file2Path);
- } catch (org.apache.sshd.common.subsystem.sftp.SftpException e) {
- assertEquals("Mismatched status for failed rename of " + file1Path + " => " + file2Path, SftpConstants.SSH_FX_FILE_ALREADY_EXISTS, e.getStatus());
- }
+ try (OutputStream os = sftp.write(file2Path, SftpClient.MIN_WRITE_BUFFER_SIZE)) {
+ os.write("h".getBytes(StandardCharsets.UTF_8));
+ }
- sftp.rename(file1Path, file2Path, SftpClient.CopyMode.Overwrite);
+ try {
+ sftp.rename(file1Path, file2Path);
+ fail("Unxpected rename success of " + file1Path + " => " + file2Path);
+ } catch (org.apache.sshd.common.subsystem.sftp.SftpException e) {
+ assertEquals("Mismatched status for failed rename of " + file1Path + " => " + file2Path, SftpConstants.SSH_FX_FILE_ALREADY_EXISTS, e.getStatus());
}
- } finally {
- client.stop();
+
+ sftp.rename(file1Path, file2Path, SftpClient.CopyMode.Overwrite);
}
}
}
@Test
public void testServerExtensionsDeclarations() throws Exception {
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
-
- try (SftpClient sftp = session.createSftpClient()) {
- Map<String, byte[]> extensions = sftp.getServerExtensions();
- for (String name : new String[]{
- SftpConstants.EXT_NEWLINE, SftpConstants.EXT_VERSIONS,
- SftpConstants.EXT_VENDOR_ID, SftpConstants.EXT_ACL_SUPPORTED,
- SftpConstants.EXT_SUPPORTED, SftpConstants.EXT_SUPPORTED2
- }) {
- assertTrue("Missing extension=" + name, extensions.containsKey(name));
- }
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
+
+ try (SftpClient sftp = session.createSftpClient()) {
+ Map<String, byte[]> extensions = sftp.getServerExtensions();
+ for (String name : new String[]{
+ SftpConstants.EXT_NEWLINE, SftpConstants.EXT_VERSIONS,
+ SftpConstants.EXT_VENDOR_ID, SftpConstants.EXT_ACL_SUPPORTED,
+ SftpConstants.EXT_SUPPORTED, SftpConstants.EXT_SUPPORTED2
+ }) {
+ assertTrue("Missing extension=" + name, extensions.containsKey(name));
+ }
- Map<String, ?> data = ParserUtils.parse(extensions);
- for (Map.Entry<String, ?> de : data.entrySet()) {
- String extName = de.getKey();
- Object extValue = de.getValue();
- outputDebugMessage("%s: %s", extName, extValue);
- if (SftpConstants.EXT_SUPPORTED.equalsIgnoreCase(extName)) {
- assertSupportedExtensions(extName, ((Supported) extValue).extensionNames);
- } else if (SftpConstants.EXT_SUPPORTED2.equalsIgnoreCase(extName)) {
- assertSupportedExtensions(extName, ((Supported2) extValue).extensionNames);
- } else if (SftpConstants.EXT_ACL_SUPPORTED.equalsIgnoreCase(extName)) {
- assertSupportedAclCapabilities((AclCapabilities) extValue);
- } else if (SftpConstants.EXT_VERSIONS.equalsIgnoreCase(extName)) {
- assertSupportedVersions((Versions) extValue);
- } else if (SftpConstants.EXT_NEWLINE.equalsIgnoreCase(extName)) {
- assertNewlineValue((Newline) extValue);
- }
+ Map<String, ?> data = ParserUtils.parse(extensions);
+ for (Map.Entry<String, ?> de : data.entrySet()) {
+ String extName = de.getKey();
+ Object extValue = de.getValue();
+ outputDebugMessage("%s: %s", extName, extValue);
+ if (SftpConstants.EXT_SUPPORTED.equalsIgnoreCase(extName)) {
+ assertSupportedExtensions(extName, ((Supported) extValue).extensionNames);
+ } else if (SftpConstants.EXT_SUPPORTED2.equalsIgnoreCase(extName)) {
+ assertSupportedExtensions(extName, ((Supported2) extValue).extensionNames);
+ } else if (SftpConstants.EXT_ACL_SUPPORTED.equalsIgnoreCase(extName)) {
+ assertSupportedAclCapabilities((AclCapabilities) extValue);
+ } else if (SftpConstants.EXT_VERSIONS.equalsIgnoreCase(extName)) {
+ assertSupportedVersions((Versions) extValue);
+ } else if (SftpConstants.EXT_NEWLINE.equalsIgnoreCase(extName)) {
+ assertNewlineValue((Newline) extValue);
}
+ }
- for (String extName : extensions.keySet()) {
- if (!data.containsKey(extName)) {
- outputDebugMessage("No parser for extension=%s", extName);
- }
+ for (String extName : extensions.keySet()) {
+ if (!data.containsKey(extName)) {
+ outputDebugMessage("No parser for extension=%s", extName);
}
+ }
- for (OpenSSHExtension expected : SftpSubsystem.DEFAULT_OPEN_SSH_EXTENSIONS) {
- String name = expected.getName();
- Object value = data.get(name);
- assertNotNull("OpenSSH extension not declared: " + name, value);
+ for (OpenSSHExtension expected : SftpSubsystem.DEFAULT_OPEN_SSH_EXTENSIONS) {
+ String name = expected.getName();
+ Object value = data.get(name);
+ assertNotNull("OpenSSH extension not declared: " + name, value);
- OpenSSHExtension actual = (OpenSSHExtension) value;
- assertEquals("Mismatched version for OpenSSH extension=" + name, expected.getVersion(), actual.getVersion());
- }
+ OpenSSHExtension actual = (OpenSSHExtension) value;
+ assertEquals("Mismatched version for OpenSSH extension=" + name, expected.getVersion(), actual.getVersion());
+ }
+
+ for (BuiltinSftpClientExtensions type : BuiltinSftpClientExtensions.VALUES) {
+ String extensionName = type.getName();
+ boolean isOpenSSHExtension = extensionName.endsWith("@openssh.com");
+ SftpClientExtension instance = sftp.getExtension(extensionName);
- for (BuiltinSftpClientExtensions type : BuiltinSftpClientExtensions.VALUES) {
- String extensionName = type.getName();
- boolean isOpenSSHExtension = extensionName.endsWith("@openssh.com");
- SftpClientExtension instance = sftp.getExtension(extensionName);
-
- assertNotNull("Extension not implemented:" + extensionName, instance);
- assertEquals("Mismatched instance name", extensionName, instance.getName());
-
- if (instance.isSupported()) {
- if (isOpenSSHExtension) {
- assertTrue("Unlisted default OpenSSH extension: " + extensionName, SftpSubsystem.DEFAULT_OPEN_SSH_EXTENSIONS_NAMES.contains(extensionName));
- }
- } else {
- assertTrue("Unsupported non-OpenSSH extension: " + extensionName, isOpenSSHExtension);
- assertFalse("Unsupported default OpenSSH extension: " + extensionName, SftpSubsystem.DEFAULT_OPEN_SSH_EXTENSIONS_NAMES.contains(extensionName));
+ assertNotNull("Extension not implemented:" + extensionName, instance);
+ assertEquals("Mismatched instance name", extensionName, instance.getName());
+
+ if (instance.isSupported()) {
+ if (isOpenSSHExtension) {
+ assertTrue("Unlisted default OpenSSH extension: " + extensionName, SftpSubsystem.DEFAULT_OPEN_SSH_EXTENSIONS_NAMES.contains(extensionName));
}
+ } else {
+ assertTrue("Unsupported non-OpenSSH extension: " + extensionName, isOpenSSHExtension);
+ assertFalse("Unsupported default OpenSSH extension: " + extensionName, SftpSubsystem.DEFAULT_OPEN_SSH_EXTENSIONS_NAMES.contains(extensionName));
}
}
- } finally {
- client.stop();
}
}
}
@@ -1129,43 +1058,37 @@ public class SftpTest extends AbstractSftpClientTestSupport {
}
};
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
- try (SftpClient sftp = session.createSftpClient(selector)) {
- assertEquals("Mismatched negotiated version", selected.get(), sftp.getVersion());
- testClient(client, sftp);
- }
- } finally {
- client.stop();
+ try (SftpClient sftp = session.createSftpClient(selector)) {
+ assertEquals("Mismatched negotiated version", selected.get(), sftp.getVersion());
+ testClient(client, sftp);
}
}
}
@Test // see SSHD-621
public void testServerDoesNotSupportSftp() throws Exception {
- sshd.setSubsystemFactories(null);
-
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
+ List<NamedFactory<Command>> factories = sshd.getSubsystemFactories();
+ assertEquals("Mismatched subsystem factories count", 1, GenericUtils.size(factories));
- PropertyResolverUtils.updateProperty(session, SftpClient.SFTP_CHANNEL_OPEN_TIMEOUT, TimeUnit.SECONDS.toMillis(4L));
- try (SftpClient sftp = session.createSftpClient()) {
- fail("Unexpected SFTP client creation success");
- } catch (SocketTimeoutException | EOFException | WindowClosedException e) {
- // expected - ignored
- }
+ sshd.setSubsystemFactories(null);
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
+
+ PropertyResolverUtils.updateProperty(session, SftpClient.SFTP_CHANNEL_OPEN_TIMEOUT, TimeUnit.SECONDS.toMillis(4L));
+ try (SftpClient sftp = session.createSftpClient()) {
+ fail("Unexpected SFTP client creation success");
+ } catch (SocketTimeoutException | EOFException | WindowClosedException e) {
+ // expected - ignored
} finally {
- client.stop();
+ PropertyResolverUtils.updateProperty(session, SftpClient.SFTP_CHANNEL_OPEN_TIMEOUT, SftpClient.DEFAULT_CHANNEL_OPEN_TIMEOUT);
}
+ } finally {
+ sshd.setSubsystemFactories(factories);
}
}
@@ -1177,10 +1100,9 @@ public class SftpTest extends AbstractSftpClientTestSupport {
Path parentPath = targetPath.getParent();
Path clientFolder = assertHierarchyTargetFolderExists(lclSftp).resolve("client");
String dir = Utils.resolveRelativeRemotePath(parentPath, clientFolder);
- String file = dir + "/" + "file.txt";
-
sftp.mkdir(dir);
+ String file = dir + "/" + getCurrentTestName() + "-file.txt";
try (SftpClient.CloseableHandle h = sftp.open(file, EnumSet.of(SftpClient.OpenMode.Write, SftpClient.OpenMode.Create))) {
byte[] d = "0123456789\n".getBytes(StandardCharsets.UTF_8);
sftp.write(h, 0, d, 0, d.length);
@@ -1191,20 +1113,18 @@ public class SftpTest extends AbstractSftpClientTestSupport {
}
try (SftpClient.CloseableHandle h = sftp.openDir(dir)) {
- List<SftpClient.DirEntry> dirEntries = sftp.readDir(h);
- assertNotNull("No dir entries", dirEntries);
-
+ List<SftpClient.DirEntry> dirEntries = new ArrayList<>();
boolean dotFiltered = false;
boolean dotdotFiltered = false;
- for (Iterator<SftpClient.DirEntry> it = dirEntries.iterator(); it.hasNext();) {
- SftpClient.DirEntry entry = it.next();
+ for (SftpClient.DirEntry entry : sftp.listDir(h)) {
String name = entry.getFilename();
+ outputDebugMessage("readDir(%s) initial file: %s", dir, name);
if (".".equals(name) && (!dotFiltered)) {
- it.remove();
dotFiltered = true;
} else if ("..".equals(name) && (!dotdotFiltered)) {
- it.remove();
dotdotFiltered = true;
+ } else {
+ dirEntries.add(entry);
}
}
@@ -1247,6 +1167,8 @@ public class SftpTest extends AbstractSftpClientTestSupport {
for (SftpClient.DirEntry entry : sftp.readDir(dir)) {
assertNotNull("Unexpected null entry", entry);
String name = entry.getFilename();
+ outputDebugMessage("readDir(%s) overwritten file: %s", dir, name);
+
if (".".equals(name) && (!dotFiltered)) {
dotFiltered = true;
} else if ("..".equals(name) && (!dotdotFiltered)) {
@@ -1258,9 +1180,7 @@ public class SftpTest extends AbstractSftpClientTestSupport {
assertTrue("Dot entry not read", dotFiltered);
assertTrue("Dot-dot entry not read", dotdotFiltered);
assertEquals("Mismatched read dir entries", 1, nb);
-
sftp.remove(file);
-
sftp.rmdir(dir);
}
@@ -1276,7 +1196,7 @@ public class SftpTest extends AbstractSftpClientTestSupport {
SftpSubsystemFactory factory = (SftpSubsystemFactory) f;
final AtomicReference<LinkData> linkDataHolder = new AtomicReference<>();
- factory.addSftpEventListener(new AbstractSftpEventListenerAdapter() {
+ SftpEventListener listener = new AbstractSftpEventListenerAdapter() {
@Override
public void linking(ServerSession session, Path src, Path target, boolean symLink) {
assertNull("Multiple linking calls", linkDataHolder.getAndSet(new LinkData(src, target, symLink)));
@@ -1291,7 +1211,7 @@ public class SftpTest extends AbstractSftpClientTestSupport {
assertEquals("Mismatched link type", data.isSymLink(), symLink);
assertNull("Unexpected failure", thrown);
}
- });
+ };
Path targetPath = detectTargetFolder();
Path lclSftp = Utils.resolve(targetPath, SftpConstants.SFTP_SUBSYSTEM_NAME, getClass().getSimpleName(), getCurrentTestName());
@@ -1313,35 +1233,41 @@ public class SftpTest extends AbstractSftpClientTestSupport {
Path sourcePath = assertHierarchyTargetFolderExists(lclSftp).resolve("src.txt");
String remSrcPath = "/" + Utils.resolveRelativeRemotePath(parentPath, sourcePath);
- String data = getCurrentTestName();
- ChannelSftp c = (ChannelSftp) session.openChannel(SftpConstants.SFTP_SUBSYSTEM_NAME);
- c.connect();
+ factory.addSftpEventListener(listener);
try {
- try (InputStream dataStream = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8))) {
- c.put(dataStream, remSrcPath);
- }
- assertTrue("Source file not created: " + sourcePath, Files.exists(sourcePath));
- assertEquals("Mismatched stored data in " + remSrcPath, data, readFile(remSrcPath));
-
- Path linkPath = lclSftp.resolve("link-" + sourcePath.getFileName());
- String remLinkPath = "/" + Utils.resolveRelativeRemotePath(parentPath, linkPath);
- LinkOption[] options = IoUtils.getLinkOptions(false);
- if (Files.exists(linkPath, options)) {
- Files.delete(linkPath);
- }
- assertFalse("Target link exists before linking: " + linkPath, Files.exists(linkPath, options));
+ String data = getCurrentTestName();
+ ChannelSftp c = (ChannelSftp) session.openChannel(SftpConstants.SFTP_SUBSYSTEM_NAME);
+ c.connect();
- outputDebugMessage("Symlink %s => %s", remLinkPath, remSrcPath);
- c.symlink(remSrcPath, remLinkPath);
+ try {
+ try (InputStream dataStream = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8))) {
+ c.put(dataStream, remSrcPath);
+ }
+ assertTrue("Source file not created: " + sourcePath, Files.exists(sourcePath));
+ assertEquals("Mismatched stored data in " + remSrcPath, data, readFile(remSrcPath));
+
+ Path linkPath = lclSftp.resolve("link-" + sourcePath.getFileName());
+ String remLinkPath = "/" + Utils.resolveRelativeRemotePath(parentPath, linkPath);
+ LinkOption[] options = IoUtils.getLinkOptions(false);
+ if (Files.exists(linkPath, options)) {
+ Files.delete(linkPath);
+ }
+ assertFalse("Target link exists before linking: " + linkPath, Files.exists(linkPath, options));
+
+ outputDebugMessage("Symlink %s => %s", remLinkPath, remSrcPath);
+ c.symlink(remSrcPath, remLinkPath);
- assertTrue("Symlink not created: " + linkPath, Files.exists(linkPath, options));
- assertEquals("Mismatched link data in " + remLinkPath, data, readFile(remLinkPath));
+ assertTrue("Symlink not created: " + linkPath, Files.exists(linkPath, options));
+ assertEquals("Mismatched link data in " + remLinkPath, data, readFile(remLinkPath));
- String str1 = c.readlink(remLinkPath);
- String str2 = c.realpath(remSrcPath);
- assertEquals("Mismatched link vs. real path", str1, str2);
+ String str1 = c.readlink(remLinkPath);
+ String str2 = c.realpath(remSrcPath);
+ assertEquals("Mismatched link vs. real path", str1, str2);
+ } finally {
+ c.disconnect();
+ }
} finally {
- c.disconnect();
+ factory.removeSftpEventListener(listener);
}
assertNotNull("No symlink signalled", linkDataHolder.getAndSet(null));
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/ae8d1c99/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpVersionsTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpVersionsTest.java b/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpVersionsTest.java
index ab9d74c..0da39a9 100644
--- a/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpVersionsTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpVersionsTest.java
@@ -40,7 +40,6 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
-import org.apache.sshd.client.SshClient;
import org.apache.sshd.client.session.ClientSession;
import org.apache.sshd.client.subsystem.sftp.SftpClient.Attributes;
import org.apache.sshd.client.subsystem.sftp.SftpClient.CloseableHandle;
@@ -57,7 +56,6 @@ import org.apache.sshd.server.subsystem.sftp.SftpEventListener;
import org.apache.sshd.server.subsystem.sftp.SftpSubsystem;
import org.apache.sshd.server.subsystem.sftp.SftpSubsystemFactory;
import org.apache.sshd.util.test.Utils;
-import org.junit.After;
import org.junit.Before;
import org.junit.FixMethodOrder;
import org.junit.Test;
@@ -99,29 +97,18 @@ public class SftpVersionsTest extends AbstractSftpClientTestSupport {
setupServer();
}
- @After
- public void tearDown() throws Exception {
- tearDownServer();
- }
-
public final int getTestedVersion() {
return testVersion;
}
@Test
public void testSftpVersionSelector() throws Exception {
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
- try (SftpClient sftp = session.createSftpClient(getTestedVersion())) {
- assertEquals("Mismatched negotiated version", getTestedVersion(), sftp.getVersion());
- }
- } finally {
- client.stop();
+ try (SftpClient sftp = session.createSftpClient(getTestedVersion())) {
+ assertEquals("Mismatched negotiated version", getTestedVersion(), sftp.getVersion());
}
}
}
@@ -134,35 +121,28 @@ public class SftpVersionsTest extends AbstractSftpClientTestSupport {
Files.write(lclFile, getClass().getName().getBytes(StandardCharsets.UTF_8));
Path parentPath = targetPath.getParent();
String remotePath = Utils.resolveRelativeRemotePath(parentPath, lclFile);
-
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
-
- try (SftpClient sftp = session.createSftpClient(getTestedVersion())) {
- Attributes attrs = sftp.lstat(remotePath);
- long expectedSeconds = TimeUnit.SECONDS.convert(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1L), TimeUnit.MILLISECONDS);
- attrs.getFlags().clear();
- attrs.modifyTime(expectedSeconds);
- sftp.setStat(remotePath, attrs);
-
- attrs = sftp.lstat(remotePath);
- long actualSeconds = attrs.getModifyTime().to(TimeUnit.SECONDS);
- // The NTFS file system delays updates to the last access time for a file by up to 1 hour after the last access
- if (expectedSeconds != actualSeconds) {
- System.err.append("Mismatched last modified time for ").append(lclFile.toString())
- .append(" - expected=").append(String.valueOf(expectedSeconds))
- .append('[').append(new Date(TimeUnit.SECONDS.toMillis(expectedSeconds)).toString()).append(']')
- .append(", actual=").append(String.valueOf(actualSeconds))
- .append('[').append(new Date(TimeUnit.SECONDS.toMillis(actualSeconds)).toString()).append(']')
- .println();
- }
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
+
+ try (SftpClient sftp = session.createSftpClient(getTestedVersion())) {
+ Attributes attrs = sftp.lstat(remotePath);
+ long expectedSeconds = TimeUnit.SECONDS.convert(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1L), TimeUnit.MILLISECONDS);
+ attrs.getFlags().clear();
+ attrs.modifyTime(expectedSeconds);
+ sftp.setStat(remotePath, attrs);
+
+ attrs = sftp.lstat(remotePath);
+ long actualSeconds = attrs.getModifyTime().to(TimeUnit.SECONDS);
+ // The NTFS file system delays updates to the last access time for a file by up to 1 hour after the last access
+ if (expectedSeconds != actualSeconds) {
+ System.err.append("Mismatched last modified time for ").append(lclFile.toString())
+ .append(" - expected=").append(String.valueOf(expectedSeconds))
+ .append('[').append(new Date(TimeUnit.SECONDS.toMillis(expectedSeconds)).toString()).append(']')
+ .append(", actual=").append(String.valueOf(actualSeconds))
+ .append('[').append(new Date(TimeUnit.SECONDS.toMillis(actualSeconds)).toString()).append(']')
+ .println();
}
- } finally {
- client.stop();
}
}
}
@@ -179,32 +159,26 @@ public class SftpVersionsTest extends AbstractSftpClientTestSupport {
Path parentPath = targetPath.getParent();
String remotePath = Utils.resolveRelativeRemotePath(parentPath, lclSftp);
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
-
- try (SftpClient sftp = session.createSftpClient(getTestedVersion())) {
- for (DirEntry entry : sftp.readDir(remotePath)) {
- String fileName = entry.getFilename();
- if (".".equals(fileName) || "..".equals(fileName)) {
- continue;
- }
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
+
+ try (SftpClient sftp = session.createSftpClient(getTestedVersion())) {
+ for (DirEntry entry : sftp.readDir(remotePath)) {
+ String fileName = entry.getFilename();
+ if (".".equals(fileName) || "..".equals(fileName)) {
+ continue;
+ }
- Attributes attrs = validateSftpFileTypeAndPermissions(fileName, getTestedVersion(), entry.getAttributes());
- if (subFolderName.equals(fileName)) {
- assertEquals("Mismatched sub-folder type", SftpConstants.SSH_FILEXFER_TYPE_DIRECTORY, attrs.getType());
- assertTrue("Sub-folder not marked as directory", attrs.isDirectory());
- } else if (lclFileName.equals(fileName)) {
- assertEquals("Mismatched sub-file type", SftpConstants.SSH_FILEXFER_TYPE_REGULAR, attrs.getType());
- assertTrue("Sub-folder not marked as directory", attrs.isRegularFile());
- }
+ Attributes attrs = validateSftpFileTypeAndPermissions(fileName, getTestedVersion(), entry.getAttributes());
+ if (subFolderName.equals(fileName)) {
+ assertEquals("Mismatched sub-folder type", SftpConstants.SSH_FILEXFER_TYPE_DIRECTORY, attrs.getType());
+ assertTrue("Sub-folder not marked as directory", attrs.isDirectory());
+ } else if (lclFileName.equals(fileName)) {
+ assertEquals("Mismatched sub-file type", SftpConstants.SSH_FILEXFER_TYPE_REGULAR, attrs.getType());
+ assertTrue("Sub-folder not marked as directory", attrs.isRegularFile());
}
}
- } finally {
- client.stop();
}
}
}
@@ -231,7 +205,7 @@ public class SftpVersionsTest extends AbstractSftpClientTestSupport {
protected Map<String, Object> resolveFileAttributes(Path file, int flags, LinkOption... options) throws IOException {
Map<String, Object> attrs = super.resolveFileAttributes(file, flags, options);
if (GenericUtils.isEmpty(attrs)) {
- attrs = new TreeMap<String, Object>(String.CASE_INSENSITIVE_ORDER);
+ attrs = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
}
@SuppressWarnings("unchecked")
@@ -285,8 +259,6 @@ public class SftpVersionsTest extends AbstractSftpClientTestSupport {
}
});
- sshd.setSubsystemFactories(Collections.<NamedFactory<Command>>singletonList(factory));
-
Path targetPath = detectTargetFolder();
Path lclSftp = Utils.resolve(targetPath, SftpConstants.SFTP_SUBSYSTEM_NAME, getClass().getSimpleName());
Files.createDirectories(lclSftp.resolve("sub-folder"));
@@ -296,39 +268,38 @@ public class SftpVersionsTest extends AbstractSftpClientTestSupport {
Path parentPath = targetPath.getParent();
String remotePath = Utils.resolveRelativeRemotePath(parentPath, lclSftp);
int numInvoked = 0;
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
-
- try (SftpClient sftp = session.createSftpClient(getTestedVersion())) {
- for (DirEntry entry : sftp.readDir(remotePath)) {
- String fileName = entry.getFilename();
- if (".".equals(fileName) || "..".equals(fileName)) {
- continue;
- }
- Attributes attrs = validateSftpFileTypeAndPermissions(fileName, getTestedVersion(), entry.getAttributes());
- List<AclEntry> aclActual = attrs.getAcl();
- if (getTestedVersion() == SftpConstants.SFTP_V3) {
- assertNull("Unexpected ACL for entry=" + fileName, aclActual);
- } else {
- assertListEquals("Mismatched ACL for entry=" + fileName, aclExpected, aclActual);
- }
+ List<NamedFactory<Command>> factories = sshd.getSubsystemFactories();
+ sshd.setSubsystemFactories(Collections.<NamedFactory<Command>>singletonList(factory));
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
+
+ try (SftpClient sftp = session.createSftpClient(getTestedVersion())) {
+ for (DirEntry entry : sftp.readDir(remotePath)) {
+ String fileName = entry.getFilename();
+ if (".".equals(fileName) || "..".equals(fileName)) {
+ continue;
+ }
- attrs.getFlags().clear();
- attrs.setAcl(aclExpected);
- sftp.setStat(remotePath + "/" + fileName, attrs);
- if (getTestedVersion() > SftpConstants.SFTP_V3) {
- numInvoked++;
- }
+ Attributes attrs = validateSftpFileTypeAndPermissions(fileName, getTestedVersion(), entry.getAttributes());
+ List<AclEntry> aclActual = attrs.getAcl();
+ if (getTestedVersion() == SftpConstants.SFTP_V3) {
+ assertNull("Unexpected ACL for entry=" + fileName, aclActual);
+ } else {
+ assertListEquals("Mismatched ACL for entry=" + fileName, aclExpected, aclActual);
+ }
+
+ attrs.getFlags().clear();
+ attrs.setAcl(aclExpected);
+ sftp.setStat(remotePath + "/" + fileName, attrs);
+ if (getTestedVersion() > SftpConstants.SFTP_V3) {
+ numInvoked++;
}
}
- } finally {
- client.stop();
}
+ } finally {
+ sshd.setSubsystemFactories(factories);
}
assertEquals("Mismatched invocations count", numInvoked, numInvocations.get());
@@ -356,7 +327,7 @@ public class SftpVersionsTest extends AbstractSftpClientTestSupport {
protected Map<String, Object> resolveFileAttributes(Path file, int flags, LinkOption... options) throws IOException {
Map<String, Object> attrs = super.resolveFileAttributes(file, flags, options);
if (GenericUtils.isEmpty(attrs)) {
- attrs = new TreeMap<String, Object>(String.CASE_INSENSITIVE_ORDER);
+ attrs = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
}
@SuppressWarnings("unchecked")
@@ -408,7 +379,6 @@ public class SftpVersionsTest extends AbstractSftpClientTestSupport {
}
});
- sshd.setSubsystemFactories(Collections.<NamedFactory<Command>>singletonList(factory));
Path targetPath = detectTargetFolder();
Path lclSftp = Utils.resolve(targetPath, SftpConstants.SFTP_SUBSYSTEM_NAME, getClass().getSimpleName());
Files.createDirectories(lclSftp.resolve("sub-folder"));
@@ -418,32 +388,31 @@ public class SftpVersionsTest extends AbstractSftpClientTestSupport {
Path parentPath = targetPath.getParent();
String remotePath = Utils.resolveRelativeRemotePath(parentPath, lclSftp);
int numInvoked = 0;
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
-
- try (SftpClient sftp = session.createSftpClient(getTestedVersion())) {
- for (DirEntry entry : sftp.readDir(remotePath)) {
- String fileName = entry.getFilename();
- if (".".equals(fileName) || "..".equals(fileName)) {
- continue;
- }
- Attributes attrs = validateSftpFileTypeAndPermissions(fileName, getTestedVersion(), entry.getAttributes());
- Map<String, byte[]> actExtensions = attrs.getExtensions();
- assertExtensionsMapEquals("dirEntry=" + fileName, expExtensions, actExtensions);
- attrs.getFlags().clear();
- attrs.setStringExtensions(expExtensions);
- sftp.setStat(remotePath + "/" + fileName, attrs);
- numInvoked++;
+ List<NamedFactory<Command>> factories = sshd.getSubsystemFactories();
+ sshd.setSubsystemFactories(Collections.<NamedFactory<Command>>singletonList(factory));
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
+
+ try (SftpClient sftp = session.createSftpClient(getTestedVersion())) {
+ for (DirEntry entry : sftp.readDir(remotePath)) {
+ String fileName = entry.getFilename();
+ if (".".equals(fileName) || "..".equals(fileName)) {
+ continue;
}
+
+ Attributes attrs = validateSftpFileTypeAndPermissions(fileName, getTestedVersion(), entry.getAttributes());
+ Map<String, byte[]> actExtensions = attrs.getExtensions();
+ assertExtensionsMapEquals("dirEntry=" + fileName, expExtensions, actExtensions);
+ attrs.getFlags().clear();
+ attrs.setStringExtensions(expExtensions);
+ sftp.setStat(remotePath + "/" + fileName, attrs);
+ numInvoked++;
}
- } finally {
- client.stop();
}
+ } finally {
+ sshd.setSubsystemFactories(factories);
}
assertEquals("Mismatched invocations count", numInvoked, numInvocations.get());
@@ -451,48 +420,42 @@ public class SftpVersionsTest extends AbstractSftpClientTestSupport {
@Test // see SSHD-623
public void testEndOfListIndicator() throws Exception {
- try (SshClient client = setupTestClient()) {
- client.start();
-
- try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
- session.addPasswordIdentity(getCurrentTestName());
- session.auth().verify(5L, TimeUnit.SECONDS);
-
- try (SftpClient sftp = session.createSftpClient(getTestedVersion())) {
- AtomicReference<Boolean> eolIndicator = new AtomicReference<>();
- int version = sftp.getVersion();
- Path targetPath = detectTargetFolder();
- Path parentPath = targetPath.getParent();
- String remotePath = Utils.resolveRelativeRemotePath(parentPath, targetPath);
-
- try (CloseableHandle handle = sftp.openDir(remotePath)) {
- List<DirEntry> entries = sftp.readDir(handle, eolIndicator);
- for (int index = 1; entries != null; entries = sftp.readDir(handle, eolIndicator), index++) {
- Boolean value = eolIndicator.get();
- if (version < SftpConstants.SFTP_V6) {
- assertNull("Unexpected indicator value at iteration #" + index, value);
- } else {
- assertNotNull("No indicator returned at iteration #" + index, value);
- if (value.booleanValue()) {
- break;
- }
- }
- eolIndicator.set(null); // make sure starting fresh
- }
-
+ try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+ session.addPasswordIdentity(getCurrentTestName());
+ session.auth().verify(5L, TimeUnit.SECONDS);
+
+ try (SftpClient sftp = session.createSftpClient(getTestedVersion())) {
+ AtomicReference<Boolean> eolIndicator = new AtomicReference<>();
+ int version = sftp.getVersion();
+ Path targetPath = detectTargetFolder();
+ Path parentPath = targetPath.getParent();
+ String remotePath = Utils.resolveRelativeRemotePath(parentPath, targetPath);
+
+ try (CloseableHandle handle = sftp.openDir(remotePath)) {
+ List<DirEntry> entries = sftp.readDir(handle, eolIndicator);
+ for (int index = 1; entries != null; entries = sftp.readDir(handle, eolIndicator), index++) {
Boolean value = eolIndicator.get();
if (version < SftpConstants.SFTP_V6) {
- assertNull("Unexpected end-of-list indication received at end of entries", value);
- assertNull("Unexpected no last entries indication", entries);
+ assertNull("Unexpected indicator value at iteration #" + index, value);
} else {
- assertNotNull("No end-of-list indication received at end of entries", value);
- assertNotNull("No last received entries", entries);
- assertTrue("Bad end-of-list value", value.booleanValue());
+ assertNotNull("No indicator returned at iteration #" + index, value);
+ if (value.booleanValue()) {
+ break;
+ }
}
+ eolIndicator.set(null); // make sure starting fresh
+ }
+
+ Boolean value = eolIndicator.get();
+ if (version < SftpConstants.SFTP_V6) {
+ assertNull("Unexpected end-of-list indication received at end of entries", value);
+ assertNull("Unexpected no last entries indication", entries);
+ } else {
+ assertNotNull("No end-of-list indication received at end of entries", value);
+ assertNotNull("No last received entries", entries);
+ assertTrue("Bad end-of-list value", value.booleanValue());
}
}
- } finally {
- client.stop();
}
}
}