Files

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")
}
}