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  }