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 }