diff --git a/pom.xml b/pom.xml index 67d5baf..dbc15d9 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ fake-sftp-server-rule - 2.1.0-SNAPSHOT + 2.2.0 jar Fake SFTP Server Rule @@ -44,7 +44,12 @@ org.apache.sshd sshd-core - [1,2) + [2.6,) + + + org.apache.sshd + sshd-sftp + [2.6,) junit @@ -60,7 +65,7 @@ com.jcraft jsch - [0.1.54] + [0.1.55] test diff --git a/src/main/java/com/github/stefanbirkner/fakesftpserver/rule/FakeSftpServerRule.java b/src/main/java/com/github/stefanbirkner/fakesftpserver/rule/FakeSftpServerRule.java index f8d0a41..7dee709 100644 --- a/src/main/java/com/github/stefanbirkner/fakesftpserver/rule/FakeSftpServerRule.java +++ b/src/main/java/com/github/stefanbirkner/fakesftpserver/rule/FakeSftpServerRule.java @@ -1,9 +1,11 @@ package com.github.stefanbirkner.fakesftpserver.rule; +import org.apache.sshd.common.file.FileSystemFactory; +import org.apache.sshd.common.session.SessionContext; import org.apache.sshd.server.SshServer; import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider; import org.apache.sshd.server.session.ServerSession; -import org.apache.sshd.server.subsystem.sftp.SftpSubsystemFactory; +import org.apache.sshd.sftp.server.SftpSubsystemFactory; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; @@ -434,7 +436,7 @@ private SshServer startServer( * In order to use the file system for multiple channels/sessions we * have to use a file system wrapper whose close() does nothing. */ - server.setFileSystemFactory(session -> new DoNotClose(fileSystem)); + server.setFileSystemFactory(new DoNotCloseFileSystemFactory(fileSystem)); server.start(); this.server = server; return server; @@ -470,6 +472,24 @@ private void verifyThatTestIsRunning( ); } + private static class DoNotCloseFileSystemFactory implements FileSystemFactory{ + + final FileSystem fileSystem; + DoNotCloseFileSystemFactory(FileSystem fileSystem){ + this.fileSystem = fileSystem; + } + + @Override + public Path getUserHomeDir(SessionContext sessionContext) throws IOException { + return null; + } + + @Override + public FileSystem createFileSystem(SessionContext sessionContext) throws IOException { + return new DoNotClose(fileSystem); + } + } + private static class DoNotClose extends FileSystem { final FileSystem fileSystem;