init
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
package feature
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"goravel/tests"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/goravel/framework/contracts/filesystem"
|
||||
contractsdocker "github.com/goravel/framework/contracts/testing/docker"
|
||||
"github.com/goravel/framework/facades"
|
||||
supportdocker "github.com/goravel/framework/support/docker"
|
||||
testingdocker "github.com/goravel/framework/testing/docker"
|
||||
"github.com/minio/minio-go/v7"
|
||||
"github.com/minio/minio-go/v7/pkg/credentials"
|
||||
"github.com/stretchr/testify/suite"
|
||||
)
|
||||
|
||||
type FilesystemTestSuite struct {
|
||||
suite.Suite
|
||||
tests.TestCase
|
||||
minioDocker contractsdocker.ImageDriver
|
||||
drivers []string
|
||||
}
|
||||
|
||||
func TestFilesystemTestSuite(t *testing.T) {
|
||||
suite.Run(t, &FilesystemTestSuite{})
|
||||
}
|
||||
|
||||
func (s *FilesystemTestSuite) SetupSuite() {
|
||||
s.drivers = []string{
|
||||
"",
|
||||
"local",
|
||||
"public",
|
||||
}
|
||||
|
||||
if os.Getenv("AWS_ACCESS_KEY_ID") != "" {
|
||||
s.drivers = append(s.drivers, "s3")
|
||||
}
|
||||
if os.Getenv("ALIYUN_ACCESS_KEY_ID") != "" {
|
||||
s.drivers = append(s.drivers, "oss")
|
||||
}
|
||||
if os.Getenv("TENCENT_ACCESS_KEY_ID") != "" {
|
||||
s.drivers = append(s.drivers, "cos")
|
||||
}
|
||||
if os.Getenv("MINIO_ACCESS_KEY_ID") != "" {
|
||||
s.drivers = append(s.drivers, "minio")
|
||||
s.minioDocker = initMinio()
|
||||
}
|
||||
|
||||
fmt.Printf("testing filesystem drivers: %v\n", s.drivers)
|
||||
}
|
||||
|
||||
func (s *FilesystemTestSuite) SetupTest() {
|
||||
}
|
||||
|
||||
func (s *FilesystemTestSuite) TearDownSuite() {
|
||||
if s.minioDocker != nil {
|
||||
s.NoError(s.minioDocker.Shutdown())
|
||||
}
|
||||
}
|
||||
|
||||
func (s *FilesystemTestSuite) TestPutAndGet() {
|
||||
for _, driver := range s.drivers {
|
||||
var storage filesystem.Driver
|
||||
if driver == "" {
|
||||
storage = facades.Storage()
|
||||
} else {
|
||||
storage = facades.Storage().Disk(driver)
|
||||
}
|
||||
|
||||
s.NoError(storage.Put("test.txt", "test"))
|
||||
content, err := storage.Get("test.txt")
|
||||
|
||||
s.NoError(err)
|
||||
s.Equal("test", content)
|
||||
|
||||
s.NoError(storage.Delete("test.txt"))
|
||||
}
|
||||
}
|
||||
|
||||
func initMinio() contractsdocker.ImageDriver {
|
||||
minioAccessKey := os.Getenv("MINIO_ACCESS_KEY_ID")
|
||||
minioSecretKey := os.Getenv("MINIO_ACCESS_KEY_SECRET")
|
||||
minioBucket := os.Getenv("MINIO_BUCKET")
|
||||
|
||||
docker := testingdocker.NewImageDriver(contractsdocker.Image{
|
||||
Repository: "minio/minio",
|
||||
Tag: "latest",
|
||||
Cmd: []string{"server", "/data"},
|
||||
Env: []string{
|
||||
"MINIO_ACCESS_KEY=" + minioAccessKey,
|
||||
"MINIO_SECRET_KEY=" + minioSecretKey,
|
||||
},
|
||||
ExposedPorts: []string{
|
||||
"9000",
|
||||
},
|
||||
})
|
||||
err := docker.Build()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
config := docker.Config()
|
||||
endpoint := fmt.Sprintf("127.0.0.1:%s", supportdocker.ExposedPort(config.ExposedPorts, "9000"))
|
||||
facades.Config().Add("filesystems.disks.minio.endpoint", endpoint)
|
||||
facades.Config().Add("filesystems.disks.minio.url", fmt.Sprintf("http://%s/%s", endpoint, minioBucket))
|
||||
|
||||
if err := docker.Ready(func() error {
|
||||
client, err := minio.New(endpoint, &minio.Options{
|
||||
Creds: credentials.NewStaticV4(minioAccessKey, minioSecretKey, ""),
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := client.MakeBucket(context.Background(), minioBucket, minio.MakeBucketOptions{}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
policy := `{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Action": [
|
||||
"s3:GetObject",
|
||||
"s3:PutObject"
|
||||
],
|
||||
"Effect": "Allow",
|
||||
"Principal": "*",
|
||||
"Resource": [
|
||||
"arn:aws:s3:::` + minioBucket + `/*"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Action": [
|
||||
"s3:ListBucket"
|
||||
],
|
||||
"Effect": "Allow",
|
||||
"Principal": "*",
|
||||
"Resource": [
|
||||
"arn:aws:s3:::` + minioBucket + `"
|
||||
]
|
||||
}
|
||||
]
|
||||
}`
|
||||
|
||||
if err := client.SetBucketPolicy(context.Background(), minioBucket, policy); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return docker
|
||||
}
|
||||
Reference in New Issue
Block a user