From 184236c3d53fdb4a20b8e5c12c166b672724d21c Mon Sep 17 00:00:00 2001 From: hierynomus Date: Mon, 26 Sep 2011 11:49:07 +0200 Subject: [PATCH] Added upload filter capability to SCPUploadClient --- pom.xml | 6 +++ .../sshj/xfer/scp/SCPUploadClient.java | 12 +++-- .../sshj/xfer/scp/SCPUploadClientTest.java | 54 +++++++++++++++++++ 3 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 src/test/java/net/schmizz/sshj/xfer/scp/SCPUploadClientTest.java diff --git a/pom.xml b/pom.xml index 0dbe2d90..ec18ed0d 100644 --- a/pom.xml +++ b/pom.xml @@ -76,6 +76,12 @@ 0.9.29 test + + org.mockito + mockito-all + 1.9.0-rc1 + test + diff --git a/src/main/java/net/schmizz/sshj/xfer/scp/SCPUploadClient.java b/src/main/java/net/schmizz/sshj/xfer/scp/SCPUploadClient.java index 90afe961..9a5321da 100644 --- a/src/main/java/net/schmizz/sshj/xfer/scp/SCPUploadClient.java +++ b/src/main/java/net/schmizz/sshj/xfer/scp/SCPUploadClient.java @@ -16,6 +16,7 @@ package net.schmizz.sshj.xfer.scp; import net.schmizz.sshj.common.IOUtils; +import net.schmizz.sshj.xfer.LocalFileFilter; import net.schmizz.sshj.xfer.LocalSourceFile; import net.schmizz.sshj.xfer.scp.SCPEngine.Arg; @@ -28,8 +29,9 @@ import java.util.List; public final class SCPUploadClient { private final SCPEngine engine; + private LocalFileFilter uploadFilter; - SCPUploadClient(SCPEngine engine) { + SCPUploadClient(SCPEngine engine) { this.engine = engine; } @@ -45,7 +47,11 @@ public final class SCPUploadClient { return engine.getExitStatus(); } - private synchronized void startCopy(LocalSourceFile sourceFile, String targetPath) + public void setUploadFilter(LocalFileFilter uploadFilter) { + this.uploadFilter = uploadFilter; + } + + private synchronized void startCopy(LocalSourceFile sourceFile, String targetPath) throws IOException { List args = new LinkedList(); args.add(Arg.SINK); @@ -75,7 +81,7 @@ public final class SCPUploadClient { throws IOException { preserveTimeIfPossible(f); engine.sendMessage("D0" + getPermString(f) + " 0 " + f.getName()); - for (LocalSourceFile child : f.getChildren(null)) + for (LocalSourceFile child : f.getChildren(uploadFilter)) process(child); engine.sendMessage("E"); } diff --git a/src/test/java/net/schmizz/sshj/xfer/scp/SCPUploadClientTest.java b/src/test/java/net/schmizz/sshj/xfer/scp/SCPUploadClientTest.java new file mode 100644 index 00000000..eb1b11b6 --- /dev/null +++ b/src/test/java/net/schmizz/sshj/xfer/scp/SCPUploadClientTest.java @@ -0,0 +1,54 @@ +package net.schmizz.sshj.xfer.scp; + +import net.schmizz.sshj.xfer.FileSystemFile; +import net.schmizz.sshj.xfer.LocalFileFilter; +import net.schmizz.sshj.xfer.LocalSourceFile; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.mockito.verification.VerificationMode; + +import java.io.File; +import java.io.IOException; + +import static org.mockito.Matchers.endsWith; +import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.isA; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +public class SCPUploadClientTest { + + private SCPEngine engine; + private SCPUploadClient scpUploadClient; + + @Rule + public TemporaryFolder temp = new TemporaryFolder(); + + @Before + public void init() { + engine = mock(SCPEngine.class); + scpUploadClient = new SCPUploadClient(engine); + } + + @Test + public void shouldOnlySendFilterAcceptedFilesFromDirectory() throws IOException { + scpUploadClient.setUploadFilter(new LocalFileFilter() { + @Override + public boolean accept(LocalSourceFile file) { + return !file.getName().contains("not-"); + } + }); + + File dir = temp.newFolder("filtered-scp-upload"); + new File(dir, "not-sent.txt").createNewFile(); + new File(dir, "sent.txt").createNewFile(); + + int copy = scpUploadClient.copy(new FileSystemFile(dir), "/tmp"); + verify(engine).startedDir("filtered-scp-upload"); + verify(engine).startedFile(eq("sent.txt"), isA(Long.class)); + verify(engine, times(1)).startedFile(isA(String.class), isA(Long.class)); + } +}