mirror of
https://github.com/garethgeorge/backrest.git
synced 2025-12-15 18:15:37 +00:00
83 lines
2.1 KiB
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() })
|
|
}
|