80 lines
1.5 KiB
Go
80 lines
1.5 KiB
Go
package testsuite
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"testing"
|
|
|
|
"forge.cadoles.com/arcad/edge/pkg/storage"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func BenchmarkBlobStore(t *testing.B, store storage.BlobStore) {
|
|
t.Run("BlobCreateUpdateReadDelete", func(t *testing.B) {
|
|
|
|
for i := 0; i < t.N; i++ {
|
|
bucketName := fmt.Sprintf("bucket-%d", i)
|
|
if err := runBlobCreateUpdateReadDelete(store, bucketName); err != nil {
|
|
t.Fatalf("%+v", errors.WithStack(err))
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
func runBlobCreateUpdateReadDelete(store storage.BlobStore, bucketName string) error {
|
|
ctx := context.Background()
|
|
|
|
bucket, err := store.OpenBucket(ctx, bucketName)
|
|
if err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
blobID := storage.NewBlobID()
|
|
|
|
writer, err := bucket.NewWriter(ctx, blobID)
|
|
if err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
data := []byte("foo")
|
|
|
|
if _, err = writer.Write(data); err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
if err := writer.Close(); err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
reader, err := bucket.NewReader(ctx, blobID)
|
|
if err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
|
|
if _, err = io.Copy(&buf, reader); err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
if err := reader.Close(); err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
if err := bucket.Delete(ctx, blobID); err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
if err := bucket.Close(); err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
if err := store.DeleteBucket(ctx, bucketName); err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
return nil
|
|
}
|