Files
backrest/internal/oplog/sqlitestore/migrations_test.go

83 lines
2.1 KiB
Go

package sqlitestore
import (
"testing"
v1 "github.com/garethgeorge/backrest/gen/go/v1"
"github.com/garethgeorge/backrest/internal/oplog"
"github.com/garethgeorge/backrest/internal/testutil"
"github.com/google/go-cmp/cmp"
"google.golang.org/protobuf/testing/protocmp"
)
func TestNewSqliteStore(t *testing.T) {
tempDir := t.TempDir()
store, err := NewSqliteStore(tempDir + "/test.sqlite")
if err != nil {
t.Fatalf("error creating sqlite store: %s", err)
}
t.Cleanup(func() { store.Close() })
}
func TestMigrateExisting(t *testing.T) {
tempDir := t.TempDir()
testOps := []*v1.Operation{}
for i := 0; i < 10; i++ {
testOps = append(testOps, testutil.RandomOperation())
}
store, err := NewSqliteStore(tempDir + "/test.sqlite")
if err != nil {
t.Fatalf("error creating sqlite store: %s", err)
}
// insert some test data
if err := store.Add(testOps...); err != nil {
t.Fatalf("error adding test data: %s", err)
}
gotOps := make([]*v1.Operation, 0)
if err := store.Query(oplog.Query{}, func(op *v1.Operation) error {
gotOps = append(gotOps, op)
return nil
}); err != nil {
t.Fatalf("error querying sqlite store: %s", err)
}
if len(gotOps) != len(testOps) {
t.Errorf("first check before migrations, expected %d operations, got %d", len(testOps), len(gotOps))
}
if err := store.Close(); err != nil {
t.Fatalf("error closing sqlite store: %s", err)
}
// re-open the store
store2, err := NewSqliteStore(tempDir + "/test.sqlite")
if err != nil {
t.Fatalf("error creating sqlite store: %s", err)
}
gotOps = gotOps[:0]
if err := store2.Query(oplog.Query{}, func(op *v1.Operation) error {
gotOps = append(gotOps, op)
return nil
}); err != nil {
t.Fatalf("error querying sqlite store: %s", err)
}
if len(gotOps) != len(testOps) {
t.Errorf("expected %d operations, got %d", len(testOps), len(gotOps))
}
if diff := cmp.Diff(
&v1.OperationList{Operations: gotOps},
&v1.OperationList{Operations: testOps},
protocmp.Transform()); diff != "" {
t.Errorf("unexpected diff in operations back after migration: %v", diff)
}
t.Cleanup(func() { store2.Close() })
}