arlo-cleaner/rclone/copy_test.go

107 lines
1.9 KiB
Go
Executable File

package rclone
import (
"bytes"
"io/ioutil"
"local/logb"
"local/sandbox/arlo-cleaner/config"
"os"
"strings"
"testing"
)
func TestCopyFrom(t *testing.T) {
logb.Set(logb.ERROR)
rc, def := makeRC()
defer def()
t.Log("making f")
f, err := ioutil.TempFile(os.TempDir(), "remote*")
if err != nil {
t.Fatal(err)
}
f.Write([]byte(`hello`))
f.Close()
defer os.Remove(f.Name())
t.Log("reading f")
b := bytes.NewBuffer(nil)
if err := rc.CopyFrom(b, "local:"+f.Name()); err != nil {
t.Fatal(err)
}
t.Log("result")
if v := string(b.Bytes()); v != "hello" {
t.Fatal(v)
}
}
func TestCopyTo(t *testing.T) {
rc, def := makeRC()
defer def()
logb.Set(logb.VERBOSE)
t.Log("making f")
f, err := ioutil.TempFile(os.TempDir(), "remote*")
if err != nil {
t.Fatal(err)
}
f.Close()
defer os.Remove(f.Name())
t.Logf("writing %s", f.Name())
s := strings.NewReader("hello")
was := logb.Writer()
b := bytes.NewBuffer(nil)
logb.SetWriter(b)
if err := rc.CopyTo(s, "local:"+f.Name()); err != nil {
logb.SetWriter(was)
t.Fatal(err)
}
logb.SetWriter(was)
if !bytes.Contains(b.Bytes(), []byte("not re-uploading")) {
t.Fatalf("%q", string(b.Bytes()))
}
if err := os.Remove(f.Name()); err != nil {
t.Fatal(err)
}
if err := rc.CopyTo(s, "local:"+f.Name()); err != nil {
t.Fatal(err)
}
t.Log("reading f from", f.Name())
if b, err := ioutil.ReadFile(f.Name()); err != nil {
t.Fatal(err)
} else if string(b) != "hello" {
t.Fatal(string(b))
}
}
func makeRC() (*RClone, func()) {
logb.Set(logb.ERROR)
f, err := ioutil.TempFile(os.TempDir(), "copy.config.*")
if err != nil {
panic(err)
}
f.Write([]byte(`
[local]
type = local
`))
f.Close()
os.Setenv("RCCONF", f.Name())
was := os.Args
os.Args = []string{"foo"}
config.Refresh()
rc, err := New()
if err != nil {
panic(err)
}
return rc, func() {
os.Args = was
os.Remove(f.Name())
}
}