Files
docker-cli/cli/command/service/ps_test.go
Sebastiaan van Stijn 053aa376ea vendor: github.com/moby/moby/api, moby/moby/client master
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-10-29 23:17:29 +01:00

135 lines
3.9 KiB
Go

package service
import (
"context"
"testing"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/opts"
"github.com/moby/moby/api/types/swarm"
"github.com/moby/moby/api/types/system"
"github.com/moby/moby/client"
"gotest.tools/v3/assert"
is "gotest.tools/v3/assert/cmp"
)
func TestCreateFilter(t *testing.T) {
apiClient := &fakeClient{
serviceListFunc: func(ctx context.Context, options client.ServiceListOptions) (client.ServiceListResult, error) {
return client.ServiceListResult{
Items: []swarm.Service{
{ID: "idmatch"},
{ID: "idprefixmatch"},
newService("cccccccc", "namematch"),
newService("01010101", "notfoundprefix"),
},
}, nil
},
}
filter := opts.NewFilterOpt()
assert.NilError(t, filter.Set("node=somenode"))
options := psOptions{
services: []string{"idmatch", "idprefix", "namematch", "notfound"},
filter: filter,
}
actual, notfound, err := createFilter(context.Background(), apiClient, options)
assert.NilError(t, err)
assert.Check(t, is.DeepEqual(notfound, []string{"no such service: notfound"}))
expected := make(client.Filters).Add("service", "idmatch").Add("service", "idprefixmatch").Add("service", "cccccccc").Add("node", "somenode")
assert.DeepEqual(t, expected, actual)
}
func TestCreateFilterWithAmbiguousIDPrefixError(t *testing.T) {
apiClient := &fakeClient{
serviceListFunc: func(ctx context.Context, options client.ServiceListOptions) (client.ServiceListResult, error) {
return client.ServiceListResult{
Items: []swarm.Service{
{ID: "aaaone"},
{ID: "aaatwo"},
},
}, nil
},
}
_, _, err := createFilter(context.Background(), apiClient, psOptions{
services: []string{"aaa"},
filter: opts.NewFilterOpt(),
})
assert.Error(t, err, "multiple services found with provided prefix: aaa")
}
func TestCreateFilterNoneFound(t *testing.T) {
apiClient := &fakeClient{}
options := psOptions{
services: []string{"foo", "notfound"},
filter: opts.NewFilterOpt(),
}
_, _, err := createFilter(context.Background(), apiClient, options)
assert.Error(t, err, "no such service: foo\nno such service: notfound")
}
func TestRunPSWarnsOnNotFound(t *testing.T) {
apiClient := &fakeClient{
serviceListFunc: func(ctx context.Context, options client.ServiceListOptions) (client.ServiceListResult, error) {
return client.ServiceListResult{
Items: []swarm.Service{{ID: "foo"}},
}, nil
},
}
cli := test.NewFakeCli(apiClient)
options := psOptions{
services: []string{"foo", "bar"},
filter: opts.NewFilterOpt(),
format: "{{.ID}}",
}
ctx := context.Background()
err := runPS(ctx, cli, options)
assert.Error(t, err, "no such service: bar")
}
func TestRunPSQuiet(t *testing.T) {
apiClient := &fakeClient{
serviceListFunc: func(ctx context.Context, options client.ServiceListOptions) (client.ServiceListResult, error) {
return client.ServiceListResult{
Items: []swarm.Service{{ID: "foo"}},
}, nil
},
taskListFunc: func(ctx context.Context, options client.TaskListOptions) (client.TaskListResult, error) {
return client.TaskListResult{
Items: []swarm.Task{{ID: "sxabyp0obqokwekpun4rjo0b3"}},
}, nil
},
}
cli := test.NewFakeCli(apiClient)
ctx := context.Background()
err := runPS(ctx, cli, psOptions{services: []string{"foo"}, quiet: true, filter: opts.NewFilterOpt()})
assert.NilError(t, err)
assert.Check(t, is.Equal("sxabyp0obqokwekpun4rjo0b3\n", cli.OutBuffer().String()))
}
func TestUpdateNodeFilter(t *testing.T) {
selfNodeID := "foofoo"
filter := make(client.Filters).Add("node", "one", "two", "self")
apiClient := &fakeClient{
infoFunc: func(_ context.Context) (client.SystemInfoResult, error) {
return client.SystemInfoResult{
Info: system.Info{
Swarm: swarm.Info{NodeID: selfNodeID},
},
}, nil
},
}
err := updateNodeFilter(context.Background(), apiClient, filter)
assert.NilError(t, err)
expected := make(client.Filters).Add("node", "one", "two", selfNodeID)
assert.DeepEqual(t, expected, filter)
}