arlo-cleaner/rclone/minio_test.go

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
}