github.com/jwhonce/docker@v0.6.7-0.20190327063223-da823cf3a5a3/internal/test/daemon/service.go (about)

     1  package daemon
     2  
     3  import (
     4  	"context"
     5  	"time"
     6  
     7  	"github.com/docker/docker/api/types"
     8  	"github.com/docker/docker/api/types/filters"
     9  	"github.com/docker/docker/api/types/swarm"
    10  	"github.com/docker/docker/internal/test"
    11  	"gotest.tools/assert"
    12  )
    13  
    14  // ServiceConstructor defines a swarm service constructor function
    15  type ServiceConstructor func(*swarm.Service)
    16  
    17  func (d *Daemon) createServiceWithOptions(t assert.TestingT, opts types.ServiceCreateOptions, f ...ServiceConstructor) string {
    18  	if ht, ok := t.(test.HelperT); ok {
    19  		ht.Helper()
    20  	}
    21  	var service swarm.Service
    22  	for _, fn := range f {
    23  		fn(&service)
    24  	}
    25  
    26  	cli := d.NewClientT(t)
    27  	defer cli.Close()
    28  
    29  	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
    30  	defer cancel()
    31  
    32  	res, err := cli.ServiceCreate(ctx, service.Spec, opts)
    33  	assert.NilError(t, err)
    34  	return res.ID
    35  }
    36  
    37  // CreateService creates a swarm service given the specified service constructor
    38  func (d *Daemon) CreateService(t assert.TestingT, f ...ServiceConstructor) string {
    39  	if ht, ok := t.(test.HelperT); ok {
    40  		ht.Helper()
    41  	}
    42  	return d.createServiceWithOptions(t, types.ServiceCreateOptions{}, f...)
    43  }
    44  
    45  // GetService returns the swarm service corresponding to the specified id
    46  func (d *Daemon) GetService(t assert.TestingT, id string) *swarm.Service {
    47  	if ht, ok := t.(test.HelperT); ok {
    48  		ht.Helper()
    49  	}
    50  	cli := d.NewClientT(t)
    51  	defer cli.Close()
    52  
    53  	service, _, err := cli.ServiceInspectWithRaw(context.Background(), id, types.ServiceInspectOptions{})
    54  	assert.NilError(t, err)
    55  	return &service
    56  }
    57  
    58  // GetServiceTasks returns the swarm tasks for the specified service
    59  func (d *Daemon) GetServiceTasks(t assert.TestingT, service string) []swarm.Task {
    60  	if ht, ok := t.(test.HelperT); ok {
    61  		ht.Helper()
    62  	}
    63  	cli := d.NewClientT(t)
    64  	defer cli.Close()
    65  
    66  	filterArgs := filters.NewArgs()
    67  	filterArgs.Add("desired-state", "running")
    68  	filterArgs.Add("service", service)
    69  
    70  	options := types.TaskListOptions{
    71  		Filters: filterArgs,
    72  	}
    73  
    74  	tasks, err := cli.TaskList(context.Background(), options)
    75  	assert.NilError(t, err)
    76  	return tasks
    77  }
    78  
    79  // UpdateService updates a swarm service with the specified service constructor
    80  func (d *Daemon) UpdateService(t assert.TestingT, service *swarm.Service, f ...ServiceConstructor) {
    81  	if ht, ok := t.(test.HelperT); ok {
    82  		ht.Helper()
    83  	}
    84  	cli := d.NewClientT(t)
    85  	defer cli.Close()
    86  
    87  	for _, fn := range f {
    88  		fn(service)
    89  	}
    90  
    91  	_, err := cli.ServiceUpdate(context.Background(), service.ID, service.Version, service.Spec, types.ServiceUpdateOptions{})
    92  	assert.NilError(t, err)
    93  }
    94  
    95  // RemoveService removes the specified service
    96  func (d *Daemon) RemoveService(t assert.TestingT, id string) {
    97  	if ht, ok := t.(test.HelperT); ok {
    98  		ht.Helper()
    99  	}
   100  	cli := d.NewClientT(t)
   101  	defer cli.Close()
   102  
   103  	err := cli.ServiceRemove(context.Background(), id)
   104  	assert.NilError(t, err)
   105  }
   106  
   107  // ListServices returns the list of the current swarm services
   108  func (d *Daemon) ListServices(t assert.TestingT) []swarm.Service {
   109  	if ht, ok := t.(test.HelperT); ok {
   110  		ht.Helper()
   111  	}
   112  	cli := d.NewClientT(t)
   113  	defer cli.Close()
   114  
   115  	services, err := cli.ServiceList(context.Background(), types.ServiceListOptions{})
   116  	assert.NilError(t, err)
   117  	return services
   118  }
   119  
   120  // GetTask returns the swarm task identified by the specified id
   121  func (d *Daemon) GetTask(t assert.TestingT, id string) swarm.Task {
   122  	if ht, ok := t.(test.HelperT); ok {
   123  		ht.Helper()
   124  	}
   125  	cli := d.NewClientT(t)
   126  	defer cli.Close()
   127  
   128  	task, _, err := cli.TaskInspectWithRaw(context.Background(), id)
   129  	assert.NilError(t, err)
   130  	return task
   131  }