Ivan Belyakov 2df9df10ab 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.
2023-08-18 09:00:56 +02:00

74 lines
1.5 KiB
Go

package helpers
import (
"database/sql"
"io/ioutil"
"os"
"github.com/status-im/status-go/common/dbsetup"
"github.com/status-im/status-go/protocol/sqlite"
)
const kdfIterationsNumberForTests = 1
// SetupTestSQLDB creates a temporary sqlite database file, initialises and then returns with a teardown func
func SetupTestSQLDB(dbInit dbsetup.DatabaseInitializer, prefix string) (*sql.DB, func() error, error) {
tmpfile, err := ioutil.TempFile("", prefix)
if err != nil {
return nil, nil, err
}
db, err := dbInit.Initialize(tmpfile.Name(), "password", kdfIterationsNumberForTests)
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 SetupTestMemorySQLDB(dbInit dbsetup.DatabaseInitializer) (*sql.DB, error) {
db, err := dbInit.Initialize(sqlite.InMemoryPath, "password", kdfIterationsNumberForTests)
if err != nil {
return nil, err
}
return db, nil
}
func ColumnExists(db *sql.DB, tableName string, columnName string) (bool, error) {
rows, err := db.Query("PRAGMA table_info(" + tableName + ")")
if err != nil {
return false, err
}
defer rows.Close()
var cid int
var name string
var dataType string
var notNull bool
var dFLTValue sql.NullString
var pk int
for rows.Next() {
err := rows.Scan(&cid, &name, &dataType, &notNull, &dFLTValue, &pk)
if err != nil {
return false, err
}
if name == columnName {
return true, nil
}
}
if rows.Err() != nil {
return false, rows.Err()
}
return false, nil
}