mirror of
https://github.com/gomods/athens
synced 2026-02-03 11:00:32 +00:00
112 lines
2.6 KiB
Go
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)
|
|
}
|