106 lines
2.0 KiB
Go
Executable File
106 lines
2.0 KiB
Go
Executable File
package rclone
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"local/sandbox/arlo-cleaner/config"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestMinio(t *testing.T) {
|
|
if _, ok := os.LookupEnv("INTEGRATION"); !ok {
|
|
t.Log("$INTEGRATION not set")
|
|
return
|
|
}
|
|
t.Log("docker run --rm -d --name minio -p 9000:9000 -e MINIO_ACCESS_KEY=accesskey -e MINIO_SECRET_KEY=secretkey minio/minio server /data && mc mb local/bucket")
|
|
f, err := ioutil.TempFile(os.TempDir(), "minio.config.*")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.Remove(f.Name())
|
|
f.Write([]byte(`
|
|
[minio]
|
|
type = s3
|
|
provider = Minio
|
|
env_auth = false
|
|
access_key_id = accesskey
|
|
secret_access_key = secretkey
|
|
endpoint = http://localhost:9000
|
|
acl = private
|
|
`))
|
|
f.Close()
|
|
os.Setenv("RCCONF", f.Name())
|
|
|
|
was := os.Args
|
|
defer func() {
|
|
os.Args = was
|
|
}()
|
|
os.Args = []string{"a"}
|
|
if err := config.Refresh(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
rc, err := New()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
name := "minio:bucket/key"
|
|
|
|
calls := []struct {
|
|
foo func(*RClone, string) error
|
|
ok bool
|
|
}{
|
|
{minioDel, true},
|
|
{minioCopyFrom, false},
|
|
{minioCopyTo, true},
|
|
{minioList, true},
|
|
{minioCopyFrom, true},
|
|
{minioDel, true},
|
|
{minioCopyFrom, false},
|
|
}
|
|
|
|
for _, call := range calls {
|
|
if err := call.foo(rc, name); (err == nil) != call.ok {
|
|
t.Fatal(call)
|
|
}
|
|
}
|
|
}
|
|
|
|
func minioCopyTo(rc *RClone, name string) error {
|
|
return rc.CopyTo(strings.NewReader("hello"), name)
|
|
}
|
|
|
|
func minioCopyFrom(rc *RClone, name string) error {
|
|
w := bytes.NewBuffer(nil)
|
|
if err := rc.CopyFrom(w, name); err != nil {
|
|
return err
|
|
} else if v := string(w.Bytes()); v != "hello" {
|
|
return errors.New(v)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func minioDel(rc *RClone, name string) error {
|
|
return rc.Del(name)
|
|
}
|
|
|
|
func minioList(rc *RClone, name string) error {
|
|
names, err := rc.List(path.Dir(name))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if len(names) != 1 {
|
|
return fmt.Errorf("%v", len(names))
|
|
}
|
|
if names[0] != "key" {
|
|
return errors.New(names[0])
|
|
}
|
|
return nil
|
|
}
|