Protect handler call against panic

This commit is contained in:
Ken Hibino
2019-11-27 14:03:04 -08:00
parent 47e2a57d05
commit d4f136ebc9
2 changed files with 68 additions and 1 deletions

55
processor_test.go Normal file
View File

@@ -0,0 +1,55 @@
package asynq
import (
"fmt"
"testing"
)
func TestPerform(t *testing.T) {
tests := []struct {
desc string
handler TaskHandler
task *Task
wantErr bool
}{
{
desc: "handler returns nil",
handler: func(t *Task) error {
fmt.Println("processing...")
return nil
},
task: &Task{Type: "gen_thumbnail", Payload: map[string]interface{}{"src": "some/img/path"}},
wantErr: false,
},
{
desc: "handler returns error",
handler: func(t *Task) error {
fmt.Println("processing...")
return fmt.Errorf("something went wrong")
},
task: &Task{Type: "gen_thumbnail", Payload: map[string]interface{}{"src": "some/img/path"}},
wantErr: true,
},
{
desc: "handler panics",
handler: func(t *Task) error {
fmt.Println("processing...")
panic("something went terribly wrong")
},
task: &Task{Type: "gen_thumbnail", Payload: map[string]interface{}{"src": "some/img/path"}},
wantErr: true,
},
}
for _, tc := range tests {
got := perform(tc.handler, tc.task)
if !tc.wantErr && got != nil {
t.Errorf("%s: perform() = %v, want nil", tc.desc, got)
continue
}
if tc.wantErr && got == nil {
t.Errorf("%s: perform() = nil, want non-nil error", tc.desc)
continue
}
}
}