mirror of https://github.com/apache/jclouds.git
Issue 79: created put method
git-svn-id: http://jclouds.googlecode.com/svn/trunk@2390 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
parent
572fe270c4
commit
60312b64f3
|
@ -40,6 +40,8 @@ public interface SshClient {
|
||||||
SshClient create(InetSocketAddress socket, String username, byte[] privateKey);
|
SshClient create(InetSocketAddress socket, String username, byte[] privateKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void put(String path, InputStream contents);
|
||||||
|
|
||||||
InputStream get(String path);
|
InputStream get(String path);
|
||||||
|
|
||||||
ExecResponse exec(String command);
|
ExecResponse exec(String command);
|
||||||
|
|
|
@ -37,6 +37,7 @@ import javax.annotation.PreDestroy;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.io.input.ProxyInputStream;
|
import org.apache.commons.io.input.ProxyInputStream;
|
||||||
import org.apache.commons.io.output.ByteArrayOutputStream;
|
import org.apache.commons.io.output.ByteArrayOutputStream;
|
||||||
import org.jclouds.logging.Logger;
|
import org.jclouds.logging.Logger;
|
||||||
|
@ -127,6 +128,30 @@ public class JschSshClient implements SshClient {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void put(String path, InputStream contents) {
|
||||||
|
checkNotNull(path, "path");
|
||||||
|
checkNotNull(contents, "contents");
|
||||||
|
|
||||||
|
checkConnected();
|
||||||
|
logger.debug("%s@%s:%d: Opening sftp Channel.", username, host.getHostAddress(), port);
|
||||||
|
ChannelSftp sftp = null;
|
||||||
|
try {
|
||||||
|
sftp = (ChannelSftp) session.openChannel("sftp");
|
||||||
|
sftp.connect();
|
||||||
|
} catch (JSchException e) {
|
||||||
|
throw new SshException(String.format("%s@%s:%d: Error connecting to sftp.", username, host
|
||||||
|
.getHostAddress(), port), e);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
sftp.put(contents, path);
|
||||||
|
} catch (SftpException e) {
|
||||||
|
throw new SshException(String.format("%s@%s:%d: Error putting path: %s", username, host
|
||||||
|
.getHostAddress(), port, path), e);
|
||||||
|
} finally {
|
||||||
|
IOUtils.closeQuietly(contents);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void checkConnected() {
|
private void checkConnected() {
|
||||||
checkState(session != null && session.isConnected(), String.format(
|
checkState(session != null && session.isConnected(), String.format(
|
||||||
"%s@%s:%d: SFTP not connected!", username, host.getHostAddress(), port));
|
"%s@%s:%d: SFTP not connected!", username, host.getHostAddress(), port));
|
||||||
|
|
|
@ -25,6 +25,7 @@ package org.jclouds.ssh.jsch;
|
||||||
|
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -56,6 +57,7 @@ public class JschSshClientLiveTest {
|
||||||
protected static final String sshUser = System.getProperty("jclouds.test.ssh.username");
|
protected static final String sshUser = System.getProperty("jclouds.test.ssh.username");
|
||||||
protected static final String sshPass = System.getProperty("jclouds.test.ssh.password");
|
protected static final String sshPass = System.getProperty("jclouds.test.ssh.password");
|
||||||
protected static final String sshKeyFile = System.getProperty("jclouds.test.ssh.keyfile");
|
protected static final String sshKeyFile = System.getProperty("jclouds.test.ssh.keyfile");
|
||||||
|
private File temp;
|
||||||
|
|
||||||
@BeforeGroups(groups = { "live" })
|
@BeforeGroups(groups = { "live" })
|
||||||
public SshClient setupClient() throws NumberFormatException, FileNotFoundException, IOException {
|
public SshClient setupClient() throws NumberFormatException, FileNotFoundException, IOException {
|
||||||
|
@ -77,6 +79,8 @@ public class JschSshClientLiveTest {
|
||||||
public InputStream get(String path) {
|
public InputStream get(String path) {
|
||||||
if (path.equals("/etc/passwd")) {
|
if (path.equals("/etc/passwd")) {
|
||||||
return IOUtils.toInputStream("root");
|
return IOUtils.toInputStream("root");
|
||||||
|
} else if (path.equals(temp.getAbsolutePath())) {
|
||||||
|
return IOUtils.toInputStream("rabbit");
|
||||||
}
|
}
|
||||||
throw new RuntimeException("path " + path + " not stubbed");
|
throw new RuntimeException("path " + path + " not stubbed");
|
||||||
}
|
}
|
||||||
|
@ -92,6 +96,11 @@ public class JschSshClientLiveTest {
|
||||||
throw new RuntimeException("command " + command + " not stubbed");
|
throw new RuntimeException("command " + command + " not stubbed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void put(String path, InputStream contents) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
Injector i = Guice.createInjector(new JschSshClientModule());
|
Injector i = Guice.createInjector(new JschSshClientModule());
|
||||||
|
@ -108,6 +117,16 @@ public class JschSshClientLiveTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testPutAndGet() throws IOException {
|
||||||
|
temp = File.createTempFile("foo", "bar");
|
||||||
|
temp.deleteOnExit();
|
||||||
|
SshClient client = setupClient();
|
||||||
|
client.put(temp.getAbsolutePath(), IOUtils.toInputStream("rabbit"));
|
||||||
|
InputStream input = setupClient().get(temp.getAbsolutePath());
|
||||||
|
String contents = Utils.toStringAndClose(input);
|
||||||
|
assertEquals(contents, "rabbit");
|
||||||
|
}
|
||||||
|
|
||||||
public void testGetEtcPassword() throws IOException {
|
public void testGetEtcPassword() throws IOException {
|
||||||
InputStream input = setupClient().get("/etc/passwd");
|
InputStream input = setupClient().get("/etc/passwd");
|
||||||
String contents = Utils.toStringAndClose(input);
|
String contents = Utils.toStringAndClose(input);
|
||||||
|
|
Loading…
Reference in New Issue