github.com/panekj/cli@v0.0.0-20230304125325-467dd2f3797e/internal/test/builders/task.go (about) 1 package builders 2 3 import ( 4 "time" 5 6 "github.com/docker/docker/api/types/swarm" 7 ) 8 9 var defaultTime = time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC) 10 11 // Task creates a task with default values . 12 // Any number of task function builder can be pass to augment it. 13 func Task(taskBuilders ...func(*swarm.Task)) *swarm.Task { 14 task := &swarm.Task{ 15 ID: "taskID", 16 Meta: swarm.Meta{ 17 CreatedAt: defaultTime, 18 }, 19 Annotations: swarm.Annotations{ 20 Name: "defaultTaskName", 21 }, 22 Spec: *TaskSpec(), 23 ServiceID: "rl02d5gwz6chzu7il5fhtb8be", 24 Slot: 1, 25 Status: *TaskStatus(), 26 DesiredState: swarm.TaskStateReady, 27 } 28 29 for _, builder := range taskBuilders { 30 builder(task) 31 } 32 33 return task 34 } 35 36 // TaskID sets the task ID 37 func TaskID(id string) func(*swarm.Task) { 38 return func(task *swarm.Task) { 39 task.ID = id 40 } 41 } 42 43 // TaskName sets the task name 44 func TaskName(name string) func(*swarm.Task) { 45 return func(task *swarm.Task) { 46 task.Annotations.Name = name 47 } 48 } 49 50 // TaskServiceID sets the task service's ID 51 func TaskServiceID(id string) func(*swarm.Task) { 52 return func(task *swarm.Task) { 53 task.ServiceID = id 54 } 55 } 56 57 // TaskNodeID sets the task's node id 58 func TaskNodeID(id string) func(*swarm.Task) { 59 return func(task *swarm.Task) { 60 task.NodeID = id 61 } 62 } 63 64 // TaskDesiredState sets the task's desired state 65 func TaskDesiredState(state swarm.TaskState) func(*swarm.Task) { 66 return func(task *swarm.Task) { 67 task.DesiredState = state 68 } 69 } 70 71 // TaskSlot sets the task's slot 72 func TaskSlot(slot int) func(*swarm.Task) { 73 return func(task *swarm.Task) { 74 task.Slot = slot 75 } 76 } 77 78 // WithStatus sets the task status 79 func WithStatus(statusBuilders ...func(*swarm.TaskStatus)) func(*swarm.Task) { 80 return func(task *swarm.Task) { 81 task.Status = *TaskStatus(statusBuilders...) 82 } 83 } 84 85 // TaskStatus creates a task status with default values . 86 // Any number of taskStatus function builder can be pass to augment it. 87 func TaskStatus(statusBuilders ...func(*swarm.TaskStatus)) *swarm.TaskStatus { 88 timestamp := defaultTime.Add(1 * time.Hour) 89 taskStatus := &swarm.TaskStatus{ 90 State: swarm.TaskStateReady, 91 Timestamp: timestamp, 92 } 93 94 for _, builder := range statusBuilders { 95 builder(taskStatus) 96 } 97 98 return taskStatus 99 } 100 101 // Timestamp sets the task status timestamp 102 func Timestamp(t time.Time) func(*swarm.TaskStatus) { 103 return func(taskStatus *swarm.TaskStatus) { 104 taskStatus.Timestamp = t 105 } 106 } 107 108 // StatusErr sets the tasks status error 109 func StatusErr(err string) func(*swarm.TaskStatus) { 110 return func(taskStatus *swarm.TaskStatus) { 111 taskStatus.Err = err 112 } 113 } 114 115 // TaskState sets the task's current state 116 func TaskState(state swarm.TaskState) func(*swarm.TaskStatus) { 117 return func(taskStatus *swarm.TaskStatus) { 118 taskStatus.State = state 119 } 120 } 121 122 // PortStatus sets the tasks port config status 123 // FIXME(vdemeester) should be a sub builder 👼 124 func PortStatus(portConfigs []swarm.PortConfig) func(*swarm.TaskStatus) { 125 return func(taskStatus *swarm.TaskStatus) { 126 taskStatus.PortStatus.Ports = portConfigs 127 } 128 } 129 130 // WithTaskSpec sets the task spec 131 func WithTaskSpec(specBuilders ...func(*swarm.TaskSpec)) func(*swarm.Task) { 132 return func(task *swarm.Task) { 133 task.Spec = *TaskSpec(specBuilders...) 134 } 135 } 136 137 // TaskSpec creates a task spec with default values . 138 // Any number of taskSpec function builder can be pass to augment it. 139 func TaskSpec(specBuilders ...func(*swarm.TaskSpec)) *swarm.TaskSpec { 140 taskSpec := &swarm.TaskSpec{ 141 ContainerSpec: &swarm.ContainerSpec{ 142 Image: "myimage:mytag", 143 }, 144 } 145 146 for _, builder := range specBuilders { 147 builder(taskSpec) 148 } 149 150 return taskSpec 151 } 152 153 // TaskImage sets the task's image 154 func TaskImage(image string) func(*swarm.TaskSpec) { 155 return func(taskSpec *swarm.TaskSpec) { 156 taskSpec.ContainerSpec.Image = image 157 } 158 }