diff options
Diffstat (limited to 'api/apitestlib.go')
-rw-r--r-- | api/apitestlib.go | 106 |
1 files changed, 72 insertions, 34 deletions
diff --git a/api/apitestlib.go b/api/apitestlib.go index a38c20813..58e2a5965 100644 --- a/api/apitestlib.go +++ b/api/apitestlib.go @@ -4,6 +4,7 @@ package api import ( + "fmt" "net" "strings" "time" @@ -12,6 +13,8 @@ import ( "github.com/mattermost/mattermost-server/app" "github.com/mattermost/mattermost-server/model" "github.com/mattermost/mattermost-server/store" + "github.com/mattermost/mattermost-server/store/sqlstore" + "github.com/mattermost/mattermost-server/store/storetest" "github.com/mattermost/mattermost-server/utils" "github.com/mattermost/mattermost-server/wsapi" @@ -35,33 +38,62 @@ type TestHelper struct { SystemAdminChannel *model.Channel } -func setupTestHelper(enterprise bool) *TestHelper { - th := &TestHelper{ - App: app.New(), +type persistentTestStore struct { + store.Store +} + +func (*persistentTestStore) Close() {} + +var testStoreContainer *storetest.RunningContainer +var testStore *persistentTestStore + +// UseTestStore sets the container and corresponding settings to use for tests. Once the tests are +// complete (e.g. at the end of your TestMain implementation), you should call StopTestStore. +func UseTestStore(container *storetest.RunningContainer, settings *model.SqlSettings) { + testStoreContainer = container + testStore = &persistentTestStore{store.NewLayeredStore(sqlstore.NewSqlSupplier(*settings, nil), nil, nil)} +} + +func StopTestStore() { + if testStoreContainer != nil { + testStoreContainer.Stop() + testStoreContainer = nil } +} - if th.App.Srv == nil { +func setupTestHelper(enterprise bool) *TestHelper { + if utils.T == nil { utils.TranslationsPreInit() - utils.LoadConfig("config.json") - utils.InitTranslations(utils.Cfg.LocalizationSettings) - *utils.Cfg.TeamSettings.MaxUsersPerTeam = 50 - *utils.Cfg.RateLimitSettings.Enable = false - utils.Cfg.EmailSettings.SendEmailNotifications = true - utils.DisableDebugLogForTest() - th.App.NewServer() - th.App.InitStores() - th.App.Srv.Router = NewRouter() - th.App.Srv.WebSocketRouter = th.App.NewWebSocketRouter() - th.App.StartServer() - api4.Init(th.App, th.App.Srv.Router, false) - Init(th.App, th.App.Srv.Router) - wsapi.Init(th.App, th.App.Srv.WebSocketRouter) - utils.EnableDebugLogForTest() - th.App.Srv.Store.MarkSystemRanUnitTests() + } + utils.LoadConfig("config.json") + utils.InitTranslations(utils.Cfg.LocalizationSettings) + + var options []app.Option + if testStore != nil { + options = append(options, app.StoreOverride(testStore)) + options = append(options, app.ConfigOverride(func(cfg *model.Config) { + cfg.ServiceSettings.ListenAddress = new(string) + *cfg.ServiceSettings.ListenAddress = ":0" + })) + } - *utils.Cfg.TeamSettings.EnableOpenServer = true + th := &TestHelper{ + App: app.New(options...), } + *utils.Cfg.TeamSettings.MaxUsersPerTeam = 50 + *utils.Cfg.RateLimitSettings.Enable = false + utils.Cfg.EmailSettings.SendEmailNotifications = true + utils.DisableDebugLogForTest() + th.App.StartServer() + api4.Init(th.App, th.App.Srv.Router, false) + Init(th.App, th.App.Srv.Router) + wsapi.Init(th.App, th.App.Srv.WebSocketRouter) + utils.EnableDebugLogForTest() + th.App.Srv.Store.MarkSystemRanUnitTests() + + *utils.Cfg.TeamSettings.EnableOpenServer = true + utils.SetIsLicensed(enterprise) if enterprise { utils.License().Features.SetDefaults() @@ -87,22 +119,12 @@ func ReloadConfigForSetup() { *utils.Cfg.TeamSettings.EnableOpenServer = true } -func (me *TestHelper) waitForConnectivity() { - for i := 0; i < 1000; i++ { - _, err := net.Dial("tcp", "localhost"+*utils.Cfg.ServiceSettings.ListenAddress) - if err == nil { - return - } - time.Sleep(time.Millisecond * 20) - } - panic("unable to connect") -} - func (me *TestHelper) InitBasic() *TestHelper { me.waitForConnectivity() me.BasicClient = me.CreateClient() me.BasicUser = me.CreateUser(me.BasicClient) + me.App.UpdateUserRoles(me.BasicUser.Id, model.ROLE_SYSTEM_USER.Id) me.LoginBasic() me.BasicTeam = me.CreateTeam(me.BasicClient) me.LinkUserToTeam(me.BasicUser, me.BasicTeam) @@ -135,12 +157,24 @@ func (me *TestHelper) InitSystemAdmin() *TestHelper { return me } +func (me *TestHelper) waitForConnectivity() { + for i := 0; i < 1000; i++ { + conn, err := net.Dial("tcp", fmt.Sprintf("localhost:%v", me.App.Srv.ListenAddr.Port)) + if err == nil { + conn.Close() + return + } + time.Sleep(time.Millisecond * 20) + } + panic("unable to connect") +} + func (me *TestHelper) CreateClient() *model.Client { - return model.NewClient("http://localhost" + *utils.Cfg.ServiceSettings.ListenAddress) + return model.NewClient(fmt.Sprintf("http://localhost:%v", me.App.Srv.ListenAddr.Port)) } func (me *TestHelper) CreateWebSocketClient() (*model.WebSocketClient, *model.AppError) { - return model.NewWebSocketClient("ws://localhost"+*utils.Cfg.ServiceSettings.ListenAddress, me.BasicClient.AuthToken) + return model.NewWebSocketClient(fmt.Sprintf("ws://localhost:%v", me.App.Srv.ListenAddr.Port), me.BasicClient.AuthToken) } func (me *TestHelper) CreateTeam(client *model.Client) *model.Team { @@ -335,4 +369,8 @@ func GenerateTestTeamName() string { func (me *TestHelper) TearDown() { me.App.Shutdown() + if err := recover(); err != nil { + StopTestStore() + panic(err) + } } |