From 0e93c62cd9a3f08d8202587b21732ed9499c82ea Mon Sep 17 00:00:00 2001 From: Paul Nicolas Date: Tue, 3 Oct 2023 09:30:12 +0200 Subject: [PATCH] more tests --- pkg/ledgertesting/storage.go | 8 +- pkg/storage/sqlstorage/accounts_test.go | 25 ++++ .../migrates/13-clean-logs/any_test.go | 141 +++++++++--------- .../17-optimized-segments/any_test.go | 2 +- .../9-add-pre-post-volumes/any_test.go | 2 +- pkg/storage/sqlstorage/store_ledger_test.go | 2 +- 6 files changed, 105 insertions(+), 75 deletions(-) diff --git a/pkg/ledgertesting/storage.go b/pkg/ledgertesting/storage.go index 92e9d0526..c8b524a17 100644 --- a/pkg/ledgertesting/storage.go +++ b/pkg/ledgertesting/storage.go @@ -22,11 +22,11 @@ func StorageDriverName() string { return "sqlite" } -func StorageDriver() (*sqlstorage.Driver, func(), error) { +func StorageDriver(multipleInstance bool) (*sqlstorage.Driver, func(), error) { switch StorageDriverName() { case "sqlite": id := uuid.New() - return sqlstorage.NewDriver("sqlite", sqlstorage.NewSQLiteDB(os.TempDir(), id), false), func() {}, nil + return sqlstorage.NewDriver("sqlite", sqlstorage.NewSQLiteDB(os.TempDir(), id), multipleInstance), func() {}, nil case "postgres": pgServer, err := pgtesting.PostgresServer() if err != nil { @@ -39,7 +39,7 @@ func StorageDriver() (*sqlstorage.Driver, func(), error) { return sqlstorage.NewDriver( "postgres", sqlstorage.NewPostgresDB(db), - false, + multipleInstance, ), func() { _ = pgServer.Close() }, nil @@ -49,7 +49,7 @@ func StorageDriver() (*sqlstorage.Driver, func(), error) { func ProvideStorageDriver() fx.Option { return fx.Provide(func(lc fx.Lifecycle) (*sqlstorage.Driver, error) { - driver, stopFn, err := StorageDriver() + driver, stopFn, err := StorageDriver(false) if err != nil { return nil, err } diff --git a/pkg/storage/sqlstorage/accounts_test.go b/pkg/storage/sqlstorage/accounts_test.go index 95a19faf1..fe914a7ef 100644 --- a/pkg/storage/sqlstorage/accounts_test.go +++ b/pkg/storage/sqlstorage/accounts_test.go @@ -28,6 +28,31 @@ func TestAccounts(t *testing.T) { _, err = store.Initialize(context.Background()) assert.NoError(t, err) + accountTests(t, store) +} + +func TestAccountsMultipleInstance(t *testing.T) { + d := NewDriver("sqlite", &sqliteDB{ + directory: os.TempDir(), + dbName: uuid.New(), + }, true) + + assert.NoError(t, d.Initialize(context.Background())) + + defer func(d *Driver, ctx context.Context) { + assert.NoError(t, d.Close(ctx)) + }(d, context.Background()) + + store, _, err := d.GetLedgerStore(context.Background(), "foo", true) + assert.NoError(t, err) + + _, err = store.Initialize(context.Background()) + assert.NoError(t, err) + + accountTests(t, store) +} + +func accountTests(t *testing.T, store *Store) { t.Run("success balance", func(t *testing.T) { q := ledger.AccountsQuery{ PageSize: 10, diff --git a/pkg/storage/sqlstorage/migrates/13-clean-logs/any_test.go b/pkg/storage/sqlstorage/migrates/13-clean-logs/any_test.go index 39b81fecb..7c7766537 100644 --- a/pkg/storage/sqlstorage/migrates/13-clean-logs/any_test.go +++ b/pkg/storage/sqlstorage/migrates/13-clean-logs/any_test.go @@ -15,76 +15,81 @@ import ( ) func TestMigrate(t *testing.T) { - driver, closeFunc, err := ledgertesting.StorageDriver() + driver, closeFunc, err := ledgertesting.StorageDriver(false) require.NoError(t, err) defer closeFunc() - require.NoError(t, driver.Initialize(context.Background())) - store, _, err := driver.GetLedgerStore(context.Background(), uuid.New(), true) + driverMultipleInstance, closeMultipleInstanceFunc, err := ledgertesting.StorageDriver(true) require.NoError(t, err) - - schema := store.Schema() - - migrations, err := sqlstorage.CollectMigrationFiles(sqlstorage.MigrationsFS) - require.NoError(t, err) - - modified, err := sqlstorage.Migrate(context.Background(), schema, migrations[0:13]...) - require.NoError(t, err) - require.True(t, modified) - - sqlq, args := sqlbuilder.NewInsertBuilder(). - InsertInto(schema.Table("log")). - Cols("id", "type", "hash", "date", "data"). - Values("0", core.NewTransactionType, "", time.Now(), `{ - "txid": 0, - "postings": [], - "reference": "tx1" - }`). - Values("1", core.NewTransactionType, "", time.Now(), `{ - "txid": 1, - "postings": [], - "preCommitVolumes": {}, - "postCommitVolumes": {}, - "reference": "tx2" - }`). - BuildWithFlavor(schema.Flavor()) - - _, err = schema.ExecContext(context.Background(), sqlq, args...) - require.NoError(t, err) - - modified, err = sqlstorage.Migrate(context.Background(), schema, migrations[13]) - require.NoError(t, err) - require.True(t, modified) - - sqlq, args = sqlbuilder.NewSelectBuilder(). - Select("data"). - From(schema.Table("log")). - BuildWithFlavor(schema.Flavor()) - - rows, err := schema.QueryContext(context.Background(), sqlq, args...) - require.NoError(t, err) - - require.True(t, rows.Next()) - var dataStr string - require.NoError(t, rows.Scan(&dataStr)) - - data := map[string]any{} - require.NoError(t, json.Unmarshal([]byte(dataStr), &data)) - - require.Equal(t, map[string]any{ - "txid": float64(0), - "postings": []interface{}{}, - "reference": "tx1", - }, data) - - require.True(t, rows.Next()) - require.NoError(t, rows.Scan(&dataStr)) - require.NoError(t, json.Unmarshal([]byte(dataStr), &data)) - - require.Equal(t, map[string]any{ - "txid": float64(1), - "postings": []interface{}{}, - "reference": "tx2", - }, data) - + defer closeMultipleInstanceFunc() + + for _, driver := range []*sqlstorage.Driver{driver, driverMultipleInstance} { + require.NoError(t, driver.Initialize(context.Background())) + store, _, err := driver.GetLedgerStore(context.Background(), uuid.New(), true) + require.NoError(t, err) + + schema := store.Schema() + + migrations, err := sqlstorage.CollectMigrationFiles(sqlstorage.MigrationsFS) + require.NoError(t, err) + + modified, err := sqlstorage.Migrate(context.Background(), schema, migrations[0:13]...) + require.NoError(t, err) + require.True(t, modified) + + sqlq, args := sqlbuilder.NewInsertBuilder(). + InsertInto(schema.Table("log")). + Cols("id", "type", "hash", "date", "data"). + Values("0", core.NewTransactionType, "", time.Now(), `{ + "txid": 0, + "postings": [], + "reference": "tx1" + }`). + Values("1", core.NewTransactionType, "", time.Now(), `{ + "txid": 1, + "postings": [], + "preCommitVolumes": {}, + "postCommitVolumes": {}, + "reference": "tx2" + }`). + BuildWithFlavor(schema.Flavor()) + + _, err = schema.ExecContext(context.Background(), sqlq, args...) + require.NoError(t, err) + + modified, err = sqlstorage.Migrate(context.Background(), schema, migrations[13]) + require.NoError(t, err) + require.True(t, modified) + + sqlq, args = sqlbuilder.NewSelectBuilder(). + Select("data"). + From(schema.Table("log")). + BuildWithFlavor(schema.Flavor()) + + rows, err := schema.QueryContext(context.Background(), sqlq, args...) + require.NoError(t, err) + + require.True(t, rows.Next()) + var dataStr string + require.NoError(t, rows.Scan(&dataStr)) + + data := map[string]any{} + require.NoError(t, json.Unmarshal([]byte(dataStr), &data)) + + require.Equal(t, map[string]any{ + "txid": float64(0), + "postings": []interface{}{}, + "reference": "tx1", + }, data) + + require.True(t, rows.Next()) + require.NoError(t, rows.Scan(&dataStr)) + require.NoError(t, json.Unmarshal([]byte(dataStr), &data)) + + require.Equal(t, map[string]any{ + "txid": float64(1), + "postings": []interface{}{}, + "reference": "tx2", + }, data) + } } diff --git a/pkg/storage/sqlstorage/migrates/17-optimized-segments/any_test.go b/pkg/storage/sqlstorage/migrates/17-optimized-segments/any_test.go index e124dcf89..9e3bdf66a 100644 --- a/pkg/storage/sqlstorage/migrates/17-optimized-segments/any_test.go +++ b/pkg/storage/sqlstorage/migrates/17-optimized-segments/any_test.go @@ -17,7 +17,7 @@ func TestMigrate17(t *testing.T) { t.Skip() } - driver, closeFunc, err := ledgertesting.StorageDriver() + driver, closeFunc, err := ledgertesting.StorageDriver(false) require.NoError(t, err) defer closeFunc() diff --git a/pkg/storage/sqlstorage/migrates/9-add-pre-post-volumes/any_test.go b/pkg/storage/sqlstorage/migrates/9-add-pre-post-volumes/any_test.go index 47dbf6988..e6cb6e690 100644 --- a/pkg/storage/sqlstorage/migrates/9-add-pre-post-volumes/any_test.go +++ b/pkg/storage/sqlstorage/migrates/9-add-pre-post-volumes/any_test.go @@ -215,7 +215,7 @@ var testCases = []testCase{ } func TestMigrate9(t *testing.T) { - driver, closeFunc, err := ledgertesting.StorageDriver() + driver, closeFunc, err := ledgertesting.StorageDriver(false) require.NoError(t, err) defer closeFunc() diff --git a/pkg/storage/sqlstorage/store_ledger_test.go b/pkg/storage/sqlstorage/store_ledger_test.go index 269d832e4..e6e440d83 100644 --- a/pkg/storage/sqlstorage/store_ledger_test.go +++ b/pkg/storage/sqlstorage/store_ledger_test.go @@ -728,7 +728,7 @@ func testTooManyClient(t *testing.T, store *sqlstorage.Store) { } func TestInitializeStore(t *testing.T) { - driver, stopFn, err := ledgertesting.StorageDriver() + driver, stopFn, err := ledgertesting.StorageDriver(false) require.NoError(t, err) defer stopFn() defer func(driver storage.Driver[*sqlstorage.Store], ctx context.Context) {