objectstorage: add WriteObject tests
Test WriteObject using different size values: unspecified, equal to the buffer size or less than the buffer size.
This commit is contained in:
parent
2e520dae55
commit
1eb16886d8
|
@ -15,6 +15,7 @@
|
||||||
package objectstorage
|
package objectstorage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
@ -29,6 +30,26 @@ import (
|
||||||
"agola.io/agola/internal/objectstorage/s3"
|
"agola.io/agola/internal/objectstorage/s3"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func setupPosix(t *testing.T, dir string) (*posix.PosixStorage, error) {
|
||||||
|
return posix.New(path.Join(dir, "posix"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func setupPosixFlat(t *testing.T, dir string) (*posixflat.PosixFlatStorage, error) {
|
||||||
|
return posixflat.New(path.Join(dir, "posixflat"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func setupS3(t *testing.T, dir string) (*s3.S3Storage, error) {
|
||||||
|
minioEndpoint := os.Getenv("MINIO_ENDPOINT")
|
||||||
|
minioAccessKey := os.Getenv("MINIO_ACCESSKEY")
|
||||||
|
minioSecretKey := os.Getenv("MINIO_SECRETKEY")
|
||||||
|
if minioEndpoint == "" {
|
||||||
|
t.Logf("missing MINIO_ENDPOINT env, skipping tests with minio storage")
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return s3.New(filepath.Base(dir), "", minioEndpoint, minioAccessKey, minioSecretKey, false)
|
||||||
|
}
|
||||||
|
|
||||||
func TestList(t *testing.T) {
|
func TestList(t *testing.T) {
|
||||||
dir, err := ioutil.TempDir("", "objectstorage")
|
dir, err := ioutil.TempDir("", "objectstorage")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -36,27 +57,17 @@ func TestList(t *testing.T) {
|
||||||
}
|
}
|
||||||
defer os.RemoveAll(dir)
|
defer os.RemoveAll(dir)
|
||||||
|
|
||||||
ps, err := posix.New(path.Join(dir, "posix"))
|
ps, err := setupPosix(t, dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected err: %v", err)
|
t.Fatalf("unexpected err: %v", err)
|
||||||
}
|
}
|
||||||
pfs, err := posixflat.New(path.Join(dir, "posixflat"))
|
pfs, err := setupPosixFlat(t, dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected err: %v", err)
|
t.Fatalf("unexpected err: %v", err)
|
||||||
}
|
}
|
||||||
|
s3s, err := setupS3(t, dir)
|
||||||
var s3s *s3.S3Storage
|
if err != nil {
|
||||||
minioEndpoint := os.Getenv("MINIO_ENDPOINT")
|
t.Fatalf("unexpected err: %v", err)
|
||||||
minioAccessKey := os.Getenv("MINIO_ACCESSKEY")
|
|
||||||
minioSecretKey := os.Getenv("MINIO_SECRETKEY")
|
|
||||||
if minioEndpoint == "" {
|
|
||||||
t.Logf("missing MINIO_ENDPOINT env, skipping tests with minio storage")
|
|
||||||
} else {
|
|
||||||
var err error
|
|
||||||
s3s, err = s3.New(filepath.Base(dir), "", minioEndpoint, minioAccessKey, minioSecretKey, false)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("err: %v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type listop struct {
|
type listop struct {
|
||||||
|
@ -293,3 +304,93 @@ func TestList(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWriteObject(t *testing.T) {
|
||||||
|
dir, err := ioutil.TempDir("", "objectstorage")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(dir)
|
||||||
|
|
||||||
|
ps, err := setupPosix(t, dir)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
pfs, err := setupPosixFlat(t, dir)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
s3s, err := setupS3(t, dir)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
newBuf := func(n int64) *bytes.Buffer {
|
||||||
|
testBytes := make([]byte, n)
|
||||||
|
for i := int64(0); i < n; i++ {
|
||||||
|
testBytes[i] = 'a' + byte(i%26)
|
||||||
|
}
|
||||||
|
return bytes.NewBuffer(testBytes)
|
||||||
|
}
|
||||||
|
|
||||||
|
for sname, s := range map[string]Storage{"posix": ps, "posixflat": pfs, "minio": s3s} {
|
||||||
|
t.Run(fmt.Sprintf("test with storage type %s", sname), func(t *testing.T) {
|
||||||
|
switch s := s.(type) {
|
||||||
|
case *s3.S3Storage:
|
||||||
|
if s == nil {
|
||||||
|
t.SkipNow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
os := NewObjStorage(s, "/")
|
||||||
|
|
||||||
|
n := int64(10000)
|
||||||
|
|
||||||
|
// Test write without size. Should write whole buffer.
|
||||||
|
buf := newBuf(n)
|
||||||
|
objName := "obj01"
|
||||||
|
if err := os.WriteObject(objName, buf, -1, false); err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
oi, err := os.Stat(objName)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
if oi.Size != n {
|
||||||
|
t.Fatalf("expected object size: %d, got %d", n, oi.Size)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test write with object size equal to buf size.
|
||||||
|
buf = newBuf(n)
|
||||||
|
objName = "obj02"
|
||||||
|
if err := os.WriteObject(objName, buf, n, false); err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
oi, err = os.Stat(objName)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
if oi.Size != n {
|
||||||
|
t.Fatalf("expected object size: %d, got %d", n, oi.Size)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test write with object size less than buf size.
|
||||||
|
buf = newBuf(n)
|
||||||
|
objName = "obj03"
|
||||||
|
size := int64(800)
|
||||||
|
if err := os.WriteObject(objName, buf, int64(size), false); err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
oi, err = os.Stat(objName)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
if oi.Size != size {
|
||||||
|
t.Fatalf("expected object size: %d, got %d", size, oi.Size)
|
||||||
|
}
|
||||||
|
// remaining buf len should be n-size
|
||||||
|
if int64(buf.Len()) != n-size {
|
||||||
|
t.Fatalf("expected buf lenght: %d, got %d", n-size, buf.Len())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue