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  }