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 }