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()) } }