2022-03-07 08:51:35 +08:00
|
|
|
// Copyright 2022 Kentaro Hibino. All rights reserved.
|
|
|
|
// Use of this source code is governed by a MIT license
|
|
|
|
// that can be found in the LICENSE file.
|
|
|
|
|
2022-03-19 22:16:55 +08:00
|
|
|
package testutil
|
2022-03-07 08:51:35 +08:00
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
|
|
"github.com/google/go-cmp/cmp/cmpopts"
|
|
|
|
"github.com/hibiken/asynq/internal/base"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestTaskMessageBuilder(t *testing.T) {
|
|
|
|
tests := []struct {
|
|
|
|
desc string
|
|
|
|
ops func(b *TaskMessageBuilder) // operations to perform on the builder
|
|
|
|
want *base.TaskMessage
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
desc: "zero value and build",
|
|
|
|
ops: nil,
|
|
|
|
want: &base.TaskMessage{
|
|
|
|
Type: "default_task",
|
|
|
|
Queue: "default",
|
|
|
|
Payload: nil,
|
|
|
|
Retry: 25,
|
|
|
|
Timeout: 1800, // 30m
|
|
|
|
Deadline: 0,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "with type, payload, and queue",
|
|
|
|
ops: func(b *TaskMessageBuilder) {
|
|
|
|
b.SetType("foo").SetPayload([]byte("hello")).SetQueue("myqueue")
|
|
|
|
},
|
|
|
|
want: &base.TaskMessage{
|
|
|
|
Type: "foo",
|
|
|
|
Queue: "myqueue",
|
|
|
|
Payload: []byte("hello"),
|
|
|
|
Retry: 25,
|
|
|
|
Timeout: 1800, // 30m
|
|
|
|
Deadline: 0,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "with retry, timeout, and deadline",
|
|
|
|
ops: func(b *TaskMessageBuilder) {
|
|
|
|
b.SetRetry(1).
|
|
|
|
SetTimeout(20 * time.Second).
|
|
|
|
SetDeadline(time.Date(2017, 3, 6, 0, 0, 0, 0, time.UTC))
|
|
|
|
},
|
|
|
|
want: &base.TaskMessage{
|
|
|
|
Type: "default_task",
|
|
|
|
Queue: "default",
|
|
|
|
Payload: nil,
|
|
|
|
Retry: 1,
|
|
|
|
Timeout: 20,
|
|
|
|
Deadline: time.Date(2017, 3, 6, 0, 0, 0, 0, time.UTC).Unix(),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "with group",
|
|
|
|
ops: func(b *TaskMessageBuilder) {
|
|
|
|
b.SetGroup("mygroup")
|
|
|
|
},
|
|
|
|
want: &base.TaskMessage{
|
|
|
|
Type: "default_task",
|
|
|
|
Queue: "default",
|
|
|
|
Payload: nil,
|
|
|
|
Retry: 25,
|
|
|
|
Timeout: 1800,
|
|
|
|
Deadline: 0,
|
|
|
|
GroupKey: "mygroup",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
cmpOpts := []cmp.Option{cmpopts.IgnoreFields(base.TaskMessage{}, "ID")}
|
|
|
|
|
|
|
|
for _, tc := range tests {
|
|
|
|
var b TaskMessageBuilder
|
|
|
|
if tc.ops != nil {
|
|
|
|
tc.ops(&b)
|
|
|
|
}
|
|
|
|
|
|
|
|
got := b.Build()
|
|
|
|
if diff := cmp.Diff(tc.want, got, cmpOpts...); diff != "" {
|
|
|
|
t.Errorf("%s: TaskMessageBuilder.Build() = %+v, want %+v;\n(-want,+got)\n%s",
|
|
|
|
tc.desc, got, tc.want, diff)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|