github.com/wfusion/gofusion@v1.1.14/common/infra/asynq/pkg/testutil/builder.go (about) 1 // Copyright 2022 Kentaro Hibino. All rights reserved. 2 // Use of this source code is governed by a MIT license 3 // that can be found in the LICENSE file. 4 5 package testutil 6 7 import ( 8 "time" 9 10 "github.com/google/uuid" 11 "github.com/wfusion/gofusion/common/infra/asynq/pkg/base" 12 ) 13 14 func makeDefaultTaskMessage() *base.TaskMessage { 15 return &base.TaskMessage{ 16 ID: uuid.NewString(), 17 Type: "default_task", 18 Queue: "default", 19 Retry: 25, 20 Timeout: 1800, // default timeout of 30 mins 21 Deadline: 0, // no deadline 22 } 23 } 24 25 type TaskMessageBuilder struct { 26 msg *base.TaskMessage 27 } 28 29 func NewTaskMessageBuilder() *TaskMessageBuilder { 30 return &TaskMessageBuilder{} 31 } 32 33 func (b *TaskMessageBuilder) lazyInit() { 34 if b.msg == nil { 35 b.msg = makeDefaultTaskMessage() 36 } 37 } 38 39 func (b *TaskMessageBuilder) Build() *base.TaskMessage { 40 b.lazyInit() 41 return b.msg 42 } 43 44 func (b *TaskMessageBuilder) SetType(typename string) *TaskMessageBuilder { 45 b.lazyInit() 46 b.msg.Type = typename 47 return b 48 } 49 50 func (b *TaskMessageBuilder) SetPayload(payload []byte) *TaskMessageBuilder { 51 b.lazyInit() 52 b.msg.Payload = payload 53 return b 54 } 55 56 func (b *TaskMessageBuilder) SetQueue(qname string) *TaskMessageBuilder { 57 b.lazyInit() 58 b.msg.Queue = qname 59 return b 60 } 61 62 func (b *TaskMessageBuilder) SetRetry(n int) *TaskMessageBuilder { 63 b.lazyInit() 64 b.msg.Retry = n 65 return b 66 } 67 68 func (b *TaskMessageBuilder) SetTimeout(timeout time.Duration) *TaskMessageBuilder { 69 b.lazyInit() 70 b.msg.Timeout = int64(timeout.Seconds()) 71 return b 72 } 73 74 func (b *TaskMessageBuilder) SetDeadline(deadline time.Time) *TaskMessageBuilder { 75 b.lazyInit() 76 b.msg.Deadline = deadline.Unix() 77 return b 78 } 79 80 func (b *TaskMessageBuilder) SetGroup(gname string) *TaskMessageBuilder { 81 b.lazyInit() 82 b.msg.GroupKey = gname 83 return b 84 }