Files
mostlymatter/server/boards/services/store/sqlstore/testlib.go
Agniva De Sarker b200a07881 v8.0 module release (#22975)
https://mattermost.atlassian.net/browse/MM-52079

```release-note
We upgrade the module version to 8.0. The new module path is github.com/mattermost-server/server/v8.
```


Co-authored-by: Doug Lauder <wiggin77@warpmail.net>
2023-04-18 11:05:28 +05:30

119 строки
3.2 KiB
Go

// 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/server/v8/boards/model"
"github.com/mattermost/mattermost-server/server/v8/boards/services/store"
"github.com/mattermost/mattermost-server/server/v8/channels/store/storetest"
"github.com/mattermost/mattermost-server/server/v8/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())
}
}