98 lines
2.2 KiB
Go
98 lines
2.2 KiB
Go
package migration
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/influxdata/influxdb/v2/inmem"
|
|
"github.com/influxdata/influxdb/v2/kv"
|
|
)
|
|
|
|
func Test_BucketsMigration_CreateBuckets(t *testing.T) {
|
|
var (
|
|
ctx = context.Background()
|
|
bucket = []byte("some_bucket")
|
|
store = inmem.NewKVStore()
|
|
)
|
|
|
|
// bucket should not exist
|
|
bucketShouldNotExist(t, store, bucket)
|
|
|
|
// build new create buckets migration
|
|
migration := CreateBuckets("create bucket some_bucket", bucket)
|
|
|
|
// apply migration up
|
|
if err := migration.Up(ctx, store); err != nil {
|
|
t.Fatal("unexpected error", err)
|
|
}
|
|
|
|
// bucket should now exist
|
|
bucketShouldExist(t, store, bucket)
|
|
|
|
// apply migration down
|
|
if err := migration.Down(ctx, store); err != nil {
|
|
t.Fatal("unexpected error", err)
|
|
}
|
|
|
|
// bucket should no longer exist
|
|
bucketShouldNotExist(t, store, bucket)
|
|
}
|
|
|
|
func Test_BucketsMigration_DeleteBuckets(t *testing.T) {
|
|
var (
|
|
ctx = context.Background()
|
|
bucket = []byte("some_bucket")
|
|
store = inmem.NewKVStore()
|
|
)
|
|
|
|
// initially create bucket
|
|
if err := store.CreateBucket(ctx, bucket); err != nil {
|
|
t.Fatal("unexpected error", err)
|
|
}
|
|
|
|
// ensure bucket is there to start with
|
|
bucketShouldExist(t, store, bucket)
|
|
|
|
// build new delete buckets migration
|
|
migration := DeleteBuckets("delete bucket some_bucket", bucket)
|
|
|
|
// apply migration up
|
|
if err := migration.Up(ctx, store); err != nil {
|
|
t.Fatal("unexpected error", err)
|
|
}
|
|
|
|
// bucket should have been removed
|
|
bucketShouldNotExist(t, store, bucket)
|
|
|
|
// apply migration down
|
|
if err := migration.Down(ctx, store); err != nil {
|
|
t.Fatal("unexpected error", err)
|
|
}
|
|
|
|
// bucket should exist again
|
|
bucketShouldExist(t, store, bucket)
|
|
}
|
|
|
|
func bucketShouldExist(t *testing.T, store kv.Store, bucket []byte) {
|
|
t.Helper()
|
|
|
|
if err := store.View(context.Background(), func(tx kv.Tx) error {
|
|
_, err := tx.Bucket(bucket)
|
|
return err
|
|
}); err != nil {
|
|
t.Fatal("unexpected error", err)
|
|
}
|
|
}
|
|
|
|
func bucketShouldNotExist(t *testing.T, store kv.Store, bucket []byte) {
|
|
t.Helper()
|
|
|
|
if err := store.View(context.Background(), func(tx kv.Tx) error {
|
|
_, err := tx.Bucket(bucket)
|
|
return err
|
|
}); !errors.Is(err, kv.ErrBucketNotFound) {
|
|
t.Fatalf("expected bucket not found, got %q", err)
|
|
}
|
|
}
|