From c627fabebd0b89d897653f5ddfc85c2d691e56dc Mon Sep 17 00:00:00 2001 From: Urs Reupke Date: Fri, 23 Mar 2012 10:58:42 +0100 Subject: [PATCH] MkDirs no longer tries to create folders twice when path has trailing slash. --- .../net/schmizz/sshj/sftp/SFTPClient.java | 1 + .../net/schmizz/sshj/sftp/SFTPClientTest.java | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/test/java/net/schmizz/sshj/sftp/SFTPClientTest.java diff --git a/src/main/java/net/schmizz/sshj/sftp/SFTPClient.java b/src/main/java/net/schmizz/sshj/sftp/SFTPClient.java index be177cc7..dc2df91a 100644 --- a/src/main/java/net/schmizz/sshj/sftp/SFTPClient.java +++ b/src/main/java/net/schmizz/sshj/sftp/SFTPClient.java @@ -90,6 +90,7 @@ public class SFTPClient public void mkdirs(String path) throws IOException { final Deque dirsToMake = new LinkedList(); + path = PathComponents.trimTrailingSeparator(path, engine.getPathHelper().getPathSeparator()); for (PathComponents current = engine.getPathHelper().getComponents(path); ; current = engine.getPathHelper().getComponents(current.getParent())) { final FileAttributes attrs = statExistence(current.getPath()); diff --git a/src/test/java/net/schmizz/sshj/sftp/SFTPClientTest.java b/src/test/java/net/schmizz/sshj/sftp/SFTPClientTest.java new file mode 100644 index 00000000..b1054bb9 --- /dev/null +++ b/src/test/java/net/schmizz/sshj/sftp/SFTPClientTest.java @@ -0,0 +1,36 @@ +package net.schmizz.sshj.sftp; + +import org.junit.Before; +import org.junit.Test; + +import java.io.IOException; + +import static net.schmizz.sshj.sftp.PathHelper.DEFAULT_PATH_SEPARATOR; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class SFTPClientTest { + private final SFTPEngine sftpEngine = mock(SFTPEngine.class); + private final SFTPClient client = new SFTPClient(sftpEngine); + + @Before + public void setPathHelper() throws Exception { + PathHelper helper = new PathHelper(sftpEngine, DEFAULT_PATH_SEPARATOR); + when(sftpEngine.getPathHelper()).thenReturn(helper); + } + + @Before + public void setRemoteWorkingDirectory() throws IOException { + when(sftpEngine.canonicalize(".")).thenReturn("/workingdirectory"); + FileAttributes isADirectory = new FileAttributes.Builder().withType(FileMode.Type.DIRECTORY).build(); + when(sftpEngine.stat("/workingdirectory")).thenReturn(isADirectory); + } + + @Test + public void doesNotTryToCreateDirectoryTwiceWhenPathHasTrailingSeparator() throws Exception { + client.mkdirs("/folder/directory/"); + verify(sftpEngine, times(1)).makeDir("/folder/directory"); + } +} \ No newline at end of file