56 lines
1.8 KiB
Go
56 lines
1.8 KiB
Go
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)
|
|
}
|