Skip to content

Commit

Permalink
more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
paul-nicolas committed Oct 3, 2023
1 parent fbb775c commit 0e93c62
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 75 deletions.
8 changes: 4 additions & 4 deletions pkg/ledgertesting/storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -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

Check warning on line 29 in pkg/ledgertesting/storage.go

View check run for this annotation

Codecov / codecov/patch

pkg/ledgertesting/storage.go#L29

Added line #L29 was not covered by tests
case "postgres":
pgServer, err := pgtesting.PostgresServer()
if err != nil {
Expand All @@ -39,7 +39,7 @@ func StorageDriver() (*sqlstorage.Driver, func(), error) {
return sqlstorage.NewDriver(
"postgres",
sqlstorage.NewPostgresDB(db),
false,
multipleInstance,
), func() {
_ = pgServer.Close()
}, nil
Expand All @@ -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
}
Expand Down
25 changes: 25 additions & 0 deletions pkg/storage/sqlstorage/accounts_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
141 changes: 73 additions & 68 deletions pkg/storage/sqlstorage/migrates/13-clean-logs/any_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down
2 changes: 1 addition & 1 deletion pkg/storage/sqlstorage/store_ledger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit 0e93c62

Please sign in to comment.