From a765dd8bc5a4c20ddc2c9b47df5cb3b0bebd146a Mon Sep 17 00:00:00 2001 From: Todd Gruben Date: Sat, 29 Mar 2014 16:10:13 +0000 Subject: [PATCH] refactored file download to support large files --- remote/remote_test.go | 29 +++++++++++++++++++++++++++-- remote/ssh.go | 7 +++---- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/remote/remote_test.go b/remote/remote_test.go index d7c55400c..5173bada6 100644 --- a/remote/remote_test.go +++ b/remote/remote_test.go @@ -20,12 +20,37 @@ func TestRemote(t *testing.T) { So(err, ShouldEqual, nil) content, _ := ssh.Run("date", false) ssh.CopyTo(strings.NewReader(content), "uploadfile") - results, _ := ssh.CopyFrom("uploadfile") - ok := bytes.Equal([]byte(content), results) + var out bytes.Buffer + ssh.CopyFrom("uploadfile", &out) + + ok := bytes.Equal([]byte(content), out.Bytes()) So(ok, ShouldEqual, true) } else { fmt.Println("No credentials so SSH Test ignored") So(true, ShouldEqual, true) } }) + /* + Convey("BigFile", t, func() { + ssh, err := New("50.16.204.123:22", "todd", "id_dsa") + + fo, err := os.Create("outbin") + if err != nil { + panic(err) + } + // close fo on exit and check for its returned error + defer func() { + if err := fo.Close(); err != nil { + panic(err) + } + }() + // make a write buffer + w := bufio.NewWriter(fo) + ssh.CopyFrom("pilosa-cruncher", w) + if err = w.Flush(); err != nil { + panic(err) + } + + }) + */ } diff --git a/remote/ssh.go b/remote/ssh.go index a0a14444a..a001f929c 100644 --- a/remote/ssh.go +++ b/remote/ssh.go @@ -117,15 +117,14 @@ func (self *SSH) CopyTo(content io.Reader, dest_name string) error { return err } -func (self *SSH) CopyFrom(dest_name string) ([]byte, error) { +func (self *SSH) CopyFrom(dest_name string, out io.Writer) error { session, _ := self.client.NewSession() defer session.Close() - var b bytes.Buffer - session.Stdout = &b + session.Stdout = out session.Run(fmt.Sprintf("/bin/cat %s", dest_name)) - return b.Bytes(), nil + return nil }