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
Этот коммит содержится в:
Jesse Hallam
2018-12-10 11:58:09 -05:00
коммит произвёл Carlos Tadeu Panato Junior
родитель 204dde9f48
Коммит 8374b6221e
16 изменённых файлов: 846 добавлений и 300 удалений

Просмотреть файл

@@ -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.
}