feat(storage): rpc based implementation
All checks were successful
arcad/edge/pipeline/pr-master This commit looks good

This commit is contained in:
2023-09-12 22:03:25 -06:00
parent c3535a4a9b
commit 8e574c299b
113 changed files with 3007 additions and 263 deletions

View File

@ -1,14 +1,14 @@
package testsuite
import (
"context"
"testing"
"forge.cadoles.com/arcad/edge/pkg/storage"
)
func TestBlobStore(t *testing.T, store storage.BlobStore) {
func TestBlobStore(ctx context.Context, t *testing.T, store storage.BlobStore) {
t.Run("Ops", func(t *testing.T) {
t.Parallel()
testBlobStoreOps(t, store)
testBlobStoreOps(ctx, t, store)
})
}

View File

@ -0,0 +1,79 @@
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
}

View File

@ -17,9 +17,11 @@ type blobStoreTestCase struct {
var blobStoreTestCases = []blobStoreTestCase{
{
Name: "Open new bucket",
Name: "Open then delete bucket",
Run: func(ctx context.Context, store storage.BlobStore) error {
bucket, err := store.OpenBucket(ctx, "open-new-bucket")
bucketName := "open-new-bucket"
bucket, err := store.OpenBucket(ctx, bucketName)
if err != nil {
return errors.WithStack(err)
}
@ -50,6 +52,23 @@ var blobStoreTestCases = []blobStoreTestCase{
return errors.WithStack(err)
}
if err := store.DeleteBucket(ctx, bucketName); err != nil {
return errors.WithStack(err)
}
buckets, err := store.ListBuckets(ctx)
if err != nil {
return errors.WithStack(err)
}
for _, b := range buckets {
if b != bucketName {
continue
}
return errors.Errorf("bucket '%s' should be deleted", bucketName)
}
return nil
},
},
@ -112,14 +131,12 @@ var blobStoreTestCases = []blobStoreTestCase{
},
}
func testBlobStoreOps(t *testing.T, store storage.BlobStore) {
func testBlobStoreOps(ctx context.Context, t *testing.T, store storage.BlobStore) {
for _, tc := range blobStoreTestCases {
func(tc blobStoreTestCase) {
t.Run(tc.Name, func(t *testing.T) {
t.Parallel()
ctx := context.Background()
if err := tc.Run(ctx, store); err != nil {
t.Errorf("%+v", errors.WithStack(err))
}

View File

@ -1,14 +1,14 @@
package testsuite
import (
"context"
"testing"
"forge.cadoles.com/arcad/edge/pkg/storage"
)
func TestDocumentStore(t *testing.T, store storage.DocumentStore) {
func TestDocumentStore(ctx context.Context, t *testing.T, store storage.DocumentStore) {
t.Run("Ops", func(t *testing.T) {
t.Parallel()
testDocumentStoreOps(t, store)
testDocumentStoreOps(ctx, t, store)
})
}

View File

@ -433,12 +433,12 @@ var documentStoreOpsTestCases = []documentStoreOpsTestCase{
},
}
func testDocumentStoreOps(t *testing.T, store storage.DocumentStore) {
func testDocumentStoreOps(ctx context.Context, t *testing.T, store storage.DocumentStore) {
for _, tc := range documentStoreOpsTestCases {
func(tc documentStoreOpsTestCase) {
t.Run(tc.Name, func(t *testing.T) {
t.Parallel()
if err := tc.Run(context.Background(), store); err != nil {
if err := tc.Run(ctx, store); err != nil {
t.Errorf("%+v", errors.WithStack(err))
}
})