Mono repo -> Master (#22553)
Combines the following repositories into one: https://github.com/mattermost/mattermost-server https://github.com/mattermost/mattermost-webapp https://github.com/mattermost/focalboard https://github.com/mattermost/mattermost-plugin-playbooks
Этот коммит содержится в:
117
server/boards/services/store/sqlstore/testlib.go
Обычный файл
117
server/boards/services/store/sqlstore/testlib.go
Обычный файл
@@ -0,0 +1,117 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
package sqlstore
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/mattermost/mattermost-server/v6/server/boards/model"
|
||||
"github.com/mattermost/mattermost-server/v6/server/boards/services/store"
|
||||
"github.com/mattermost/mattermost-server/v6/server/channels/store/storetest"
|
||||
"github.com/mattermost/mattermost-server/v6/server/platform/shared/mlog"
|
||||
"github.com/mgdelacroix/foundation"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
type storeType struct {
|
||||
Name string
|
||||
ConnString string
|
||||
Store store.Store
|
||||
Logger *mlog.Logger
|
||||
}
|
||||
|
||||
var mainStoreTypes []*storeType
|
||||
|
||||
func NewStoreType(name string, driver string, skipMigrations bool) *storeType {
|
||||
settings := storetest.MakeSqlSettings(driver, false)
|
||||
connectionString := *settings.DataSource
|
||||
|
||||
logger := mlog.CreateConsoleTestLogger(false, mlog.LvlDebug)
|
||||
|
||||
sqlDB, err := sql.Open(driver, connectionString)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("cannot open database: %s", err))
|
||||
}
|
||||
err = sqlDB.Ping()
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("cannot ping database: %s", err))
|
||||
}
|
||||
|
||||
storeParams := Params{
|
||||
DBType: driver,
|
||||
ConnectionString: connectionString,
|
||||
SkipMigrations: skipMigrations,
|
||||
TablePrefix: "focalboard_",
|
||||
Logger: logger,
|
||||
DB: sqlDB,
|
||||
IsPlugin: false, // ToDo: to be removed
|
||||
}
|
||||
store, err := New(storeParams)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("cannot create store: %s", err))
|
||||
}
|
||||
|
||||
return &storeType{name, connectionString, store, logger}
|
||||
}
|
||||
|
||||
func initStores(skipMigrations bool) []*storeType {
|
||||
var storeTypes []*storeType
|
||||
|
||||
if os.Getenv("IS_CI") == "true" {
|
||||
switch os.Getenv("MM_SQLSETTINGS_DRIVERNAME") {
|
||||
case "mysql":
|
||||
storeTypes = append(storeTypes, NewStoreType("MySQL", model.MysqlDBType, skipMigrations))
|
||||
case "postgres":
|
||||
storeTypes = append(storeTypes, NewStoreType("PostgreSQL", model.PostgresDBType, skipMigrations))
|
||||
}
|
||||
} else {
|
||||
storeTypes = append(storeTypes,
|
||||
NewStoreType("PostgreSQL", model.PostgresDBType, skipMigrations),
|
||||
NewStoreType("MySQL", model.MysqlDBType, skipMigrations),
|
||||
)
|
||||
}
|
||||
|
||||
return storeTypes
|
||||
}
|
||||
|
||||
func RunStoreTests(t *testing.T, f func(*testing.T, store.Store)) {
|
||||
for _, st := range mainStoreTypes {
|
||||
st := st
|
||||
require.NoError(t, st.Store.DropAllTables())
|
||||
t.Run(st.Name, func(t *testing.T) {
|
||||
f(t, st.Store)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func RunStoreTestsWithSqlStore(t *testing.T, f func(*testing.T, *SQLStore)) {
|
||||
for _, st := range mainStoreTypes {
|
||||
st := st
|
||||
sqlstore := st.Store.(*SQLStore)
|
||||
require.NoError(t, sqlstore.DropAllTables())
|
||||
t.Run(st.Name, func(t *testing.T) {
|
||||
f(t, sqlstore)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// RunStoreTestsWithFoundation executes a test for all store types. It
|
||||
// requires a new instance of each store type as migration tests
|
||||
// cannot reuse old stores with already run migrations
|
||||
func RunStoreTestsWithFoundation(t *testing.T, f func(*testing.T, *foundation.Foundation)) {
|
||||
storeTypes := initStores(true)
|
||||
|
||||
for _, st := range storeTypes {
|
||||
st := st
|
||||
t.Run(st.Name, func(t *testing.T) {
|
||||
sqlstore := st.Store.(*SQLStore)
|
||||
f(t, foundation.New(t, NewBoardsMigrator(sqlstore)))
|
||||
})
|
||||
require.NoError(t, st.Store.Shutdown())
|
||||
require.NoError(t, st.Logger.Shutdown())
|
||||
}
|
||||
}
|
||||
Ссылка в новой задаче
Block a user