mirror of https://github.com/portainer/portainer
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package scheduler
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func Test_CanStartAndTerminate(t *testing.T) {
|
|
s := NewScheduler(context.Background())
|
|
s.StartJobEvery(1*time.Minute, func() { fmt.Println("boop") })
|
|
|
|
err := s.Shutdown()
|
|
assert.NoError(t, err, "Shutdown should return no errors")
|
|
assert.Empty(t, s.crontab.Entries(), "all jobs should have been removed")
|
|
}
|
|
|
|
func Test_CanTerminateByCancellingContext(t *testing.T) {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
s := NewScheduler(ctx)
|
|
s.StartJobEvery(1*time.Minute, func() { fmt.Println("boop") })
|
|
|
|
cancel()
|
|
|
|
for i := 0; i < 100; i++ {
|
|
if len(s.crontab.Entries()) == 0 {
|
|
return
|
|
}
|
|
time.Sleep(10 * time.Millisecond)
|
|
}
|
|
t.Fatal("all jobs are expected to be cleaned by now; it might be a timing issue, otherwise implementation defect")
|
|
}
|
|
|
|
func Test_StartAndStopJob(t *testing.T) {
|
|
s := NewScheduler(context.Background())
|
|
defer s.Shutdown()
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
|
|
|
|
var jobOne string
|
|
var workDone bool
|
|
jobOne = s.StartJobEvery(time.Second, func() {
|
|
assert.Equal(t, 1, len(s.crontab.Entries()), "scheduler should have one active job")
|
|
workDone = true
|
|
|
|
s.StopJob(jobOne)
|
|
cancel()
|
|
})
|
|
|
|
<-ctx.Done()
|
|
assert.True(t, workDone, "value should been set in the job")
|
|
assert.Equal(t, 0, len(s.crontab.Entries()), "scheduler should have no active jobs")
|
|
|
|
}
|