@ -340,72 +340,80 @@ type ITestDB interface {
Logf ( format string , args ... interface { } )
Logf ( format string , args ... interface { } )
}
}
var testSqlStore * SqlStore
// InitTestDB initializes the test DB.
// InitTestDB initializes the test DB.
func InitTestDB ( t ITestDB ) * SqlStore {
func InitTestDB ( t ITestDB ) * SqlStore {
t . Helper ( )
t . Helper ( )
sqlstore := & SqlStore { }
if testSqlStore == nil {
sqlstore . Bus = bus . New ( )
testSqlStore = & SqlStore { }
sqlstore . CacheService = localcache . New ( 5 * time . Minute , 10 * time . Minute )
testSqlStore . Bus = bus . New ( )
sqlstore . skipEnsureDefaultOrgAndUser = true
testSqlStore . CacheService = localcache . New ( 5 * time . Minute , 10 * time . Minute )
testSqlStore . skipEnsureDefaultOrgAndUser = true
dbType := migrator . SQLITE
dbType := migrator . SQLITE
// environment variable present for test db?
if db , present := os . LookupEnv ( "GRAFANA_TEST_DB" ) ; present {
// environment variable present for test db?
t . Logf ( "Using database type %q" , db )
if db , present := os . LookupEnv ( "GRAFANA_TEST_DB" ) ; present {
dbType = db
t . Logf ( "Using database type %q" , db )
}
dbType = db
}
// set test db config
sqlstore . Cfg = setting . NewCfg ( )
sec , err := sqlstore . Cfg . Raw . NewSection ( "database" )
if err != nil {
t . Fatalf ( "Failed to create section: %s" , err )
}
if _ , err := sec . NewKey ( "type" , dbType ) ; err != nil {
t . Fatalf ( "Failed to create key: %s" , err )
}
switch dbType {
// set test db config
case "mysql" :
testSqlStore . Cfg = setting . NewCfg ( )
if _ , err := sec . NewKey ( "connection_string" , sqlutil . MySQLTestDB ( ) . ConnStr ) ; err != nil {
sec , err := testSqlStore . Cfg . Raw . NewSection ( "database" )
t . Fatalf ( "Failed to create key: %s" , err )
if err != nil {
t . Fatalf ( "Failed to create section: %s" , err )
}
}
case "postgres" :
if _ , err := sec . NewKey ( "type" , dbType ) ; err != nil {
if _ , err := sec . NewKey ( "connection_string" , sqlutil . PostgresTestDB ( ) . ConnStr ) ; err != nil {
t . Fatalf ( "Failed to create key: %s" , err )
t . Fatalf ( "Failed to create key: %s" , err )
}
}
default :
if _ , err := sec . NewKey ( "connection_string" , sqlutil . Sqlite3TestDB ( ) . ConnStr ) ; err != nil {
switch dbType {
t . Fatalf ( "Failed to create key: %s" , err )
case "mysql" :
if _ , err := sec . NewKey ( "connection_string" , sqlutil . MySQLTestDB ( ) . ConnStr ) ; err != nil {
t . Fatalf ( "Failed to create key: %s" , err )
}
case "postgres" :
if _ , err := sec . NewKey ( "connection_string" , sqlutil . PostgresTestDB ( ) . ConnStr ) ; err != nil {
t . Fatalf ( "Failed to create key: %s" , err )
}
default :
if _ , err := sec . NewKey ( "connection_string" , sqlutil . Sqlite3TestDB ( ) . ConnStr ) ; err != nil {
t . Fatalf ( "Failed to create key: %s" , err )
}
}
}
}
// need to get engine to clean db before we init
// need to get engine to clean db before we init
t . Logf ( "Creating database connection: %q" , sec . Key ( "connection_string" ) )
t . Logf ( "Creating database connection: %q" , sec . Key ( "connection_string" ) )
engine , err := xorm . NewEngine ( dbType , sec . Key ( "connection_string" ) . String ( ) )
engine , err := xorm . NewEngine ( dbType , sec . Key ( "connection_string" ) . String ( ) )
if err != nil {
if err != nil {
t . Fatalf ( "Failed to init test database: %v" , err )
t . Fatalf ( "Failed to init test database: %v" , err )
}
}
sqlstore . Dialect = migrator . NewDialect ( engine )
testSqlS tore . Dialect = migrator . NewDialect ( engine )
// temp global var until we get rid of global vars
// temp global var until we get rid of global vars
dialect = sqls tore. Dialect
dialect = testSqlS tore. Dialect
t . Logf ( "Cleaning DB" )
t . Logf ( "Cleaning DB" )
if err := dialect . CleanDB ( ) ; err != nil {
if err := dialect . CleanDB ( ) ; err != nil {
t . Fatalf ( "Failed to clean test db %v" , err )
t . Fatalf ( "Failed to clean test db %v" , err )
}
}
if err := sqlstore . Init ( ) ; err != nil {
if err := testSqlStore . Init ( ) ; err != nil {
t . Fatalf ( "Failed to init test database: %v" , err )
t . Fatalf ( "Failed to init test database: %v" , err )
}
testSqlStore . engine . DatabaseTZ = time . UTC
testSqlStore . engine . TZLocation = time . UTC
}
}
sqlstore . engine . DatabaseTZ = time . UTC
if err := dialect . TruncateDBTables ( ) ; err != nil {
sqlstore . engine . TZLocation = time . UTC
t . Fatalf ( "Failed to truncate test db %v" , err )
}
return sqls tore
return testSqlS tore
}
}
func IsTestDbMySql ( ) bool {
func IsTestDbMySql ( ) bool {