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  }