diff --git a/scheduler_test.go b/scheduler_test.go index 4689b233..a380ac64 100644 --- a/scheduler_test.go +++ b/scheduler_test.go @@ -1350,6 +1350,48 @@ func TestScheduler_RemoveJob(t *testing.T) { } } +func TestScheduler_RemoveLotsOfJobs(t *testing.T) { + goleak.VerifyNone(t) + tests := []struct { + name string + numJobs int + }{ + { + "10 successes", + 10, + }, + { + "100 successes", + 100, + }, + { + "1000 successes", + 1000, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + s := newTestScheduler(t) + + var ids []uuid.UUID + for i := 0; i < tt.numJobs; i++ { + j, err := s.NewJob(DurationJob(time.Second), NewTask(func() { time.Sleep(20 * time.Second) })) + require.NoError(t, err) + ids = append(ids, j.ID()) + } + + for _, id := range ids { + err := s.RemoveJob(id) + require.NoError(t, err) + } + + assert.Len(t, s.Jobs(), 0) + require.NoError(t, s.Shutdown()) + }) + } +} + func TestScheduler_WithEventListeners(t *testing.T) { goleak.VerifyNone(t) diff --git a/util.go b/util.go index 8bff9429..18986b36 100644 --- a/util.go +++ b/util.go @@ -44,18 +44,12 @@ func requestJob(id uuid.UUID, ch chan jobOutRequest) *internalJob { func requestJobCtx(ctx context.Context, id uuid.UUID, ch chan jobOutRequest) *internalJob { resp := make(chan internalJob, 1) - select { - case <-ctx.Done(): - return nil - default: - } - select { case ch <- jobOutRequest{ id: id, outChan: resp, }: - default: + case <-ctx.Done(): return nil } var j internalJob