package external import ( "context" "coopcloud.tech/abra/pkg/upstream/convert" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/swarm" dockerClient "github.com/docker/docker/client" "github.com/stretchr/testify/mock" ) type DockerClient interface { GetStackServices(ctx context.Context, dockerclient dockerClient.APIClient, namespace string) ([]swarm.Service, error) } type AbraDockerClient struct{} func (a *AbraDockerClient) GetStackServices(ctx context.Context, dockerclient dockerClient.APIClient, namespace string) ([]swarm.Service, error) { return dockerclient.ServiceList(ctx, types.ServiceListOptions{Filters: a.getStackServiceFilter(namespace)}) } func (a *AbraDockerClient) getStackFilter(namespace string) filters.Args { filter := filters.NewArgs() filter.Add("label", convert.LabelNamespace+"="+namespace) return filter } func (a *AbraDockerClient) getStackServiceFilter(namespace string) filters.Args { return a.getStackFilter(namespace) } type MockDockerClient struct { mock.Mock } func (a *MockDockerClient) GetStackServices(ctx context.Context, dockerclient dockerClient.APIClient, namespace string) ([]swarm.Service, error) { callArgs := []interface{}{ctx} callArgs = append(callArgs, dockerclient) callArgs = append(callArgs, namespace) args := a.Called(callArgs...) return args.Get(0).([]swarm.Service), args.Error(1) } func (a *MockDockerClient) getStackFilter(namespace string) filters.Args { callArgs := []interface{}{namespace} args := a.Called(callArgs...) return args.Get(0).(filters.Args) } func (a *MockDockerClient) getStackServiceFilter(namespace string) filters.Args { callArgs := []interface{}{namespace} args := a.Called(callArgs...) return args.Get(0).(filters.Args) }