Files
chain33-dtalk/pkg/oss/minio/minio_test.go
2022-03-17 15:59:24 +08:00

142 lines
2.9 KiB
Go

package minio
import (
"bytes"
"github.com/stretchr/testify/require"
"gitlab.33.cn/chat/dtalk/pkg/oss"
"math"
"os"
"sort"
"testing"
)
/*
[[Oss]]
AppId = "dtalk"
OssType = "minio"
RegionId = ""
AccessKeyId = "XYI4T3QIT8YQQLRHA0YV"
AccessKeySecret = "FqgvB3CzsBK5xwEphEC6i4Y6dTkWAjyfQ9TS1kLZ"
Role = ""
Policy = ""
DurationSeconds = 3600
Bucket = "dtalk-test"
EndPoint = "127.0.0.1:9000"
*/
var (
minioConfig = &oss.Config{
RegionId: "",
AccessKeyId: "XYI4T3QIT8YQQLRHA0YV",
AccessKeySecret: "FqgvB3CzsBK5xwEphEC6i4Y6dTkWAjyfQ9TS1kLZ",
Role: "",
Policy: "",
DurationSeconds: 3600,
Bucket: "dtalk-test",
EndPoint: "127.0.0.1:9000",
}
smFilePath = "/Users/cccccccccchy/Downloads/oa.sql"
bgFilePath = "/Users/cccccccccchy/Downloads/movie_bg.mp4"
OssMinio = &Minio{}
)
func TestMain(m *testing.M) {
OssMinio = New(minioConfig)
os.Exit(m.Run())
}
func TestMinio_Upload_sm(t *testing.T) {
file, err := os.OpenFile(smFilePath, os.O_RDONLY, os.ModePerm)
if err != nil {
panic(err)
}
fileStat, err := file.Stat()
if err != nil {
panic(err)
}
url, _, err := OssMinio.Upload("test_smFile.gif", file, fileStat.Size())
require.NoError(t, err)
t.Log(url)
}
func TestMinio_Upload_bg(t *testing.T) {
file, err := os.OpenFile(bgFilePath, os.O_RDONLY, os.ModePerm)
if err != nil {
panic(err)
}
fileStat, err := file.Stat()
if err != nil {
panic(err)
}
url, _, err := OssMinio.Upload("test_movie_bg.mp4", file, fileStat.Size())
require.NoError(t, err)
t.Log(url)
}
func TestMinio_Multipart_bg(t *testing.T) {
file, err := os.OpenFile(smFilePath, os.O_RDONLY, os.ModePerm)
if err != nil {
panic(err)
}
fileStat, err := file.Stat()
if err != nil {
panic(err)
}
var chunkSize int64 = 1024 * 1024 * 5
var num int64
var key string = "oa.sql"
var uploadId string
var parts []oss.Part
uploadId, err = OssMinio.InitiateMultipartUpload(key)
require.NoError(t, err)
num = int64(math.Ceil(float64(fileStat.Size()) / float64(chunkSize)))
// 执行并发上传段
partChan := make(chan oss.Part, num)
var i int64 = 0
for ; i < num; i++ {
go func(i int64) {
b := make([]byte, chunkSize)
_, _ = file.Seek(i*(chunkSize), 0)
if len(b) > int(fileStat.Size()-i*chunkSize) {
b = make([]byte, fileStat.Size()-i*chunkSize)
}
file.Read(b)
r := bytes.NewReader(b)
etag, err := OssMinio.UploadPart(key, uploadId, r, int32(i+1), 0, int64(len(b)))
require.NoError(t, err)
partChan <- oss.Part{
ETag: etag,
PartNumber: int32(i + 1),
}
t.Log("partNumber", i+1, "len", len(b))
}(i)
}
parts = make([]oss.Part, 0, num)
// 等待上传完成
for {
part, ok := <-partChan
if !ok {
break
}
parts = append(parts, part)
if len(parts) == int(num) {
close(partChan)
}
}
sort.Sort(oss.Parts(parts))
url, _, err := OssMinio.CompleteMultipartUpload(key, uploadId, parts)
require.NoError(t, err)
t.Log(url)
}