MM-29488: Fix racy test TestScheduler (#16257)

* MM-29488: Fix racy test TestScheduler

We iterate the nextRunTimes slice only after stopping the
scheduler.

And since we are checking the slice 3 times, we split
the test into 3 sub-tests, every time starting a new scheduler
and running the same steps again.

https://mattermost.atlassian.net/browse/MM-29488

```release-note
NONE
```

* incorporate review comments

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
Agniva De Sarker
2020-11-12 09:39:19 +05:30
коммит произвёл GitHub
родитель 0f4c6bc074
Коммит 42c785218d
2 изменённых файлов: 34 добавлений и 22 удалений

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

@@ -197,7 +197,7 @@ func (schedulers *Schedulers) scheduleJob(cfg *model.Config, scheduler model.Sch
return scheduler.ScheduleJob(cfg, pendingJobs, lastSuccessfulJob) return scheduler.ScheduleJob(cfg, pendingJobs, lastSuccessfulJob)
} }
func (schedulers *Schedulers) handleConfigChange(oldConfig *model.Config, newConfig *model.Config) { func (schedulers *Schedulers) handleConfigChange(oldConfig, newConfig *model.Config) {
mlog.Debug("Schedulers received config change.") mlog.Debug("Schedulers received config change.")
schedulers.configChanged <- newConfig schedulers.configChanged <- newConfig
} }

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

@@ -78,28 +78,40 @@ func TestScheduler(t *testing.T) {
exportInterface.On("MakeScheduler").Return(new(MockScheduler)) exportInterface.On("MakeScheduler").Return(new(MockScheduler))
jobServer.MessageExportJob = exportInterface jobServer.MessageExportJob = exportInterface
schedulers := jobServer.InitSchedulers() t.Run("Base", func(t *testing.T) {
schedulers.Start() schedulers := jobServer.InitSchedulers()
time.Sleep(1 * time.Second) schedulers.Start()
time.Sleep(time.Second)
// They should be all on here schedulers.Stop()
for _, element := range schedulers.nextRunTimes { // They should be all on here
assert.NotNil(t, element) for _, element := range schedulers.nextRunTimes {
} assert.NotNil(t, element)
}
})
schedulers.HandleClusterLeaderChange(false) t.Run("ClusterLeaderChanged", func(t *testing.T) {
time.Sleep(1 * time.Second) schedulers := jobServer.InitSchedulers()
// They should be turned off schedulers.Start()
for _, element := range schedulers.nextRunTimes { time.Sleep(time.Second)
assert.Nil(t, element) schedulers.HandleClusterLeaderChange(false)
} schedulers.Stop()
// They should be turned off
// After running a config change, they should stay off for _, element := range schedulers.nextRunTimes {
schedulers.handleConfigChange(nil, nil) assert.Nil(t, element)
for _, element := range schedulers.nextRunTimes { }
assert.Nil(t, element) })
}
schedulers.Stop()
t.Run("ConfigChanged", func(t *testing.T) {
schedulers := jobServer.InitSchedulers()
schedulers.Start()
time.Sleep(time.Second)
schedulers.HandleClusterLeaderChange(false)
// After running a config change, they should stay off
schedulers.handleConfigChange(nil, nil)
schedulers.Stop()
for _, element := range schedulers.nextRunTimes {
assert.Nil(t, element)
}
})
} }