diff --git a/scheduler.go b/scheduler.go index baafaa9..f51e0bd 100644 --- a/scheduler.go +++ b/scheduler.go @@ -537,6 +537,7 @@ func (s *Scheduler) EveryRandom(lower, upper int) *Scheduler { // Every schedules a new periodic Job with an interval. // Interval can be an int, time.Duration or a string that // parses with time.ParseDuration(). +// Negative intervals will return an error. // Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". // // The job is run immediately, unless: @@ -553,6 +554,9 @@ func (s *Scheduler) Every(interval interface{}) *Scheduler { job.error = wrapOrError(job.error, ErrInvalidInterval) } case time.Duration: + if interval <= 0 { + job.error = wrapOrError(job.error, ErrInvalidInterval) + } job.setInterval(0) job.setDuration(interval) job.setUnit(duration) @@ -561,6 +565,9 @@ func (s *Scheduler) Every(interval interface{}) *Scheduler { if err != nil { job.error = wrapOrError(job.error, err) } + if d <= 0 { + job.error = wrapOrError(job.error, ErrInvalidInterval) + } job.setDuration(d) job.setUnit(duration) default: diff --git a/scheduler_test.go b/scheduler_test.go index c5425fa..9edfbd8 100644 --- a/scheduler_test.go +++ b/scheduler_test.go @@ -82,8 +82,10 @@ func TestScheduler_Every_InvalidInterval(t *testing.T) { interval interface{} expectedError string }{ - {"zero", 0, ErrInvalidInterval.Error()}, - {"negative", -1, ErrInvalidInterval.Error()}, + {"zero int", 0, ErrInvalidInterval.Error()}, + {"negative int", -1, ErrInvalidInterval.Error()}, + {"negative time.Duration", -1 * time.Millisecond, ErrInvalidInterval.Error()}, + {"negative string duration", "-1ms", ErrInvalidInterval.Error()}, {"invalid string duration", "bad", "time: invalid duration \"bad\""}, } @@ -93,7 +95,7 @@ func TestScheduler_Every_InvalidInterval(t *testing.T) { t.Run(tc.description, func(t *testing.T) { _, err := s.Every(tc.interval).Do(func() {}) require.Error(t, err) - assert.EqualError(t, err, tc.expectedError) + assert.ErrorContains(t, err, tc.expectedError) }) } }