62 lines
1.2 KiB
Go
62 lines
1.2 KiB
Go
package cron
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestJobFiresAtExpectedTime(t *testing.T) {
|
|
fired := make(chan struct{}, 1)
|
|
|
|
job := func() {
|
|
select {
|
|
case fired <- struct{}{}:
|
|
default:
|
|
}
|
|
}
|
|
|
|
// Every second (6 fields because cron is created with WithSeconds).
|
|
scheduler, err := NewCronScheduler("* * * * * *", job)
|
|
if err != nil {
|
|
t.Fatalf("NewCronScheduler failed: %v", err)
|
|
}
|
|
|
|
scheduler.Start()
|
|
|
|
select {
|
|
case <-fired:
|
|
// Job fired as expected.
|
|
case <-time.After(3 * time.Second):
|
|
t.Fatal("job did not fire within expected time")
|
|
}
|
|
|
|
stoppedCtx := scheduler.Stop()
|
|
select {
|
|
case <-stoppedCtx.Done():
|
|
// Scheduler stopped cleanly.
|
|
case <-time.After(2 * time.Second):
|
|
t.Fatal("scheduler did not stop within expected time")
|
|
}
|
|
}
|
|
|
|
func TestStopReturnsContext(t *testing.T) {
|
|
scheduler, err := NewCronScheduler("* * * * * *", func() {})
|
|
if err != nil {
|
|
t.Fatalf("NewCronScheduler failed: %v", err)
|
|
}
|
|
|
|
scheduler.Start()
|
|
|
|
stoppedCtx := scheduler.Stop()
|
|
if stoppedCtx == nil {
|
|
t.Fatal("Stop returned nil context")
|
|
}
|
|
|
|
select {
|
|
case <-stoppedCtx.Done():
|
|
// Expected.
|
|
case <-time.After(2 * time.Second):
|
|
t.Fatal("stopped context was not cancelled")
|
|
}
|
|
}
|