prevent panics when waitgroup == nil (#1423)
This commit is contained in:
2 files changed
+59
-3
No files matched your search
@@ -138,6 +138,12 @@ func (s *Scheduler) Start(ctx context.Context, wg *sync.WaitGroup) error {
|
||||
event.WriteSysEvent(ctx, op, "scheduler already started, skipping")
|
||||
return nil
|
||||
}
|
||||
if ctx == nil {
|
||||
return errors.New(errors.InvalidParameter, op, "missing context")
|
||||
}
|
||||
if wg == nil {
|
||||
return errors.New(errors.InvalidParameter, op, "missing wait group")
|
||||
}
|
||||
|
||||
if err := ctx.Err(); err != nil {
|
||||
return errors.Wrap(err, op)
|
||||
@@ -154,9 +160,7 @@ func (s *Scheduler) Start(ctx context.Context, wg *sync.WaitGroup) error {
|
||||
return errors.Wrap(err, op)
|
||||
}
|
||||
|
||||
if wg != nil {
|
||||
wg.Add(2)
|
||||
}
|
||||
wg.Add(2)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
s.start(ctx)
|
||||
|
||||
@@ -2,6 +2,7 @@ package scheduler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -366,3 +367,54 @@ func TestScheduler_UpdateJobNextRunInAtLeast(t *testing.T) {
|
||||
assert.Equal(previousNextRun.Add(-1*time.Hour).Round(time.Minute), dbJob.NextScheduledRun.AsTime().Round(time.Minute))
|
||||
})
|
||||
}
|
||||
|
||||
func TestScheduler_Start(t *testing.T) {
|
||||
t.Parallel()
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
wrapper := db.TestWrapper(t)
|
||||
iam.TestRepo(t, conn, wrapper)
|
||||
|
||||
sched := TestScheduler(t, conn, wrapper)
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
ctx context.Context
|
||||
wg *sync.WaitGroup
|
||||
wantErr bool
|
||||
wantErrContains string
|
||||
}{
|
||||
|
||||
{
|
||||
name: "missing-ctx",
|
||||
wg: &sync.WaitGroup{},
|
||||
wantErr: true,
|
||||
wantErrContains: "missing context",
|
||||
},
|
||||
{
|
||||
name: "missing-waitgroup",
|
||||
ctx: context.Background(),
|
||||
wantErr: true,
|
||||
wantErrContains: "missing wait group",
|
||||
},
|
||||
|
||||
{
|
||||
name: "valid",
|
||||
ctx: context.Background(),
|
||||
wg: &sync.WaitGroup{},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
assert, require := assert.New(t), require.New(t)
|
||||
err := sched.Start(tt.ctx, tt.wg)
|
||||
if tt.wantErr {
|
||||
require.Error(err)
|
||||
if tt.wantErrContains != "" {
|
||||
assert.Contains(err.Error(), tt.wantErrContains)
|
||||
}
|
||||
return
|
||||
}
|
||||
require.NoError(err)
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user