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>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
0f4c6bc074
Коммит
42c785218d
@@ -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)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user