mirror of
https://github.com/hibiken/asynq.git
synced 2024-12-26 15:52:18 +08:00
Add TaskMessageBuilder type as a test helper
This commit is contained in:
parent
088be63ee4
commit
eb27b0fe1e
80
internal/asynqtest/builder.go
Normal file
80
internal/asynqtest/builder.go
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
package asynqtest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/hibiken/asynq/internal/base"
|
||||||
|
)
|
||||||
|
|
||||||
|
func makeDefaultTaskMessage() *base.TaskMessage {
|
||||||
|
return &base.TaskMessage{
|
||||||
|
ID: uuid.NewString(),
|
||||||
|
Type: "default_task",
|
||||||
|
Queue: "default",
|
||||||
|
Retry: 25,
|
||||||
|
Timeout: 1800, // default timeout of 30 mins
|
||||||
|
Deadline: 0, // no deadline
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type TaskMessageBuilder struct {
|
||||||
|
msg *base.TaskMessage
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *TaskMessageBuilder) lazyInit() {
|
||||||
|
if b.msg == nil {
|
||||||
|
b.msg = makeDefaultTaskMessage()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *TaskMessageBuilder) Build() *base.TaskMessage {
|
||||||
|
b.lazyInit()
|
||||||
|
return b.msg
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *TaskMessageBuilder) SetType(typename string) *TaskMessageBuilder {
|
||||||
|
b.lazyInit()
|
||||||
|
b.msg.Type = typename
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *TaskMessageBuilder) SetPayload(payload []byte) *TaskMessageBuilder {
|
||||||
|
b.lazyInit()
|
||||||
|
b.msg.Payload = payload
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *TaskMessageBuilder) SetQueue(qname string) *TaskMessageBuilder {
|
||||||
|
b.lazyInit()
|
||||||
|
b.msg.Queue = qname
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *TaskMessageBuilder) SetRetry(n int) *TaskMessageBuilder {
|
||||||
|
b.lazyInit()
|
||||||
|
b.msg.Retry = n
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *TaskMessageBuilder) SetTimeout(timeout time.Duration) *TaskMessageBuilder {
|
||||||
|
b.lazyInit()
|
||||||
|
b.msg.Timeout = int64(timeout.Seconds())
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *TaskMessageBuilder) SetDeadline(deadline time.Time) *TaskMessageBuilder {
|
||||||
|
b.lazyInit()
|
||||||
|
b.msg.Deadline = deadline.Unix()
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *TaskMessageBuilder) SetGroup(gname string) *TaskMessageBuilder {
|
||||||
|
b.lazyInit()
|
||||||
|
b.msg.GroupKey = gname
|
||||||
|
return b
|
||||||
|
}
|
94
internal/asynqtest/builder_test.go
Normal file
94
internal/asynqtest/builder_test.go
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
package asynqtest
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user