Files
athens/pkg/storage/minio/minio_test.go
2019-07-16 15:23:04 -07:00

112 lines
2.6 KiB
Go

package minio
import (
"os"
"testing"
"github.com/gomods/athens/pkg/config"
"github.com/gomods/athens/pkg/storage/compliance"
)
func TestBackend(t *testing.T) {
backend := getStorage(t)
compliance.RunTests(t, backend, backend.clear)
}
// TestNewStorageExists tests the logic around MakeBucket and BucketExists
func TestNewStorageExists(t *testing.T) {
url := os.Getenv("ATHENS_MINIO_ENDPOINT")
if url == "" {
t.SkipNow()
}
tests := []struct {
name string
deleteBucket bool
}{
{"testbucket", false}, // test creation
{"testbucket", true}, // test exists
}
for _, test := range tests {
backend, err := NewStorage(&config.MinioConfig{
Endpoint: url,
Key: "minio",
Secret: "minio123",
Bucket: test.name,
}, config.GetTimeoutDuration(300))
if err != nil {
t.Fatalf("TestNewStorageExists failed for bucketname: %s, error: %v\n", test.name, err)
}
client, ok := backend.(*storageImpl)
if test.deleteBucket && ok {
client.minioClient.RemoveBucket(test.name)
}
}
}
// TestNewStorageError tests the logic around MakeBucket and BucketExists
// MakeBucket uses a strict naming path in minio while BucketExists does not.
// To ensure both paths are tested, there is a strict path error using the
// "_" and a non strict error using less than 3 characters
func TestNewStorageError(t *testing.T) {
url := os.Getenv("ATHENS_MINIO_ENDPOINT")
if url == "" {
t.SkipNow()
}
// "_" is not allowed in a bucket name
// bucket name must be bigger than 3
tests := []string{"test_bucket", "1"}
for _, bucketName := range tests {
_, err := NewStorage(&config.MinioConfig{
Endpoint: url,
Key: "minio",
Secret: "minio123",
Bucket: bucketName,
}, config.GetTimeoutDuration(300))
if err == nil {
t.Fatalf("TestNewStorageError failed for bucketname: %s\n", bucketName)
}
}
}
func BenchmarkBackend(b *testing.B) {
backend := getStorage(b)
compliance.RunBenchmarks(b, backend, backend.clear)
}
func (s *storageImpl) clear() error {
objectCh, _ := s.minioCore.ListObjectsV2(s.bucketName, "", "", false, "", 0, "")
for _, object := range objectCh.Contents {
if object.Err != nil {
return object.Err
}
if err := s.minioClient.RemoveObject(s.bucketName, object.Key); err != nil {
return err
}
}
return nil
}
func getStorage(t testing.TB) *storageImpl {
url := os.Getenv("ATHENS_MINIO_ENDPOINT")
if url == "" {
t.SkipNow()
}
backend, err := NewStorage(&config.MinioConfig{
Endpoint: url,
Key: "minio",
Secret: "minio123",
Bucket: "gomods",
}, config.GetTimeoutDuration(300))
if err != nil {
t.Fatal(err)
}
return backend.(*storageImpl)
}