fix(tests): moved test db setup to a common place 't/helpers', created

interface for initializing db, which is implemented for appdatabase and
walletdatabase. TBD for multiaccounts DB.
Unified DB initializion for all tests using helpers and new interface.
Reduced sqlcipher kdf iterations for all tests to 1.
This commit is contained in:
Ivan Belyakov 2023-08-11 13:28:45 +02:00 committed by IvanBelyakoff
parent aa3d33a58f
commit 2df9df10ab
48 changed files with 312 additions and 290 deletions

View File

@ -31,9 +31,10 @@ import (
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
"github.com/status-im/status-go/rpc" "github.com/status-im/status-go/rpc"
"github.com/status-im/status-go/services/typeddata" "github.com/status-im/status-go/services/typeddata"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/t/utils" "github.com/status-im/status-go/t/utils"
"github.com/status-im/status-go/transactions" "github.com/status-im/status-go/transactions"
"github.com/status-im/status-go/walletdatabase"
) )
var ( var (
@ -57,21 +58,11 @@ var (
) )
func setupTestDB() (*sql.DB, func() error, error) { func setupTestDB() (*sql.DB, func() error, error) {
tmpfile, err := ioutil.TempFile("", "tests") return helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "tests")
if err != nil { }
return nil, nil, err
} func setupTestWalletDB() (*sql.DB, func() error, error) {
db, err := appdatabase.InitializeDB(tmpfile.Name(), "tests", sqlite.ReducedKDFIterationsNumber) return helpers.SetupTestSQLDB(walletdatabase.DbInitializer{}, "tests")
if err != nil {
return nil, nil, err
}
return db, func() error {
err := db.Close()
if err != nil {
return err
}
return os.Remove(tmpfile.Name())
}, nil
} }
func setupTestMultiDB() (*multiaccounts.Database, func() error, error) { func setupTestMultiDB() (*multiaccounts.Database, func() error, error) {
@ -92,24 +83,33 @@ func setupTestMultiDB() (*multiaccounts.Database, func() error, error) {
}, nil }, nil
} }
func setupGethStatusBackend() (*GethStatusBackend, func() error, func() error, error) { func setupGethStatusBackend() (*GethStatusBackend, func() error, func() error, func() error, error) {
db, stop1, err := setupTestDB() db, stop1, err := setupTestDB()
if err != nil { if err != nil {
return nil, nil, nil, err return nil, nil, nil, nil, err
} }
backend := NewGethStatusBackend() backend := NewGethStatusBackend()
backend.StatusNode().SetAppDB(db) backend.StatusNode().SetAppDB(db)
ma, stop2, err := setupTestMultiDB() ma, stop2, err := setupTestMultiDB()
if err != nil {
return nil, nil, nil, nil, err
}
backend.StatusNode().SetMultiaccountsDB(ma) backend.StatusNode().SetMultiaccountsDB(ma)
return backend, stop1, stop2, err walletDb, stop3, err := setupTestWalletDB()
if err != nil {
return nil, nil, nil, nil, err
}
backend.StatusNode().SetWalletDB(walletDb)
return backend, stop1, stop2, stop3, err
} }
func TestBackendStartNodeConcurrently(t *testing.T) { func TestBackendStartNodeConcurrently(t *testing.T) {
utils.Init() utils.Init()
backend, stop1, stop2, err := setupGethStatusBackend() backend, stop1, stop2, stop3, err := setupGethStatusBackend()
defer func() { defer func() {
err := stop1() err := stop1()
if err != nil { if err != nil {
@ -122,6 +122,12 @@ func TestBackendStartNodeConcurrently(t *testing.T) {
require.NoError(t, backend.StopNode()) require.NoError(t, backend.StopNode())
} }
}() }()
defer func() {
err := stop3()
if err != nil {
require.NoError(t, backend.StopNode())
}
}()
require.NoError(t, err) require.NoError(t, err)
config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID) config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID)
@ -158,7 +164,7 @@ func TestBackendStartNodeConcurrently(t *testing.T) {
func TestBackendRestartNodeConcurrently(t *testing.T) { func TestBackendRestartNodeConcurrently(t *testing.T) {
utils.Init() utils.Init()
backend, stop1, stop2, err := setupGethStatusBackend() backend, stop1, stop2, stopWallet, err := setupGethStatusBackend()
defer func() { defer func() {
err := stop1() err := stop1()
if err != nil { if err != nil {
@ -171,6 +177,12 @@ func TestBackendRestartNodeConcurrently(t *testing.T) {
require.NoError(t, backend.StopNode()) require.NoError(t, backend.StopNode())
} }
}() }()
defer func() {
err := stopWallet()
if err != nil {
require.NoError(t, backend.StopNode())
}
}()
require.NoError(t, err) require.NoError(t, err)
config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID) config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID)
@ -200,7 +212,7 @@ func TestBackendRestartNodeConcurrently(t *testing.T) {
func TestBackendGettersConcurrently(t *testing.T) { func TestBackendGettersConcurrently(t *testing.T) {
utils.Init() utils.Init()
backend, stop1, stop2, err := setupGethStatusBackend() backend, stop1, stop2, stopWallet, err := setupGethStatusBackend()
defer func() { defer func() {
err := stop1() err := stop1()
if err != nil { if err != nil {
@ -213,6 +225,12 @@ func TestBackendGettersConcurrently(t *testing.T) {
require.NoError(t, backend.StopNode()) require.NoError(t, backend.StopNode())
} }
}() }()
defer func() {
err := stopWallet()
if err != nil {
require.NoError(t, backend.StopNode())
}
}()
require.NoError(t, err) require.NoError(t, err)
config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID) config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID)
@ -299,7 +317,7 @@ func TestBackendConnectionChangesToOffline(t *testing.T) {
func TestBackendCallRPCConcurrently(t *testing.T) { func TestBackendCallRPCConcurrently(t *testing.T) {
utils.Init() utils.Init()
backend, stop1, stop2, err := setupGethStatusBackend() backend, stop1, stop2, stopWallet, err := setupGethStatusBackend()
defer func() { defer func() {
err := stop1() err := stop1()
if err != nil { if err != nil {
@ -312,6 +330,12 @@ func TestBackendCallRPCConcurrently(t *testing.T) {
require.NoError(t, backend.StopNode()) require.NoError(t, backend.StopNode())
} }
}() }()
defer func() {
err := stopWallet()
if err != nil {
require.NoError(t, backend.StopNode())
}
}()
require.NoError(t, err) require.NoError(t, err)
config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID) config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID)
@ -389,7 +413,7 @@ func TestAppStateChange(t *testing.T) {
func TestBlockedRPCMethods(t *testing.T) { func TestBlockedRPCMethods(t *testing.T) {
utils.Init() utils.Init()
backend, stop1, stop2, err := setupGethStatusBackend() backend, stop1, stop2, stopWallet, err := setupGethStatusBackend()
defer func() { defer func() {
err := stop1() err := stop1()
if err != nil { if err != nil {
@ -402,6 +426,12 @@ func TestBlockedRPCMethods(t *testing.T) {
require.NoError(t, backend.StopNode()) require.NoError(t, backend.StopNode())
} }
}() }()
defer func() {
err := stopWallet()
if err != nil {
require.NoError(t, backend.StopNode())
}
}()
require.NoError(t, err) require.NoError(t, err)
config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID) config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID)
@ -443,7 +473,7 @@ func TestCallRPCWithStoppedNode(t *testing.T) {
func TestStartStopMultipleTimes(t *testing.T) { func TestStartStopMultipleTimes(t *testing.T) {
utils.Init() utils.Init()
backend, stop1, stop2, err := setupGethStatusBackend() backend, stop1, stop2, stopWallet, err := setupGethStatusBackend()
defer func() { defer func() {
err := stop1() err := stop1()
if err != nil { if err != nil {
@ -456,6 +486,12 @@ func TestStartStopMultipleTimes(t *testing.T) {
require.NoError(t, backend.StopNode()) require.NoError(t, backend.StopNode())
} }
}() }()
defer func() {
err := stopWallet()
if err != nil {
require.NoError(t, backend.StopNode())
}
}()
require.NoError(t, err) require.NoError(t, err)
config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID) config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID)
@ -476,7 +512,7 @@ func TestStartStopMultipleTimes(t *testing.T) {
func TestHashTypedData(t *testing.T) { func TestHashTypedData(t *testing.T) {
utils.Init() utils.Init()
backend, stop1, stop2, err := setupGethStatusBackend() backend, stop1, stop2, stopWallet, err := setupGethStatusBackend()
defer func() { defer func() {
err := stop1() err := stop1()
if err != nil { if err != nil {
@ -489,6 +525,12 @@ func TestHashTypedData(t *testing.T) {
require.NoError(t, backend.StopNode()) require.NoError(t, backend.StopNode())
} }
}() }()
defer func() {
err := stopWallet()
if err != nil {
require.NoError(t, backend.StopNode())
}
}()
require.NoError(t, err) require.NoError(t, err)
config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID) config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID)
@ -854,7 +896,7 @@ func TestConvertAccount(t *testing.T) {
utils.Init() utils.Init()
backend, stop1, stop2, err := setupGethStatusBackend() backend, stop1, stop2, stopWallet, err := setupGethStatusBackend()
defer func() { defer func() {
err := stop1() err := stop1()
if err != nil { if err != nil {
@ -867,6 +909,12 @@ func TestConvertAccount(t *testing.T) {
require.NoError(t, backend.StopNode()) require.NoError(t, backend.StopNode())
} }
}() }()
defer func() {
err := stopWallet()
if err != nil {
require.NoError(t, backend.StopNode())
}
}()
require.NoError(t, err) require.NoError(t, err)
backend.rootDataDir = rootDataDir backend.rootDataDir = rootDataDir

View File

@ -16,7 +16,7 @@ import (
func TestHashMessage(t *testing.T) { func TestHashMessage(t *testing.T) {
utils.Init() utils.Init()
backend, stop1, stop2, err := setupGethStatusBackend() backend, stop1, stop2, stopWallet, err := setupGethStatusBackend()
defer func() { defer func() {
err := stop1() err := stop1()
if err != nil { if err != nil {
@ -29,6 +29,12 @@ func TestHashMessage(t *testing.T) {
require.NoError(t, backend.StopNode()) require.NoError(t, backend.StopNode())
} }
}() }()
defer func() {
err := stopWallet()
if err != nil {
require.NoError(t, backend.StopNode())
}
}()
require.NoError(t, err) require.NoError(t, err)
config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID) config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID)

View File

@ -20,11 +20,12 @@ import (
"github.com/status-im/status-go/services/wallet/bigint" "github.com/status-im/status-go/services/wallet/bigint"
w_common "github.com/status-im/status-go/services/wallet/common" w_common "github.com/status-im/status-go/services/wallet/common"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/sqlite"
"github.com/status-im/status-go/t/helpers"
) )
func Test_GetDBFilename(t *testing.T) { func Test_GetDBFilename(t *testing.T) {
// Test with a temp file instance // Test with a temp file instance
db, stop, err := SetupTestSQLDB("test") db, stop, err := helpers.SetupTestSQLDB(DbInitializer{}, "test")
require.NoError(t, err) require.NoError(t, err)
defer func() { defer func() {
require.NoError(t, stop()) require.NoError(t, stop())
@ -35,7 +36,7 @@ func Test_GetDBFilename(t *testing.T) {
require.True(t, len(fn) > 0) require.True(t, len(fn) > 0)
// Test with in memory instance // Test with in memory instance
mdb, err := InitializeDB(":memory:", "test", sqlite.ReducedKDFIterationsNumber) mdb, err := helpers.SetupTestMemorySQLDB(DbInitializer{})
require.NoError(t, err) require.NoError(t, err)
defer func() { defer func() {
require.NoError(t, mdb.Close()) require.NoError(t, mdb.Close())
@ -115,11 +116,11 @@ func TestMigrateWalletJsonBlobs(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
// Validate that transfers table has no status column // Validate that transfers table has no status column
exists, err := ColumnExists(db, "transfers", "status") exists, err := helpers.ColumnExists(db, "transfers", "status")
require.NoError(t, err) require.NoError(t, err)
require.False(t, exists) require.False(t, exists)
exists, err = ColumnExists(db, "transfers", "status") exists, err = helpers.ColumnExists(db, "transfers", "status")
require.NoError(t, err) require.NoError(t, err)
require.False(t, exists) require.False(t, exists)
@ -196,7 +197,7 @@ func TestMigrateWalletJsonBlobs(t *testing.T) {
err = migrations.MigrateTo(db, failMigrationSteps, customSteps[1].Version) err = migrations.MigrateTo(db, failMigrationSteps, customSteps[1].Version)
require.Error(t, err) require.Error(t, err)
exists, err = ColumnExists(db, "transfers", "status") exists, err = helpers.ColumnExists(db, "transfers", "status")
require.NoError(t, err) require.NoError(t, err)
require.False(t, exists) require.False(t, exists)
@ -205,7 +206,7 @@ func TestMigrateWalletJsonBlobs(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
// Validate that the migration was run and transfers table has now status column // Validate that the migration was run and transfers table has now status column
exists, err = ColumnExists(db, "transfers", "status") exists, err = helpers.ColumnExists(db, "transfers", "status")
require.NoError(t, err) require.NoError(t, err)
require.True(t, exists) require.True(t, exists)
@ -214,7 +215,7 @@ func TestMigrateWalletJsonBlobs(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
// Validate that the migration was run and transfers table has now txFrom column // Validate that the migration was run and transfers table has now txFrom column
exists, err = ColumnExists(db, "transfers", "tx_from_address") exists, err = helpers.ColumnExists(db, "transfers", "tx_from_address")
require.NoError(t, err) require.NoError(t, err)
require.True(t, exists) require.True(t, exists)

View File

@ -4,10 +4,8 @@ import (
"crypto/rand" "crypto/rand"
"database/sql" "database/sql"
"fmt" "fmt"
"io/ioutil"
"math" "math"
"math/big" "math/big"
"os"
"sort" "sort"
"testing" "testing"
"time" "time"
@ -20,18 +18,13 @@ import (
"github.com/status-im/status-go/nodecfg" "github.com/status-im/status-go/nodecfg"
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
"github.com/status-im/status-go/protocol/pushnotificationserver" "github.com/status-im/status-go/protocol/pushnotificationserver"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
) )
func setupTestDB(t *testing.T) (*sql.DB, func()) { func setupTestDB(t *testing.T) (*sql.DB, func()) {
tmpfile, err := ioutil.TempFile("", "settings-tests-") db, cleanup, err := helpers.SetupTestSQLDB(DbInitializer{}, "settings-tests-")
require.NoError(t, err) require.NoError(t, err)
db, err := InitializeDB(tmpfile.Name(), "settings-tests", sqlite.ReducedKDFIterationsNumber) return db, func() { require.NoError(t, cleanup()) }
require.NoError(t, err)
return db, func() {
require.NoError(t, db.Close())
require.NoError(t, os.Remove(tmpfile.Name()))
}
} }
func TestGetNodeConfig(t *testing.T) { func TestGetNodeConfig(t *testing.T) {

View File

@ -3,27 +3,19 @@ package appmetrics
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io/ioutil"
"os"
"testing" "testing"
"time" "time"
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func setupTestDB(t *testing.T) (*Database, func()) { func setupTestDB(t *testing.T) (*Database, func()) {
tmpfile, err := ioutil.TempFile("", "appmetrics-tests-") db, cleanup, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "appmetrics-tests")
require.NoError(t, err) require.NoError(t, err)
db, err := appdatabase.InitializeDB(tmpfile.Name(), "appmetrics-tests", sqlite.ReducedKDFIterationsNumber) return NewDB(db), func() { require.NoError(t, cleanup()) }
require.NoError(t, err)
return NewDB(db), func() {
require.NoError(t, db.Close())
require.NoError(t, os.Remove(tmpfile.Name()))
}
} }
func TestSaveAppMetrics(t *testing.T) { func TestSaveAppMetrics(t *testing.T) {

View File

@ -32,6 +32,7 @@ import (
"github.com/status-im/status-go/profiling" "github.com/status-im/status-go/profiling"
"github.com/status-im/status-go/protocol" "github.com/status-im/status-go/protocol"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/sqlite"
"github.com/status-im/status-go/walletdatabase"
) )
const ( const (
@ -207,7 +208,13 @@ func main() {
return return
} }
db, err := appdatabase.InitializeDB(config.DataDir+"/"+installationID.String()+".db", "", sqlite.ReducedKDFIterationsNumber) walletDB, err := walletdatabase.InitializeDB(config.DataDir+"/"+installationID.String()+"-wallet.db", "", sqlite.ReducedKDFIterationsNumber)
if err != nil {
logger.Error("failed to initialize app db", "error", err)
return
}
appDB, err := appdatabase.InitializeDB(config.DataDir+"/"+installationID.String()+".db", "", sqlite.ReducedKDFIterationsNumber)
if err != nil { if err != nil {
logger.Error("failed to initialize app db", "error", err) logger.Error("failed to initialize app db", "error", err)
return return
@ -216,7 +223,8 @@ func main() {
options := []protocol.Option{ options := []protocol.Option{
protocol.WithPushNotifications(), protocol.WithPushNotifications(),
protocol.WithPushNotificationServerConfig(&config.PushNotificationServerConfig), protocol.WithPushNotificationServerConfig(&config.PushNotificationServerConfig),
protocol.WithDatabase(db), protocol.WithDatabase(appDB),
protocol.WithWalletDatabase(walletDB),
protocol.WithTorrentConfig(&config.TorrentConfig), protocol.WithTorrentConfig(&config.TorrentConfig),
protocol.WithWalletConfig(&config.WalletConfig), protocol.WithWalletConfig(&config.WalletConfig),
protocol.WithRPCClient(backend.StatusNode().RPCClient()), protocol.WithRPCClient(backend.StatusNode().RPCClient()),

View File

@ -12,24 +12,15 @@ import (
"github.com/status-im/status-go/multiaccounts/common" "github.com/status-im/status-go/multiaccounts/common"
"github.com/status-im/status-go/multiaccounts/settings" "github.com/status-im/status-go/multiaccounts/settings"
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
"github.com/status-im/status-go/t/helpers"
) )
func setupTestDB(t *testing.T) (*Database, func()) { func setupTestDB(t *testing.T) (*Database, func()) {
db, stop, err := appdatabase.SetupTestSQLDB("settings-tests-") db, stop, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "settings-tests-")
if err != nil {
require.NoError(t, stop())
}
require.NoError(t, err) require.NoError(t, err)
d, err := NewDB(db) d, err := NewDB(db)
if err != nil {
require.NoError(t, stop())
}
require.NoError(t, err) require.NoError(t, err)
return d, func() { require.NoError(t, stop()) }
return d, func() {
require.NoError(t, stop())
}
} }
func TestGetAddresses(t *testing.T) { func TestGetAddresses(t *testing.T) {

View File

@ -1,17 +1,13 @@
package accounts package accounts
import ( import (
"database/sql"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func MockTestAccounts(tb testing.TB, db *sql.DB, accounts []*Account) { func MockTestAccounts(tb testing.TB, d *Database, accounts []*Account) {
d, err := NewDB(db) err := d.SaveOrUpdateAccounts(accounts, false)
require.NoError(tb, err)
err = d.SaveOrUpdateAccounts(accounts, false)
require.NoError(tb, err) require.NoError(tb, err)
res, err := d.GetActiveAccounts() res, err := d.GetActiveAccounts()
require.NoError(tb, err) require.NoError(tb, err)

View File

@ -12,6 +12,7 @@ import (
"github.com/status-im/status-go/multiaccounts/errors" "github.com/status-im/status-go/multiaccounts/errors"
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/sqlite"
"github.com/status-im/status-go/t/helpers"
) )
var ( var (
@ -48,7 +49,7 @@ var (
) )
func setupTestDB(t *testing.T) (*Database, func()) { func setupTestDB(t *testing.T) (*Database, func()) {
db, stop, err := appdatabase.SetupTestSQLDB("settings-tests-") db, stop, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "settings-tests-")
if err != nil { if err != nil {
require.NoError(t, stop()) require.NoError(t, stop())
} }

View File

@ -7,10 +7,11 @@ import (
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/protocol/identity" "github.com/status-im/status-go/protocol/identity"
"github.com/status-im/status-go/t/helpers"
) )
func openTestDB(t *testing.T) (*SocialLinksSettings, func()) { func openTestDB(t *testing.T) (*SocialLinksSettings, func()) {
db, stop, err := appdatabase.SetupTestSQLDB("settings-social-links-tests-") db, stop, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "settings-social-links-tests-")
if err != nil { if err != nil {
require.NoError(t, stop()) require.NoError(t, stop())
} }

View File

@ -13,7 +13,7 @@ import (
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/multiaccounts" "github.com/status-im/status-go/multiaccounts"
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
) )
type TestServiceAPI struct{} type TestServiceAPI struct{}
@ -23,21 +23,7 @@ func (api *TestServiceAPI) SomeMethod(_ context.Context) (string, error) {
} }
func setupTestDB() (*sql.DB, func() error, error) { func setupTestDB() (*sql.DB, func() error, error) {
tmpfile, err := ioutil.TempFile("", "tests") return helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "tests")
if err != nil {
return nil, nil, err
}
db, err := appdatabase.InitializeDB(tmpfile.Name(), "tests", sqlite.ReducedKDFIterationsNumber)
if err != nil {
return nil, nil, err
}
return db, func() error {
err := db.Close()
if err != nil {
return err
}
return os.Remove(tmpfile.Name())
}, nil
} }
func setupTestMultiDB() (*multiaccounts.Database, func() error, error) { func setupTestMultiDB() (*multiaccounts.Database, func() error, error) {

View File

@ -46,6 +46,7 @@ import (
"github.com/status-im/status-go/services/wakuv2ext" "github.com/status-im/status-go/services/wakuv2ext"
"github.com/status-im/status-go/services/wallet" "github.com/status-im/status-go/services/wallet"
"github.com/status-im/status-go/services/wallet/thirdparty" "github.com/status-im/status-go/services/wallet/thirdparty"
"github.com/status-im/status-go/services/wallet/transfer"
"github.com/status-im/status-go/services/web3provider" "github.com/status-im/status-go/services/web3provider"
"github.com/status-im/status-go/timesource" "github.com/status-im/status-go/timesource"
"github.com/status-im/status-go/waku" "github.com/status-im/status-go/waku"
@ -512,7 +513,7 @@ func (b *StatusNode) walletService(accountsDB *accounts.Database, accountsFeed *
func (b *StatusNode) localNotificationsService(network uint64) (*localnotifications.Service, error) { func (b *StatusNode) localNotificationsService(network uint64) (*localnotifications.Service, error) {
var err error var err error
if b.localNotificationsSrvc == nil { if b.localNotificationsSrvc == nil {
b.localNotificationsSrvc, err = localnotifications.NewService(b.appDB, network) b.localNotificationsSrvc, err = localnotifications.NewService(b.appDB, transfer.NewDB(b.walletDB), network)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -5,7 +5,6 @@ import (
"context" "context"
"image" "image"
"image/png" "image/png"
"io/ioutil"
"math" "math"
"math/big" "math/big"
"os" "os"
@ -23,6 +22,7 @@ import (
"github.com/status-im/status-go/services/wallet/bigint" "github.com/status-im/status-go/services/wallet/bigint"
walletCommon "github.com/status-im/status-go/services/wallet/common" walletCommon "github.com/status-im/status-go/services/wallet/common"
"github.com/status-im/status-go/services/wallet/thirdparty" "github.com/status-im/status-go/services/wallet/thirdparty"
"github.com/status-im/status-go/t/helpers"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
_ "github.com/mutecomm/go-sqlcipher/v4" // require go-sqlcipher that overrides default implementation _ "github.com/mutecomm/go-sqlcipher/v4" // require go-sqlcipher that overrides default implementation
@ -44,9 +44,7 @@ type ManagerSuite struct {
} }
func (s *ManagerSuite) SetupTest() { func (s *ManagerSuite) SetupTest() {
dbPath, err := ioutil.TempFile("", "") db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
s.NoError(err, "creating temp file for db")
db, err := appdatabase.InitializeDB(dbPath.Name(), "", sqlite.ReducedKDFIterationsNumber)
s.NoError(err, "creating sqlite db instance") s.NoError(err, "creating sqlite db instance")
err = sqlite.Migrate(db) err = sqlite.Migrate(db)
s.NoError(err, "protocol migrate") s.NoError(err, "protocol migrate")
@ -138,7 +136,7 @@ func (m *testTokenManager) GetBalancesByChain(ctx context.Context, accounts, tok
} }
func (s *ManagerSuite) setupManagerForTokenPermissions() (*Manager, *testCollectiblesManager, *testTokenManager) { func (s *ManagerSuite) setupManagerForTokenPermissions() (*Manager, *testCollectiblesManager, *testTokenManager) {
db, err := appdatabase.InitializeDB(sqlite.InMemoryPath, "", sqlite.ReducedKDFIterationsNumber) db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
s.NoError(err, "creating sqlite db instance") s.NoError(err, "creating sqlite db instance")
err = sqlite.Migrate(db) err = sqlite.Migrate(db)
s.NoError(err, "protocol migrate") s.NoError(err, "protocol migrate")

View File

@ -3,7 +3,6 @@ package communities
import ( import (
"crypto/ecdsa" "crypto/ecdsa"
"database/sql" "database/sql"
"io/ioutil"
"math/big" "math/big"
"testing" "testing"
"time" "time"
@ -18,6 +17,7 @@ import (
"github.com/status-im/status-go/protocol/protobuf" "github.com/status-im/status-go/protocol/protobuf"
"github.com/status-im/status-go/protocol/sqlite" "github.com/status-im/status-go/protocol/sqlite"
"github.com/status-im/status-go/services/wallet/bigint" "github.com/status-im/status-go/services/wallet/bigint"
"github.com/status-im/status-go/t/helpers"
) )
func TestPersistenceSuite(t *testing.T) { func TestPersistenceSuite(t *testing.T) {
@ -33,10 +33,7 @@ type PersistenceSuite struct {
func (s *PersistenceSuite) SetupTest() { func (s *PersistenceSuite) SetupTest() {
s.db = nil s.db = nil
dbPath, err := ioutil.TempFile("", "") db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
s.NoError(err, "creating temp file for db")
db, err := appdatabase.InitializeDB(dbPath.Name(), "", sqlite.ReducedKDFIterationsNumber)
s.NoError(err, "creating sqlite db instance") s.NoError(err, "creating sqlite db instance")
err = sqlite.Migrate(db) err = sqlite.Migrate(db)

View File

@ -18,6 +18,7 @@ import (
"github.com/status-im/status-go/account" "github.com/status-im/status-go/account"
"github.com/status-im/status-go/account/generator" "github.com/status-im/status-go/account/generator"
"github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/eth-node/crypto" "github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/eth-node/types" "github.com/status-im/status-go/eth-node/types"
"github.com/status-im/status-go/multiaccounts" "github.com/status-im/status-go/multiaccounts"
@ -28,8 +29,9 @@ import (
"github.com/status-im/status-go/protocol/communities" "github.com/status-im/status-go/protocol/communities"
"github.com/status-im/status-go/protocol/protobuf" "github.com/status-im/status-go/protocol/protobuf"
"github.com/status-im/status-go/protocol/requests" "github.com/status-im/status-go/protocol/requests"
"github.com/status-im/status-go/protocol/sqlite"
"github.com/status-im/status-go/protocol/tt" "github.com/status-im/status-go/protocol/tt"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/walletdatabase"
) )
type AccountManagerMock struct { type AccountManagerMock struct {
@ -127,9 +129,20 @@ func newCommunitiesTestMessenger(shh types.Waku, privateKey *ecdsa.PrivateKey, l
acc := generator.NewAccount(privateKey, nil) acc := generator.NewAccount(privateKey, nil)
iai := acc.ToIdentifiedAccountInfo("") iai := acc.ToIdentifiedAccountInfo("")
walletDb, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
if err != nil {
return nil, err
}
appDb, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
if err != nil {
return nil, err
}
options := []Option{ options := []Option{
WithCustomLogger(logger), WithCustomLogger(logger),
WithDatabaseConfig(":memory:", "somekey", sqlite.ReducedKDFIterationsNumber), WithDatabase(appDb),
WithWalletDatabase(walletDb),
WithMultiAccounts(madb), WithMultiAccounts(madb),
WithAccount(iai.ToMultiAccount()), WithAccount(iai.ToMultiAccount()),
WithDatasync(), WithDatasync(),

View File

@ -11,15 +11,17 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
"github.com/status-im/status-go/account/generator" "github.com/status-im/status-go/account/generator"
"github.com/status-im/status-go/appdatabase"
gethbridge "github.com/status-im/status-go/eth-node/bridge/geth" gethbridge "github.com/status-im/status-go/eth-node/bridge/geth"
"github.com/status-im/status-go/eth-node/crypto" "github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/eth-node/types" "github.com/status-im/status-go/eth-node/types"
"github.com/status-im/status-go/multiaccounts" "github.com/status-im/status-go/multiaccounts"
"github.com/status-im/status-go/multiaccounts/settings" "github.com/status-im/status-go/multiaccounts/settings"
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
"github.com/status-im/status-go/protocol/sqlite"
"github.com/status-im/status-go/protocol/tt" "github.com/status-im/status-go/protocol/tt"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/waku" "github.com/status-im/status-go/waku"
"github.com/status-im/status-go/walletdatabase"
) )
const DefaultProfileDisplayName = "" const DefaultProfileDisplayName = ""
@ -80,9 +82,19 @@ func newMessengerWithKey(shh types.Waku, privateKey *ecdsa.PrivateKey, logger *z
acc := generator.NewAccount(privateKey, nil) acc := generator.NewAccount(privateKey, nil)
iai := acc.ToIdentifiedAccountInfo("") iai := acc.ToIdentifiedAccountInfo("")
walletDb, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
if err != nil {
return nil, err
}
appDb, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
if err != nil {
return nil, err
}
options := []Option{ options := []Option{
WithCustomLogger(logger), WithCustomLogger(logger),
WithDatabaseConfig(":memory:", "somekey", sqlite.ReducedKDFIterationsNumber), WithDatabase(appDb),
WithWalletDatabase(walletDb),
WithMultiAccounts(madb), WithMultiAccounts(madb),
WithAccount(iai.ToMultiAccount()), WithAccount(iai.ToMultiAccount()),
WithDatasync(), WithDatasync(),

View File

@ -137,7 +137,7 @@ func (s *MessengerSyncSavedAddressesSuite) TestSyncExistingSavedAddresses() {
IsTest: isTestChain2, IsTest: isTestChain2,
} }
savedAddressesManager := wallet.NewSavedAddressesManager(s.main.persistence.db) savedAddressesManager := s.main.savedAddressesManager
_, err := savedAddressesManager.UpdateMetadataAndUpsertSavedAddress(sa1) _, err := savedAddressesManager.UpdateMetadataAndUpsertSavedAddress(sa1)
s.Require().NoError(err) s.Require().NoError(err)

View File

@ -4,23 +4,24 @@ import (
"crypto/ecdsa" "crypto/ecdsa"
"encoding/json" "encoding/json"
"errors" "errors"
"io/ioutil"
"testing" "testing"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/stretchr/testify/suite" "github.com/stretchr/testify/suite"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/status-im/status-go/appdatabase"
gethbridge "github.com/status-im/status-go/eth-node/bridge/geth" gethbridge "github.com/status-im/status-go/eth-node/bridge/geth"
"github.com/status-im/status-go/eth-node/crypto" "github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/eth-node/types" "github.com/status-im/status-go/eth-node/types"
"github.com/status-im/status-go/multiaccounts/settings" "github.com/status-im/status-go/multiaccounts/settings"
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
"github.com/status-im/status-go/protocol/encryption/multidevice" "github.com/status-im/status-go/protocol/encryption/multidevice"
"github.com/status-im/status-go/protocol/sqlite"
"github.com/status-im/status-go/protocol/tt" "github.com/status-im/status-go/protocol/tt"
"github.com/status-im/status-go/services/stickers" "github.com/status-im/status-go/services/stickers"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/waku" "github.com/status-im/status-go/waku"
"github.com/status-im/status-go/walletdatabase"
) )
var ( var (
@ -162,12 +163,16 @@ func (s *MessengerSyncSettingsSuite) newMessengerWithOptions(shh types.Waku, pri
} }
func (s *MessengerSyncSettingsSuite) newMessengerWithKey(shh types.Waku, privateKey *ecdsa.PrivateKey) *Messenger { func (s *MessengerSyncSettingsSuite) newMessengerWithKey(shh types.Waku, privateKey *ecdsa.PrivateKey) *Messenger {
tmpFile, err := ioutil.TempFile("", "") walletDb, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
s.Require().NoError(err)
appDb, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
s.Require().NoError(err) s.Require().NoError(err)
options := []Option{ options := []Option{
WithCustomLogger(s.logger), WithCustomLogger(s.logger),
WithDatabaseConfig(tmpFile.Name(), "", sqlite.ReducedKDFIterationsNumber), WithDatabase(appDb),
WithWalletDatabase(walletDb),
WithDatasync(), WithDatasync(),
} }
return s.newMessengerWithOptions(shh, privateKey, options) return s.newMessengerWithOptions(shh, privateKey, options)

View File

@ -4,30 +4,23 @@ import (
"context" "context"
"database/sql" "database/sql"
"fmt" "fmt"
"io/ioutil"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"os"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
gethrpc "github.com/ethereum/go-ethereum/rpc" gethrpc "github.com/ethereum/go-ethereum/rpc"
) )
func setupTestNetworkDB(t *testing.T) (*sql.DB, func()) { func setupTestNetworkDB(t *testing.T) (*sql.DB, func()) {
tmpfile, err := ioutil.TempFile("", "rpc-network-tests-") db, cleanup, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "rpc-network-tests")
require.NoError(t, err) require.NoError(t, err)
db, err := appdatabase.InitializeDB(tmpfile.Name(), "rpc-network-tests", sqlite.ReducedKDFIterationsNumber) return db, func() { require.NoError(t, cleanup()) }
require.NoError(t, err)
return db, func() {
require.NoError(t, db.Close())
require.NoError(t, os.Remove(tmpfile.Name()))
}
} }
func TestBlockedRoutesCall(t *testing.T) { func TestBlockedRoutesCall(t *testing.T) {

View File

@ -2,15 +2,13 @@ package network
import ( import (
"database/sql" "database/sql"
"io/ioutil"
"os"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
) )
var initNetworks = []params.Network{ var initNetworks = []params.Network{
@ -59,14 +57,9 @@ var initNetworks = []params.Network{
} }
func setupTestNetworkDB(t *testing.T) (*sql.DB, func()) { func setupTestNetworkDB(t *testing.T) (*sql.DB, func()) {
tmpfile, err := ioutil.TempFile("", "wallet-network-tests-") db, cleanup, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "wallet-network-tests")
require.NoError(t, err) require.NoError(t, err)
db, err := appdatabase.InitializeDB(tmpfile.Name(), "wallet-network-tests", sqlite.ReducedKDFIterationsNumber) return db, func() { require.NoError(t, cleanup()) }
require.NoError(t, err)
return db, func() {
require.NoError(t, db.Close())
require.NoError(t, os.Remove(tmpfile.Name()))
}
} }
func TestInitNetwork(t *testing.T) { func TestInitNetwork(t *testing.T) {

View File

@ -3,26 +3,19 @@ package appmetrics
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"io/ioutil"
"os"
"testing" "testing"
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/appmetrics" "github.com/status-im/status-go/appmetrics"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func setupTestDB(t *testing.T) (*appmetrics.Database, func()) { func setupTestDB(t *testing.T) (*appmetrics.Database, func()) {
tmpfile, err := ioutil.TempFile("", "appmetrics-service") db, cleanup, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "appmetrics-service")
require.NoError(t, err) require.NoError(t, err)
db, err := appdatabase.InitializeDB(tmpfile.Name(), "appmetrics-tests", sqlite.ReducedKDFIterationsNumber) return appmetrics.NewDB(db), func() { require.NoError(t, cleanup()) }
require.NoError(t, err)
return appmetrics.NewDB(db), func() {
require.NoError(t, db.Close())
require.NoError(t, os.Remove(tmpfile.Name()))
}
} }
func TestValidateAppMetrics(t *testing.T) { func TestValidateAppMetrics(t *testing.T) {

View File

@ -2,25 +2,18 @@ package browsers
import ( import (
"context" "context"
"io/ioutil"
"os"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
) )
func setupTestDB(t *testing.T) (*Database, func()) { func setupTestDB(t *testing.T) (*Database, func()) {
tmpfile, err := ioutil.TempFile("", "browsers-tests-") db, cleanup, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "browsers-tests")
require.NoError(t, err) require.NoError(t, err)
db, err := appdatabase.InitializeDB(tmpfile.Name(), "browsers-tests", sqlite.ReducedKDFIterationsNumber) return NewDB(db), func() { require.NoError(t, cleanup()) }
require.NoError(t, err)
return NewDB(db), func() {
require.NoError(t, db.Close())
require.NoError(t, os.Remove(tmpfile.Name()))
}
} }
func setupTestAPI(t *testing.T) (*API, func()) { func setupTestAPI(t *testing.T) (*API, func()) {

View File

@ -2,17 +2,17 @@ package collectibles
import ( import (
"database/sql" "database/sql"
"io/ioutil"
"math/big" "math/big"
"testing" "testing"
"github.com/stretchr/testify/suite" "github.com/stretchr/testify/suite"
"github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/protocol/communities/token" "github.com/status-im/status-go/protocol/communities/token"
"github.com/status-im/status-go/protocol/protobuf" "github.com/status-im/status-go/protocol/protobuf"
"github.com/status-im/status-go/protocol/sqlite" "github.com/status-im/status-go/protocol/sqlite"
"github.com/status-im/status-go/services/wallet/bigint" "github.com/status-im/status-go/services/wallet/bigint"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/walletdatabase"
) )
func TestDatabaseSuite(t *testing.T) { func TestDatabaseSuite(t *testing.T) {
@ -82,10 +82,7 @@ func (s *DatabaseSuite) setupDatabase(db *sql.DB) error {
func (s *DatabaseSuite) SetupTest() { func (s *DatabaseSuite) SetupTest() {
s.db = nil s.db = nil
dbPath, err := ioutil.TempFile("", "status-go-community-tokens-db-") db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
s.NoError(err, "creating temp file for db")
db, err := appdatabase.InitializeDB(dbPath.Name(), "", sqlite.ReducedKDFIterationsNumber)
s.NoError(err, "creating sqlite db instance") s.NoError(err, "creating sqlite db instance")
err = sqlite.Migrate(db) err = sqlite.Migrate(db)

View File

@ -3,8 +3,6 @@ package ens
import ( import (
"context" "context"
"database/sql" "database/sql"
"io/ioutil"
"os"
"testing" "testing"
"time" "time"
@ -16,20 +14,15 @@ import (
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
statusRPC "github.com/status-im/status-go/rpc" statusRPC "github.com/status-im/status-go/rpc"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/t/utils" "github.com/status-im/status-go/t/utils"
"github.com/status-im/status-go/transactions/fake" "github.com/status-im/status-go/transactions/fake"
) )
func createDB(t *testing.T) (*sql.DB, func()) { func createDB(t *testing.T) (*sql.DB, func()) {
tmpfile, err := ioutil.TempFile("", "service-ens-tests-") db, cleanup, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "service-ens-tests-")
require.NoError(t, err) require.NoError(t, err)
db, err := appdatabase.InitializeDB(tmpfile.Name(), "service-ens-tests", sqlite.ReducedKDFIterationsNumber) return db, func() { require.NoError(t, cleanup()) }
require.NoError(t, err)
return db, func() {
require.NoError(t, db.Close())
require.NoError(t, os.Remove(tmpfile.Name()))
}
} }
func setupTestAPI(t *testing.T) (*API, func()) { func setupTestAPI(t *testing.T) (*API, func()) {

View File

@ -3,25 +3,19 @@ package gif
import ( import (
"database/sql" "database/sql"
"encoding/json" "encoding/json"
"io/ioutil"
"os"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/multiaccounts/accounts" "github.com/status-im/status-go/multiaccounts/accounts"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
) )
func setupSQLTestDb(t *testing.T) (*sql.DB, func()) { func setupSQLTestDb(t *testing.T) (*sql.DB, func()) {
tmpfile, err := ioutil.TempFile("", "local-notifications-tests-") db, cleanup, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "local-notifications-tests-")
require.NoError(t, err) require.NoError(t, err)
db, err := appdatabase.InitializeDB(tmpfile.Name(), "local-notifications-tests", sqlite.ReducedKDFIterationsNumber) return db, func() { require.NoError(t, cleanup()) }
require.NoError(t, err)
return db, func() {
require.NoError(t, os.Remove(tmpfile.Name()))
}
} }
func setupTestDB(t *testing.T, db *sql.DB) (*accounts.Database, func()) { func setupTestDB(t *testing.T, db *sql.DB) (*accounts.Database, func()) {

View File

@ -95,9 +95,8 @@ type Service struct {
accountsDB *accounts.Database accountsDB *accounts.Database
} }
func NewService(appDB *sql.DB, chainID uint64) (*Service, error) { func NewService(appDB *sql.DB, walletDB *transfer.Database, chainID uint64) (*Service, error) {
db := NewDB(appDB, chainID) db := NewDB(appDB, chainID)
walletDB := transfer.NewDB(appDB)
accountsDB, err := accounts.NewDB(appDB) accountsDB, err := accounts.NewDB(appDB)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -1,7 +1,6 @@
package localnotifications package localnotifications
import ( import (
"database/sql"
"fmt" "fmt"
"math/big" "math/big"
"strings" "strings"
@ -14,16 +13,20 @@ import (
"github.com/status-im/status-go/services/wallet/transfer" "github.com/status-im/status-go/services/wallet/transfer"
"github.com/status-im/status-go/services/wallet/walletevent" "github.com/status-im/status-go/services/wallet/walletevent"
"github.com/status-im/status-go/signal" "github.com/status-im/status-go/signal"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/t/utils" "github.com/status-im/status-go/t/utils"
"github.com/status-im/status-go/walletdatabase"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/event"
) )
func createWalletDb(t *testing.T, db *sql.DB) (*transfer.Database, func()) { func createWalletDb(t *testing.T) (*transfer.Database, func()) {
db, cleanup, err := helpers.SetupTestSQLDB(walletdatabase.DbInitializer{}, "local-notifications-tests-wallet-")
require.NoError(t, err)
return transfer.NewDB(db), func() { return transfer.NewDB(db), func() {
require.NoError(t, db.Close()) require.NoError(t, cleanup())
} }
} }
@ -31,7 +34,10 @@ func TestServiceStartStop(t *testing.T) {
db, stop := setupAppTestDb(t) db, stop := setupAppTestDb(t)
defer stop() defer stop()
s, err := NewService(db, 1777) walletDb, walletStop := createWalletDb(t)
defer walletStop()
s, err := NewService(db, walletDb, 1777)
require.NoError(t, err) require.NoError(t, err)
require.NoError(t, s.Start()) require.NoError(t, s.Start())
require.Equal(t, true, s.IsStarted()) require.Equal(t, true, s.IsStarted())
@ -44,8 +50,11 @@ func TestWalletSubscription(t *testing.T) {
db, stop := setupAppTestDb(t) db, stop := setupAppTestDb(t)
defer stop() defer stop()
walletDb, walletStop := createWalletDb(t)
defer walletStop()
feed := &event.Feed{} feed := &event.Feed{}
s, err := NewService(db, 1777) s, err := NewService(db, walletDb, 1777)
require.NoError(t, err) require.NoError(t, err)
require.NoError(t, s.Start()) require.NoError(t, s.Start())
require.Equal(t, true, s.IsStarted()) require.Equal(t, true, s.IsStarted())
@ -67,10 +76,10 @@ func TestTransactionNotification(t *testing.T) {
db, stop := setupAppTestDb(t) db, stop := setupAppTestDb(t)
defer stop() defer stop()
walletDb, stop := createWalletDb(t, db) walletDb, walletStop := createWalletDb(t)
defer stop() defer walletStop()
s, err := NewService(db, 1777) s, err := NewService(db, walletDb, 1777)
require.NoError(t, err) require.NoError(t, err)
require.NoError(t, s.Start()) require.NoError(t, s.Start())
require.Equal(t, true, s.IsStarted()) require.Equal(t, true, s.IsStarted())

View File

@ -2,24 +2,18 @@ package localnotifications
import ( import (
"database/sql" "database/sql"
"io/ioutil"
"os"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
) )
func setupAppTestDb(t *testing.T) (*sql.DB, func()) { func setupAppTestDb(t *testing.T) (*sql.DB, func()) {
tmpfile, err := ioutil.TempFile("", "local-notifications-tests-") db, cleanup, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "local-notifications-tests-")
require.NoError(t, err) require.NoError(t, err)
db, err := appdatabase.InitializeDB(tmpfile.Name(), "local-notifications-tests", sqlite.ReducedKDFIterationsNumber) return db, func() { require.NoError(t, cleanup()) }
require.NoError(t, err)
return db, func() {
require.NoError(t, os.Remove(tmpfile.Name()))
}
} }
func setupTestDB(t *testing.T, db *sql.DB) (*Database, func()) { func setupTestDB(t *testing.T, db *sql.DB) (*Database, func()) {

View File

@ -2,8 +2,6 @@ package mailservers
import ( import (
"context" "context"
"io/ioutil"
"os"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -11,18 +9,13 @@ import (
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/eth-node/types" "github.com/status-im/status-go/eth-node/types"
"github.com/status-im/status-go/protocol/transport" "github.com/status-im/status-go/protocol/transport"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
) )
func setupTestDB(t *testing.T) (*Database, func()) { func setupTestDB(t *testing.T) (*Database, func()) {
tmpfile, err := ioutil.TempFile("", "mailservers-service") db, cleanup, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "maliservers-tests-")
require.NoError(t, err) require.NoError(t, err)
db, err := appdatabase.InitializeDB(tmpfile.Name(), "mailservers-tests", sqlite.ReducedKDFIterationsNumber) return NewDB(db), func() { require.NoError(t, cleanup()) }
require.NoError(t, err)
return NewDB(db), func() {
require.NoError(t, db.Close())
require.NoError(t, os.Remove(tmpfile.Name()))
}
} }
func TestAddGetDeleteMailserver(t *testing.T) { func TestAddGetDeleteMailserver(t *testing.T) {

View File

@ -4,26 +4,19 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io/ioutil"
"os"
"sort" "sort"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
) )
func setupTestDB(t *testing.T) (*Database, func()) { func setupTestDB(t *testing.T) (*Database, func()) {
tmpfile, err := ioutil.TempFile("", "perm-tests-") db, cleanup, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "perm-tests-")
require.NoError(t, err) require.NoError(t, err)
db, err := appdatabase.InitializeDB(tmpfile.Name(), "perm-tests", sqlite.ReducedKDFIterationsNumber) return NewDB(db), func() { require.NoError(t, cleanup()) }
require.NoError(t, err)
return NewDB(db), func() {
require.NoError(t, db.Close())
require.NoError(t, os.Remove(tmpfile.Name()))
}
} }
func setupTestAPI(t *testing.T) (*API, func()) { func setupTestAPI(t *testing.T) (*API, func()) {

View File

@ -26,9 +26,9 @@ import (
"github.com/status-im/status-go/multiaccounts" "github.com/status-im/status-go/multiaccounts"
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
"github.com/status-im/status-go/services/ext" "github.com/status-im/status-go/services/ext"
"github.com/status-im/status-go/sqlite"
"github.com/status-im/status-go/t/helpers" "github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/waku" "github.com/status-im/status-go/waku"
"github.com/status-im/status-go/walletdatabase"
) )
func TestRequestMessagesErrors(t *testing.T) { func TestRequestMessagesErrors(t *testing.T) {
@ -121,9 +121,8 @@ func TestInitProtocol(t *testing.T) {
nodeWrapper := ext.NewTestNodeWrapper(nil, waku) nodeWrapper := ext.NewTestNodeWrapper(nil, waku)
service := New(config, nodeWrapper, nil, nil, db) service := New(config, nodeWrapper, nil, nil, db)
tmpdir := t.TempDir() appDB, cleanupDB, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "db.sql")
defer func() { require.NoError(t, cleanupDB()) }()
sqlDB, err := appdatabase.InitializeDB(fmt.Sprintf("%s/db.sql", tmpdir), "password", sqlite.ReducedKDFIterationsNumber)
require.NoError(t, err) require.NoError(t, err)
tmpfile, err := ioutil.TempFile("", "multi-accounts-tests-") tmpfile, err := ioutil.TempFile("", "multi-accounts-tests-")
@ -133,7 +132,11 @@ func TestInitProtocol(t *testing.T) {
acc := &multiaccounts.Account{KeyUID: "0xdeadbeef"} acc := &multiaccounts.Account{KeyUID: "0xdeadbeef"}
err = service.InitProtocol("Test", privateKey, sqlDB, nil, multiAccounts, acc, nil, nil, nil, nil, zap.NewNop()) walletDB, cleanupWalletDB, err := helpers.SetupTestSQLDB(walletdatabase.DbInitializer{}, "db-wallet.sql")
defer func() { require.NoError(t, cleanupWalletDB()) }()
require.NoError(t, err)
err = service.InitProtocol("Test", privateKey, appDB, walletDB, nil, multiAccounts, acc, nil, nil, nil, nil, zap.NewNop())
require.NoError(t, err) require.NoError(t, err)
} }
@ -185,11 +188,14 @@ func (s *ShhExtSuite) createAndAddNode() {
s.Require().NoError(err) s.Require().NoError(err)
nodeWrapper := ext.NewTestNodeWrapper(nil, gethbridge.NewGethWakuWrapper(w)) nodeWrapper := ext.NewTestNodeWrapper(nil, gethbridge.NewGethWakuWrapper(w))
service := New(config, nodeWrapper, nil, nil, db) service := New(config, nodeWrapper, nil, nil, db)
sqlDB, err := appdatabase.InitializeDB(fmt.Sprintf("%s/%d", s.dir, idx), "password", sqlite.ReducedKDFIterationsNumber)
appDB, cleanupDB, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, fmt.Sprintf("%d", idx))
s.Require().NoError(err) s.Require().NoError(err)
defer func() { s.Require().NoError(cleanupDB()) }()
tmpfile, err := ioutil.TempFile("", "multi-accounts-tests-") tmpfile, err := ioutil.TempFile("", "multi-accounts-tests-")
s.Require().NoError(err) s.Require().NoError(err)
multiAccounts, err := multiaccounts.InitializeDB(tmpfile.Name()) multiAccounts, err := multiaccounts.InitializeDB(tmpfile.Name())
s.Require().NoError(err) s.Require().NoError(err)
@ -198,7 +204,10 @@ func (s *ShhExtSuite) createAndAddNode() {
acc := &multiaccounts.Account{KeyUID: "0xdeadbeef"} acc := &multiaccounts.Account{KeyUID: "0xdeadbeef"}
err = service.InitProtocol("Test", privateKey, sqlDB, nil, multiAccounts, acc, nil, nil, nil, nil, zap.NewNop()) walletDB, err := helpers.SetupTestMemorySQLDB(&walletdatabase.DbInitializer{})
s.Require().NoError(err)
err = service.InitProtocol("Test", privateKey, appDB, walletDB, nil, multiAccounts, acc, nil, nil, nil, nil, zap.NewNop())
s.NoError(err) s.NoError(err)
stack.RegisterLifecycle(service) stack.RegisterLifecycle(service)

View File

@ -12,6 +12,8 @@ import (
"github.com/status-im/status-go/services/wallet/common" "github.com/status-im/status-go/services/wallet/common"
"github.com/status-im/status-go/services/wallet/testutils" "github.com/status-im/status-go/services/wallet/testutils"
"github.com/status-im/status-go/services/wallet/transfer" "github.com/status-im/status-go/services/wallet/transfer"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/walletdatabase"
eth "github.com/ethereum/go-ethereum/common" eth "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
@ -37,17 +39,28 @@ func tokenFromSymbol(chainID *common.ChainID, symbol string) *Token {
} }
func setupTestActivityDBStorageChoice(tb testing.TB, inMemory bool) (deps FilterDependencies, close func()) { func setupTestActivityDBStorageChoice(tb testing.TB, inMemory bool) (deps FilterDependencies, close func()) {
var db *sql.DB var db, appDb *sql.DB
var err error var err error
cleanupDB := func() error { return nil } cleanupDB := func() error { return nil }
cleanupWalletDB := func() error { return nil }
if inMemory { if inMemory {
db, err = appdatabase.SetupTestMemorySQLDB("wallet-activity-tests") db, err = helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
} else {
db, cleanupDB, err = appdatabase.SetupTestSQLDB("wallet-activity-tests")
}
require.NoError(tb, err) require.NoError(tb, err)
appDb, err = helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
require.NoError(tb, err)
} else {
db, cleanupWalletDB, err = helpers.SetupTestSQLDB(walletdatabase.DbInitializer{}, "wallet-activity-tests")
require.NoError(tb, err)
appDb, cleanupDB, err = helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "wallet-activity-tests")
require.NoError(tb, err)
}
accountsDb, err := accounts.NewDB(appDb)
require.NoError(tb, err)
deps = FilterDependencies{ deps = FilterDependencies{
db: db, db: db,
accountsDb: accountsDb,
tokenSymbol: func(token Token) string { tokenSymbol: func(token Token) string {
switch token.TokenType { switch token.TokenType {
case Native: case Native:
@ -71,8 +84,8 @@ func setupTestActivityDBStorageChoice(tb testing.TB, inMemory bool) (deps Filter
} }
return deps, func() { return deps, func() {
require.NoError(tb, db.Close())
require.NoError(tb, cleanupDB()) require.NoError(tb, cleanupDB())
require.NoError(tb, cleanupWalletDB())
} }
} }
@ -98,7 +111,7 @@ type testData struct {
nextIndex int nextIndex int
} }
func mockTestAccountsWithAddresses(tb testing.TB, db *sql.DB, addresses []eth.Address) { func mockTestAccountsWithAddresses(tb testing.TB, db *accounts.Database, addresses []eth.Address) {
mockedAccounts := []*accounts.Account{} mockedAccounts := []*accounts.Account{}
for _, address := range addresses { for _, address := range addresses {
mockedAccounts = append(mockedAccounts, &accounts.Account{ mockedAccounts = append(mockedAccounts, &accounts.Account{
@ -273,7 +286,7 @@ func TestGetActivityEntriesWithSameTransactionForSenderAndReceiverInDB(t *testin
// Add 4 extractable transactions with timestamps 1-4 // Add 4 extractable transactions with timestamps 1-4
td, fromAddresses, toAddresses := fillTestData(t, deps.db) td, fromAddresses, toAddresses := fillTestData(t, deps.db)
mockTestAccountsWithAddresses(t, deps.db, append(fromAddresses, toAddresses...)) mockTestAccountsWithAddresses(t, deps.accountsDb, append(fromAddresses, toAddresses...))
// Add another transaction with sender and receiver reversed // Add another transaction with sender and receiver reversed
receiverTr := td.tr1 receiverTr := td.tr1
@ -322,7 +335,7 @@ func TestGetActivityEntriesFilterByTime(t *testing.T) {
transfer.InsertTestTransfer(t, deps.db, trs[i].To, &trs[i]) transfer.InsertTestTransfer(t, deps.db, trs[i].To, &trs[i])
} }
mockTestAccountsWithAddresses(t, deps.db, append(append(append(fromTds, toTds...), fromTrs...), toTrs...)) mockTestAccountsWithAddresses(t, deps.accountsDb, append(append(append(fromTds, toTds...), fromTrs...), toTrs...))
// Test start only // Test start only
var filter Filter var filter Filter
@ -462,7 +475,7 @@ func TestGetActivityEntriesCheckOffsetAndLimit(t *testing.T) {
transfer.InsertTestTransfer(t, deps.db, trs[i].To, &trs[i]) transfer.InsertTestTransfer(t, deps.db, trs[i].To, &trs[i])
} }
mockTestAccountsWithAddresses(t, deps.db, append(fromTrs, toTrs...)) mockTestAccountsWithAddresses(t, deps.accountsDb, append(fromTrs, toTrs...))
var filter Filter var filter Filter
// Get all // Get all
@ -664,7 +677,7 @@ func TestGetActivityEntriesFilterByAddresses(t *testing.T) {
transfer.InsertTestTransfer(t, deps.db, trs[i].To, &trs[i]) transfer.InsertTestTransfer(t, deps.db, trs[i].To, &trs[i])
} }
mockTestAccountsWithAddresses(t, deps.db, append(append(append(fromTds, toTds...), fromTrs...), toTrs...)) mockTestAccountsWithAddresses(t, deps.accountsDb, append(append(append(fromTds, toTds...), fromTrs...), toTrs...))
var filter Filter var filter Filter
@ -749,7 +762,7 @@ func TestGetActivityEntriesFilterByStatus(t *testing.T) {
} }
} }
mockTestAccountsWithAddresses(t, deps.db, append(append(append(fromTds, toTds...), fromTrs...), toTrs...)) mockTestAccountsWithAddresses(t, deps.accountsDb, append(append(append(fromTds, toTds...), fromTrs...), toTrs...))
var filter Filter var filter Filter
filter.Statuses = allActivityStatusesFilter() filter.Statuses = allActivityStatusesFilter()
@ -804,7 +817,7 @@ func TestGetActivityEntriesFilterByTokenType(t *testing.T) {
}) })
} }
mockTestAccountsWithAddresses(t, deps.db, append(append(append(fromTds, toTds...), fromTrs...), toTrs...)) mockTestAccountsWithAddresses(t, deps.accountsDb, append(append(append(fromTds, toTds...), fromTrs...), toTrs...))
var filter Filter var filter Filter
filter.FilterOutAssets = true filter.FilterOutAssets = true
@ -882,7 +895,7 @@ func TestGetActivityEntriesFilterByToAddresses(t *testing.T) {
transfer.InsertTestTransfer(t, deps.db, trs[i].To, &trs[i]) transfer.InsertTestTransfer(t, deps.db, trs[i].To, &trs[i])
} }
mockTestAccountsWithAddresses(t, deps.db, append(append(append(fromTds, toTds...), fromTrs...), toTrs...)) mockTestAccountsWithAddresses(t, deps.accountsDb, append(append(append(fromTds, toTds...), fromTrs...), toTrs...))
var filter Filter var filter Filter
filter.CounterpartyAddresses = allAddressesFilter() filter.CounterpartyAddresses = allAddressesFilter()
@ -946,7 +959,7 @@ func TestGetActivityEntriesFilterByNetworks(t *testing.T) {
recordPresence(trs[i].ChainID, 4+i) recordPresence(trs[i].ChainID, 4+i)
transfer.InsertTestTransfer(t, deps.db, trs[i].To, &trs[i]) transfer.InsertTestTransfer(t, deps.db, trs[i].To, &trs[i])
} }
mockTestAccountsWithAddresses(t, deps.db, append(append(append(fromTds, toTds...), fromTrs...), toTrs...)) mockTestAccountsWithAddresses(t, deps.accountsDb, append(append(append(fromTds, toTds...), fromTrs...), toTrs...))
var filter Filter var filter Filter
chainIDs := allNetworksFilter() chainIDs := allNetworksFilter()
@ -1094,7 +1107,7 @@ func TestGetActivityEntriesNullAddresses(t *testing.T) {
trs[3].To = eth.Address{} trs[3].To = eth.Address{}
transfer.InsertTestPendingTransaction(t, deps.db, &trs[3]) transfer.InsertTestPendingTransaction(t, deps.db, &trs[3])
mockTestAccountsWithAddresses(t, deps.db, []eth.Address{trs[0].From, trs[1].From, trs[2].From, trs[3].From}) mockTestAccountsWithAddresses(t, deps.accountsDb, []eth.Address{trs[0].From, trs[1].From, trs[2].From, trs[3].From})
activities, err := getActivityEntries(context.Background(), deps, allAddressesFilter(), allNetworksFilter(), Filter{}, 0, 10) activities, err := getActivityEntries(context.Background(), deps, allAddressesFilter(), allNetworksFilter(), Filter{}, 0, 10)
require.NoError(t, err) require.NoError(t, err)
@ -1163,7 +1176,7 @@ func setupBenchmark(b *testing.B, inMemory bool, resultCount int) (deps FilterDe
transfer.InsertTestPendingTransaction(b, deps.db, &trs[i]) transfer.InsertTestPendingTransaction(b, deps.db, &trs[i])
} }
mockTestAccountsWithAddresses(b, deps.db, accounts) mockTestAccountsWithAddresses(b, deps.accountsDb, accounts)
return return
} }

View File

@ -8,15 +8,16 @@ import (
eth "github.com/ethereum/go-ethereum/common" eth "github.com/ethereum/go-ethereum/common"
"github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/services/wallet/testutils" "github.com/status-im/status-go/services/wallet/testutils"
"github.com/status-im/status-go/services/wallet/transfer" "github.com/status-im/status-go/services/wallet/transfer"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/walletdatabase"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func setupTestFilterDB(t *testing.T) (db *sql.DB, close func()) { func setupTestFilterDB(t *testing.T) (db *sql.DB, close func()) {
db, err := appdatabase.SetupTestMemorySQLDB("wallet-activity-tests-filter") db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
require.NoError(t, err) require.NoError(t, err)
return db, func() { return db, func() {

View File

@ -10,6 +10,7 @@ import (
"github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/status-im/status-go/multiaccounts/accounts"
"github.com/status-im/status-go/services/wallet/async" "github.com/status-im/status-go/services/wallet/async"
w_common "github.com/status-im/status-go/services/wallet/common" w_common "github.com/status-im/status-go/services/wallet/common"
"github.com/status-im/status-go/services/wallet/token" "github.com/status-im/status-go/services/wallet/token"
@ -40,15 +41,17 @@ var (
type Service struct { type Service struct {
db *sql.DB db *sql.DB
accountsDB *accounts.Database
tokenManager *token.Manager tokenManager *token.Manager
eventFeed *event.Feed eventFeed *event.Feed
scheduler *async.MultiClientScheduler scheduler *async.MultiClientScheduler
} }
func NewService(db *sql.DB, tokenManager *token.Manager, eventFeed *event.Feed) *Service { func NewService(db *sql.DB, tokenManager *token.Manager, eventFeed *event.Feed, accountsDb *accounts.Database) *Service {
return &Service{ return &Service{
db: db, db: db,
accountsDB: accountsDb,
tokenManager: tokenManager, tokenManager: tokenManager,
eventFeed: eventFeed, eventFeed: eventFeed,
scheduler: async.NewMultiClientScheduler(), scheduler: async.NewMultiClientScheduler(),
@ -163,6 +166,7 @@ func (s *Service) Stop() {
func (s *Service) getDeps() FilterDependencies { func (s *Service) getDeps() FilterDependencies {
return FilterDependencies{ return FilterDependencies{
db: s.db, db: s.db,
accountsDb: s.accountsDB,
tokenSymbol: func(t Token) string { tokenSymbol: func(t Token) string {
info := s.tokenManager.LookupTokenIdentity(uint64(t.ChainID), t.Address, t.TokenType == Native) info := s.tokenManager.LookupTokenIdentity(uint64(t.ChainID), t.Address, t.TokenType == Native)
if info == nil { if info == nil {

View File

@ -6,16 +6,17 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/services/wallet/bigint" "github.com/status-im/status-go/services/wallet/bigint"
w_common "github.com/status-im/status-go/services/wallet/common" w_common "github.com/status-im/status-go/services/wallet/common"
"github.com/status-im/status-go/services/wallet/thirdparty" "github.com/status-im/status-go/services/wallet/thirdparty"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/walletdatabase"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func setupOwnershipDBTest(t *testing.T) (*OwnershipDB, func()) { func setupOwnershipDBTest(t *testing.T) (*OwnershipDB, func()) {
db, err := appdatabase.InitializeDB(":memory:", "wallet-collecitibles-ownership-db-tests", 1) db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
require.NoError(t, err) require.NoError(t, err)
return NewOwnershipDB(db), func() { return NewOwnershipDB(db), func() {
require.NoError(t, db.Close()) require.NoError(t, db.Close())

View File

@ -5,11 +5,12 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/walletdatabase"
) )
func setupTestCurrencyDB(t *testing.T) (*DB, func()) { func setupTestCurrencyDB(t *testing.T) (*DB, func()) {
db, err := appdatabase.InitializeDB(":memory:", "wallet-currency-db-tests-", 1) db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
require.NoError(t, err) require.NoError(t, err)
return NewCurrencyDB(db), func() { return NewCurrencyDB(db), func() {
require.NoError(t, db.Close()) require.NoError(t, db.Close())

View File

@ -9,12 +9,13 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/protocol/sqlite"
"github.com/status-im/status-go/services/wallet/bigint" "github.com/status-im/status-go/services/wallet/bigint"
"github.com/status-im/status-go/walletdatabase"
) )
func setupBalanceDBTest(t *testing.T) (*BalanceDB, func()) { func setupBalanceDBTest(t *testing.T) (*BalanceDB, func()) {
db, err := appdatabase.InitializeDB(":memory:", "wallet-history-balance_db-tests", 1) db, err := walletdatabase.InitializeDB(sqlite.InMemoryPath, "wallet-history-balance_db-tests", 1)
require.NoError(t, err) require.NoError(t, err)
return NewBalanceDB(db), func() { return NewBalanceDB(db), func() {
require.NoError(t, db.Close()) require.NoError(t, db.Close())

View File

@ -12,15 +12,14 @@ import (
"github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/walletdatabase"
"github.com/status-im/status-go/sqlite"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func setupBalanceTest(t *testing.T) (*Balance, func()) { func setupBalanceTest(t *testing.T) (*Balance, func()) {
db, err := appdatabase.InitializeDB(":memory:", "wallet-history-balance-tests", sqlite.ReducedKDFIterationsNumber) db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
require.NoError(t, err) require.NoError(t, err)
return NewBalance(NewBalanceDB(db)), func() { return NewBalance(NewBalanceDB(db)), func() {
require.NoError(t, db.Close()) require.NoError(t, db.Close())

View File

@ -14,18 +14,19 @@ import (
"github.com/golang/mock/gomock" "github.com/golang/mock/gomock"
"github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
statusRPC "github.com/status-im/status-go/rpc" statusRPC "github.com/status-im/status-go/rpc"
"github.com/status-im/status-go/services/wallet/market" "github.com/status-im/status-go/services/wallet/market"
"github.com/status-im/status-go/services/wallet/thirdparty/cryptocompare" "github.com/status-im/status-go/services/wallet/thirdparty/cryptocompare"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/transactions/fake" "github.com/status-im/status-go/transactions/fake"
"github.com/status-im/status-go/walletdatabase"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func setupDummyServiceNoDependencies(t *testing.T) (service *Service, closeFn func()) { func setupDummyServiceNoDependencies(t *testing.T) (service *Service, closeFn func()) {
db, err := appdatabase.InitializeDB(":memory:", "wallet-history-service-tests", 1) db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
require.NoError(t, err) require.NoError(t, err)
cryptoCompare := cryptocompare.NewClient() cryptoCompare := cryptocompare.NewClient()

View File

@ -8,9 +8,8 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/walletdatabase"
"github.com/status-im/status-go/sqlite"
) )
const ( const (
@ -20,7 +19,7 @@ const (
) )
func setupTestSavedAddressesDB(t *testing.T) (*SavedAddressesManager, func()) { func setupTestSavedAddressesDB(t *testing.T) (*SavedAddressesManager, func()) {
db, err := appdatabase.InitializeDB(sqlite.InMemoryPath, "wallet-saved_addresses-tests", sqlite.ReducedKDFIterationsNumber) db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
require.NoError(t, err) require.NoError(t, err)
return &SavedAddressesManager{db}, func() { return &SavedAddressesManager{db}, func() {

View File

@ -103,7 +103,7 @@ func NewService(
reader := NewReader(rpcClient, tokenManager, marketManager, accountsDB, NewPersistence(db), walletFeed) reader := NewReader(rpcClient, tokenManager, marketManager, accountsDB, NewPersistence(db), walletFeed)
history := history.NewService(db, walletFeed, rpcClient, tokenManager, marketManager) history := history.NewService(db, walletFeed, rpcClient, tokenManager, marketManager)
currency := currency.NewService(db, walletFeed, tokenManager, marketManager) currency := currency.NewService(db, walletFeed, tokenManager, marketManager)
activity := activity.NewService(db, tokenManager, walletFeed) activity := activity.NewService(db, tokenManager, walletFeed, accountsDB)
openseaClient := opensea.NewClient(config.WalletConfig.OpenseaAPIKey, walletFeed) openseaClient := opensea.NewClient(config.WalletConfig.OpenseaAPIKey, walletFeed)
infuraClient := infura.NewClient(config.WalletConfig.InfuraAPIKey, config.WalletConfig.InfuraAPIKeySecret) infuraClient := infura.NewClient(config.WalletConfig.InfuraAPIKey, config.WalletConfig.InfuraAPIKeySecret)

View File

@ -8,12 +8,13 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/walletdatabase"
) )
func setupTestTokenDB(t *testing.T) (*Manager, func()) { func setupTestTokenDB(t *testing.T) (*Manager, func()) {
db, err := appdatabase.InitializeDB(":memory:", "wallet-token-tests", 1) db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
require.NoError(t, err) require.NoError(t, err)
return &Manager{db, nil, nil, nil, nil, nil, false}, func() { return &Manager{db, nil, nil, nil, nil, nil, false}, func() {
require.NoError(t, db.Close()) require.NoError(t, db.Close())

View File

@ -6,13 +6,14 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/walletdatabase"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/sqlite"
) )
func setupTestTransferDB(t *testing.T) (*BlockDAO, func()) { func setupTestTransferDB(t *testing.T) (*BlockDAO, func()) {
db, err := appdatabase.InitializeDB(sqlite.InMemoryPath, "wallet-tests", sqlite.ReducedKDFIterationsNumber) db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
require.NoError(t, err) require.NoError(t, err)
return &BlockDAO{db}, func() { return &BlockDAO{db}, func() {
require.NoError(t, db.Close()) require.NoError(t, db.Close())

View File

@ -10,12 +10,13 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/status-im/status-go/appdatabase"
w_common "github.com/status-im/status-go/services/wallet/common" w_common "github.com/status-im/status-go/services/wallet/common"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/walletdatabase"
) )
func setupTestDB(t *testing.T) (*Database, *BlockDAO, func()) { func setupTestDB(t *testing.T) (*Database, *BlockDAO, func()) {
db, err := appdatabase.SetupTestMemorySQLDB("wallet-transfer-tests") db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
require.NoError(t, err) require.NoError(t, err)
return NewDB(db), &BlockDAO{db}, func() { return NewDB(db), &BlockDAO{db}, func() {
require.NoError(t, db.Close()) require.NoError(t, db.Close())

View File

@ -7,14 +7,15 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/walletdatabase"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
"github.com/status-im/status-go/appdatabase"
) )
func setupTestTransactionDB(t *testing.T) (*TransactionManager, func()) { func setupTestTransactionDB(t *testing.T) (*TransactionManager, func()) {
db, err := appdatabase.SetupTestMemorySQLDB("wallet-transfer-transaction-tests") db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
require.NoError(t, err) require.NoError(t, err)
return &TransactionManager{db, nil, nil, nil, nil, nil, nil}, func() { return &TransactionManager{db, nil, nil, nil, nil, nil, nil}, func() {
require.NoError(t, db.Close()) require.NoError(t, db.Close())

View File

@ -3,8 +3,6 @@ package web3provider
import ( import (
"database/sql" "database/sql"
"encoding/json" "encoding/json"
"io/ioutil"
"os"
"testing" "testing"
"github.com/golang/mock/gomock" "github.com/golang/mock/gomock"
@ -17,7 +15,7 @@ import (
"github.com/status-im/status-go/multiaccounts/settings" "github.com/status-im/status-go/multiaccounts/settings"
"github.com/status-im/status-go/params" "github.com/status-im/status-go/params"
"github.com/status-im/status-go/services/permissions" "github.com/status-im/status-go/services/permissions"
"github.com/status-im/status-go/sqlite" "github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/t/utils" "github.com/status-im/status-go/t/utils"
"github.com/status-im/status-go/transactions/fake" "github.com/status-im/status-go/transactions/fake"
@ -26,14 +24,9 @@ import (
) )
func createDB(t *testing.T) (*sql.DB, func()) { func createDB(t *testing.T) (*sql.DB, func()) {
tmpfile, err := ioutil.TempFile("", "provider-tests-") db, cleanup, err := helpers.SetupTestSQLDB(appdatabase.DbInitializer{}, "provider-tests-")
require.NoError(t, err) require.NoError(t, err)
db, err := appdatabase.InitializeDB(tmpfile.Name(), "provider-tests", sqlite.ReducedKDFIterationsNumber) return db, func() { require.NoError(t, cleanup()) }
require.NoError(t, err)
return db, func() {
require.NoError(t, db.Close())
require.NoError(t, os.Remove(tmpfile.Name()))
}
} }
func setupTestAPI(t *testing.T) (*API, func()) { func setupTestAPI(t *testing.T) (*API, func()) {

View File

@ -1,22 +1,24 @@
package appdatabase package helpers
import ( import (
"database/sql" "database/sql"
"io/ioutil" "io/ioutil"
"os" "os"
"github.com/status-im/status-go/common/dbsetup"
"github.com/status-im/status-go/protocol/sqlite" "github.com/status-im/status-go/protocol/sqlite"
) )
const kdfIterationsNumberForTests = 3200 const kdfIterationsNumberForTests = 1
// SetupTestSQLDB creates a temporary sqlite database file, initialises and then returns with a teardown func // SetupTestSQLDB creates a temporary sqlite database file, initialises and then returns with a teardown func
func SetupTestSQLDB(prefix string) (*sql.DB, func() error, error) { func SetupTestSQLDB(dbInit dbsetup.DatabaseInitializer, prefix string) (*sql.DB, func() error, error) {
tmpfile, err := ioutil.TempFile("", prefix) tmpfile, err := ioutil.TempFile("", prefix)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
db, err := InitializeDB(tmpfile.Name(), prefix, kdfIterationsNumberForTests)
db, err := dbInit.Initialize(tmpfile.Name(), "password", kdfIterationsNumberForTests)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
@ -30,8 +32,8 @@ func SetupTestSQLDB(prefix string) (*sql.DB, func() error, error) {
}, nil }, nil
} }
func SetupTestMemorySQLDB(prefix string) (*sql.DB, error) { func SetupTestMemorySQLDB(dbInit dbsetup.DatabaseInitializer) (*sql.DB, error) {
db, err := InitializeDB(sqlite.InMemoryPath, prefix, kdfIterationsNumberForTests) db, err := dbInit.Initialize(sqlite.InMemoryPath, "password", kdfIterationsNumberForTests)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -8,12 +8,13 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/services/wallet/bigint" "github.com/status-im/status-go/services/wallet/bigint"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/walletdatabase"
) )
func setupTestTransactionDB(t *testing.T) (*TransactionManager, func()) { func setupTestTransactionDB(t *testing.T) (*TransactionManager, func()) {
db, err := appdatabase.SetupTestMemorySQLDB("wallet-transfer-transaction-tests") db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
require.NoError(t, err) require.NoError(t, err)
return &TransactionManager{db, nil, nil, nil}, func() { return &TransactionManager{db, nil, nil, nil}, func() {
require.NoError(t, db.Close()) require.NoError(t, db.Close())