github.com/flavio/docker@v0.1.3-0.20170117145210-f63d1a6eec47/cli/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 ( 10 defaultTime = time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC) 11 ) 12 13 // Task creates a task with default values . 14 // Any number of task function builder can be pass to augment it. 15 func Task(taskBuilders ...func(*swarm.Task)) *swarm.Task { 16 task := &swarm.Task{ 17 ID: "taskID", 18 Meta: swarm.Meta{ 19 CreatedAt: defaultTime, 20 }, 21 Annotations: swarm.Annotations{ 22 Name: "defaultTaskName", 23 }, 24 Spec: *TaskSpec(), 25 ServiceID: "rl02d5gwz6chzu7il5fhtb8be", 26 Slot: 1, 27 Status: *TaskStatus(), 28 DesiredState: swarm.TaskStateReady, 29 } 30 31 for _, builder := range taskBuilders { 32 builder(task) 33 } 34 35 return task 36 } 37 38 // TaskID sets the task ID 39 func TaskID(id string) func(*swarm.Task) { 40 return func(task *swarm.Task) { 41 task.ID = id 42 } 43 } 44 45 // ServiceID sets the task service's ID 46 func ServiceID(id string) func(*swarm.Task) { 47 return func(task *swarm.Task) { 48 task.ServiceID = id 49 } 50 } 51 52 // WithStatus sets the task status 53 func WithStatus(statusBuilders ...func(*swarm.TaskStatus)) func(*swarm.Task) { 54 return func(task *swarm.Task) { 55 task.Status = *TaskStatus(statusBuilders...) 56 } 57 } 58 59 // TaskStatus creates a task status with default values . 60 // Any number of taskStatus function builder can be pass to augment it. 61 func TaskStatus(statusBuilders ...func(*swarm.TaskStatus)) *swarm.TaskStatus { 62 timestamp := defaultTime.Add(1 * time.Hour) 63 taskStatus := &swarm.TaskStatus{ 64 State: swarm.TaskStateReady, 65 Timestamp: timestamp, 66 } 67 68 for _, builder := range statusBuilders { 69 builder(taskStatus) 70 } 71 72 return taskStatus 73 } 74 75 // Timestamp sets the task status timestamp 76 func Timestamp(t time.Time) func(*swarm.TaskStatus) { 77 return func(taskStatus *swarm.TaskStatus) { 78 taskStatus.Timestamp = t 79 } 80 } 81 82 // StatusErr sets the tasks status error 83 func StatusErr(err string) func(*swarm.TaskStatus) { 84 return func(taskStatus *swarm.TaskStatus) { 85 taskStatus.Err = err 86 } 87 } 88 89 // PortStatus sets the tasks port config status 90 // FIXME(vdemeester) should be a sub builder 👼 91 func PortStatus(portConfigs []swarm.PortConfig) func(*swarm.TaskStatus) { 92 return func(taskStatus *swarm.TaskStatus) { 93 taskStatus.PortStatus.Ports = portConfigs 94 } 95 } 96 97 // TaskSpec creates a task spec with default values . 98 // Any number of taskSpec function builder can be pass to augment it. 99 func TaskSpec(specBuilders ...func(*swarm.TaskSpec)) *swarm.TaskSpec { 100 taskSpec := &swarm.TaskSpec{ 101 ContainerSpec: swarm.ContainerSpec{ 102 Image: "myimage:mytag", 103 }, 104 } 105 106 for _, builder := range specBuilders { 107 builder(taskSpec) 108 } 109 110 return taskSpec 111 }