e8dc902781
Integration tests will now configure clients to propagate traces as well as create spans for all tests. Some extra changes were needed (or desired for trace propagation) in the test helpers to pass through tracing spans via context. Signed-off-by: Brian Goff <cpuguy83@gmail.com>
119 lines
3.2 KiB
Go
119 lines
3.2 KiB
Go
package daemon
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/docker/docker/api/types/filters"
|
|
"github.com/docker/docker/api/types/swarm"
|
|
"gotest.tools/v3/assert"
|
|
)
|
|
|
|
// ServiceConstructor defines a swarm service constructor function
|
|
type ServiceConstructor func(*swarm.Service)
|
|
|
|
func (d *Daemon) createServiceWithOptions(ctx context.Context, t testing.TB, opts types.ServiceCreateOptions, f ...ServiceConstructor) string {
|
|
t.Helper()
|
|
var service swarm.Service
|
|
for _, fn := range f {
|
|
fn(&service)
|
|
}
|
|
|
|
cli := d.NewClientT(t)
|
|
defer cli.Close()
|
|
|
|
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
|
|
defer cancel()
|
|
|
|
res, err := cli.ServiceCreate(ctx, service.Spec, opts)
|
|
assert.NilError(t, err)
|
|
return res.ID
|
|
}
|
|
|
|
// CreateService creates a swarm service given the specified service constructor
|
|
func (d *Daemon) CreateService(ctx context.Context, t testing.TB, f ...ServiceConstructor) string {
|
|
t.Helper()
|
|
return d.createServiceWithOptions(ctx, t, types.ServiceCreateOptions{}, f...)
|
|
}
|
|
|
|
// GetService returns the swarm service corresponding to the specified id
|
|
func (d *Daemon) GetService(ctx context.Context, t testing.TB, id string) *swarm.Service {
|
|
t.Helper()
|
|
cli := d.NewClientT(t)
|
|
defer cli.Close()
|
|
|
|
service, _, err := cli.ServiceInspectWithRaw(ctx, id, types.ServiceInspectOptions{})
|
|
assert.NilError(t, err)
|
|
return &service
|
|
}
|
|
|
|
// GetServiceTasks returns the swarm tasks for the specified service
|
|
func (d *Daemon) GetServiceTasks(ctx context.Context, t testing.TB, service string, additionalFilters ...filters.KeyValuePair) []swarm.Task {
|
|
t.Helper()
|
|
cli := d.NewClientT(t)
|
|
defer cli.Close()
|
|
|
|
filterArgs := filters.NewArgs(
|
|
filters.Arg("desired-state", "running"),
|
|
filters.Arg("service", service),
|
|
)
|
|
for _, filter := range additionalFilters {
|
|
filterArgs.Add(filter.Key, filter.Value)
|
|
}
|
|
|
|
options := types.TaskListOptions{
|
|
Filters: filterArgs,
|
|
}
|
|
|
|
tasks, err := cli.TaskList(ctx, options)
|
|
assert.NilError(t, err)
|
|
return tasks
|
|
}
|
|
|
|
// UpdateService updates a swarm service with the specified service constructor
|
|
func (d *Daemon) UpdateService(ctx context.Context, t testing.TB, service *swarm.Service, f ...ServiceConstructor) {
|
|
t.Helper()
|
|
cli := d.NewClientT(t)
|
|
defer cli.Close()
|
|
|
|
for _, fn := range f {
|
|
fn(service)
|
|
}
|
|
|
|
_, err := cli.ServiceUpdate(ctx, service.ID, service.Version, service.Spec, types.ServiceUpdateOptions{})
|
|
assert.NilError(t, err)
|
|
}
|
|
|
|
// RemoveService removes the specified service
|
|
func (d *Daemon) RemoveService(ctx context.Context, t testing.TB, id string) {
|
|
t.Helper()
|
|
cli := d.NewClientT(t)
|
|
defer cli.Close()
|
|
|
|
err := cli.ServiceRemove(ctx, id)
|
|
assert.NilError(t, err)
|
|
}
|
|
|
|
// ListServices returns the list of the current swarm services
|
|
func (d *Daemon) ListServices(ctx context.Context, t testing.TB) []swarm.Service {
|
|
t.Helper()
|
|
cli := d.NewClientT(t)
|
|
defer cli.Close()
|
|
|
|
services, err := cli.ServiceList(ctx, types.ServiceListOptions{})
|
|
assert.NilError(t, err)
|
|
return services
|
|
}
|
|
|
|
// GetTask returns the swarm task identified by the specified id
|
|
func (d *Daemon) GetTask(ctx context.Context, t testing.TB, id string) swarm.Task {
|
|
t.Helper()
|
|
cli := d.NewClientT(t)
|
|
defer cli.Close()
|
|
|
|
task, _, err := cli.TaskInspectWithRaw(ctx, id)
|
|
assert.NilError(t, err)
|
|
return task
|
|
}
|