|
|
|
package mocks
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
"github.com/containrrr/watchtower/pkg/container"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
t "github.com/containrrr/watchtower/pkg/types"
|
|
|
|
cli "github.com/docker/docker/client"
|
|
|
|
)
|
|
|
|
|
|
|
|
// MockClient is a mock that passes as a watchtower Client
|
|
|
|
type MockClient struct {
|
|
|
|
TestData *TestData
|
|
|
|
api cli.CommonAPIClient
|
|
|
|
pullImages bool
|
|
|
|
removeVolumes bool
|
|
|
|
}
|
|
|
|
|
|
|
|
// TestData is the data used to perform the test
|
|
|
|
type TestData struct {
|
|
|
|
TriedToRemoveImageCount int
|
|
|
|
NameOfContainerToKeep string
|
|
|
|
Containers []container.Container
|
|
|
|
}
|
|
|
|
|
|
|
|
// TriedToRemoveImage is a test helper function to check whether RemoveImageByID has been called
|
|
|
|
func (testdata *TestData) TriedToRemoveImage() bool {
|
|
|
|
return testdata.TriedToRemoveImageCount > 0
|
|
|
|
}
|
|
|
|
|
|
|
|
// CreateMockClient creates a mock watchtower Client for usage in tests
|
|
|
|
func CreateMockClient(data *TestData, api cli.CommonAPIClient, pullImages bool, removeVolumes bool) MockClient {
|
|
|
|
return MockClient{
|
|
|
|
data,
|
|
|
|
api,
|
|
|
|
pullImages,
|
|
|
|
removeVolumes,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// ListContainers is a mock method returning the provided container testdata
|
|
|
|
func (client MockClient) ListContainers(f t.Filter) ([]container.Container, error) {
|
|
|
|
return client.TestData.Containers, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// StopContainer is a mock method
|
|
|
|
func (client MockClient) StopContainer(c container.Container, d time.Duration) error {
|
|
|
|
if c.Name() == client.TestData.NameOfContainerToKeep {
|
|
|
|
return errors.New("tried to stop the instance we want to keep")
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// StartContainer is a mock method
|
|
|
|
func (client MockClient) StartContainer(c container.Container) (string, error) {
|
|
|
|
return "", nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// RenameContainer is a mock method
|
|
|
|
func (client MockClient) RenameContainer(c container.Container, s string) error {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// RemoveImageByID increments the TriedToRemoveImageCount on being called
|
|
|
|
func (client MockClient) RemoveImageByID(id string) error {
|
|
|
|
client.TestData.TriedToRemoveImageCount++
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetContainer is a mock method
|
|
|
|
func (client MockClient) GetContainer(containerID string) (container.Container, error) {
|
|
|
|
return container.Container{}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// ExecuteCommand is a mock method
|
|
|
|
func (client MockClient) ExecuteCommand(containerID string, command string, timeout int) error {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// IsContainerStale is always true for the mock client
|
|
|
|
func (client MockClient) IsContainerStale(c container.Container) (bool, error) {
|
|
|
|
return true, nil
|
|
|
|
}
|