unittest using externally managed database (#9400)
* MM-12083: unittest using externally managed database * cherry-pick Makefile changes from @cpanato * Jenkins changes (#9915) * add docker compose * udpate * when using minio dont need to set the region * update * add wait for it script * using old minio * add new jenkins file * update makefile * add dockerfile * rename the docker-compose proj to avoid colision (#9917) * rename the docker-compose proj to avoid colision * enable debug * enable debug to double checkt the branchs and fix docker-compose name (#9919) * add ee hash to check (#9920) * fix name (#9921) * update jenkins file to push from branch and prs * if a new push comes in stop the running build * split mysql and postgres variables * add script to run jenkins-like env in local dev env * update docker-compose project name to use uuid to make it more randon * fix DCNAME definition * update elasticsearch docker image * revert test * tidy up stages, and wait for mysql differently * update docker image and add check for postgres * checking if is ready * update docker compose to have a wait for deps * add readme and rename dockerfile * fix -unittest setup * using mm docker image * restore parallel unit tests at the package level Spin up a dedicated database for each package under test to avoid races in accessing the same tables. Simplify the interface for configuring the test database to just a DSN instead of multiple exports for each field. * try to work around root mysql access in CI * update local-test-env.sh too * MYSQL_ROOT_HOST: % * fix missing quotes * setting some memory limits for mysql * revert memory docker compose does not support * fix env name for postgres * expose errors in app/export_test.go * fix test label, better error checking on teardown * increase query timeout for tests * fix export_test * update local dev script * add configurable mysql root passwd
Этот коммит содержится в:
коммит произвёл
Carlos Tadeu Panato Junior
родитель
204dde9f48
Коммит
8374b6221e
@@ -4,6 +4,7 @@
|
||||
package testlib
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
@@ -21,11 +22,12 @@ type MainHelper struct {
|
||||
SqlSupplier *sqlstore.SqlSupplier
|
||||
ClusterInterface *FakeClusterInterface
|
||||
|
||||
container *storetest.RunningContainer
|
||||
status int
|
||||
status int
|
||||
}
|
||||
|
||||
func NewMainHelper() *MainHelper {
|
||||
flag.Parse()
|
||||
|
||||
// Setup a global logger to catch tests logging outside of app context
|
||||
// The global logger will be stomped by apps initalizing but that's fine for testing.
|
||||
// Ideally this won't happen.
|
||||
@@ -38,21 +40,19 @@ func NewMainHelper() *MainHelper {
|
||||
|
||||
utils.TranslationsPreInit()
|
||||
|
||||
container, settings, err := storetest.NewMySQLContainer()
|
||||
if err != nil {
|
||||
panic("failed to start mysql container: " + err.Error())
|
||||
}
|
||||
settings := storetest.MakeSqlSettings(model.DATABASE_DRIVER_MYSQL)
|
||||
|
||||
testClusterInterface := &FakeClusterInterface{}
|
||||
testStoreSqlSupplier := sqlstore.NewSqlSupplier(*settings, nil)
|
||||
testStore := &TestStore{store.NewLayeredStore(testStoreSqlSupplier, nil, testClusterInterface)}
|
||||
clusterInterface := &FakeClusterInterface{}
|
||||
sqlSupplier := sqlstore.NewSqlSupplier(*settings, nil)
|
||||
testStore := &TestStore{
|
||||
store.NewLayeredStore(sqlSupplier, nil, clusterInterface),
|
||||
}
|
||||
|
||||
return &MainHelper{
|
||||
Settings: settings,
|
||||
Store: testStore,
|
||||
SqlSupplier: testStoreSqlSupplier,
|
||||
ClusterInterface: testClusterInterface,
|
||||
container: container,
|
||||
SqlSupplier: sqlSupplier,
|
||||
ClusterInterface: clusterInterface,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,8 +61,7 @@ func (h *MainHelper) Main(m *testing.M) {
|
||||
}
|
||||
|
||||
func (h *MainHelper) Close() error {
|
||||
h.container.Stop()
|
||||
h.container = nil
|
||||
storetest.CleanupSqlSettings(h.Settings)
|
||||
|
||||
os.Exit(h.status)
|
||||
|
||||
|
||||
@@ -11,5 +11,6 @@ type TestStore struct {
|
||||
store.Store
|
||||
}
|
||||
|
||||
func (*TestStore) Close() {
|
||||
func (s *TestStore) Close() {
|
||||
// Don't propagate to the underlying store, since this instance is persistent.
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user