|
|
|
package mocks
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/containrrr/watchtower/pkg/container"
|
|
|
|
wt "github.com/containrrr/watchtower/pkg/types"
|
|
|
|
"github.com/docker/docker/api/types"
|
|
|
|
dockerContainer "github.com/docker/docker/api/types/container"
|
|
|
|
"github.com/docker/go-connections/nat"
|
|
|
|
)
|
|
|
|
|
|
|
|
// CreateMockContainer creates a container substitute valid for testing
|
|
|
|
func CreateMockContainer(id string, name string, image string, created time.Time) wt.Container {
|
|
|
|
content := types.ContainerJSON{
|
|
|
|
ContainerJSONBase: &types.ContainerJSONBase{
|
|
|
|
ID: id,
|
|
|
|
Image: image,
|
|
|
|
Name: name,
|
|
|
|
Created: created.String(),
|
|
|
|
HostConfig: &dockerContainer.HostConfig{
|
|
|
|
PortBindings: map[nat.Port][]nat.PortBinding{},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Config: &dockerContainer.Config{
|
|
|
|
Image: image,
|
|
|
|
Labels: make(map[string]string),
|
|
|
|
ExposedPorts: map[nat.Port]struct{}{},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
return container.NewContainer(
|
|
|
|
&content,
|
|
|
|
CreateMockImageInfo(image),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
// CreateMockImageInfo returns a mock image info struct based on the passed image
|
|
|
|
func CreateMockImageInfo(image string) *types.ImageInspect {
|
|
|
|
return &types.ImageInspect{
|
|
|
|
ID: image,
|
|
|
|
RepoDigests: []string{
|
|
|
|
image,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// CreateMockContainerWithImageInfo should only be used for testing
|
|
|
|
func CreateMockContainerWithImageInfo(id string, name string, image string, created time.Time, imageInfo types.ImageInspect) wt.Container {
|
|
|
|
return CreateMockContainerWithImageInfoP(id, name, image, created, &imageInfo)
|
|
|
|
}
|
|
|
|
|
|
|
|
// CreateMockContainerWithImageInfoP should only be used for testing
|
|
|
|
func CreateMockContainerWithImageInfoP(id string, name string, image string, created time.Time, imageInfo *types.ImageInspect) wt.Container {
|
|
|
|
content := types.ContainerJSON{
|
|
|
|
ContainerJSONBase: &types.ContainerJSONBase{
|
|
|
|
ID: id,
|
|
|
|
Image: image,
|
|
|
|
Name: name,
|
|
|
|
Created: created.String(),
|
|
|
|
},
|
|
|
|
Config: &dockerContainer.Config{
|
|
|
|
Image: image,
|
|
|
|
Labels: make(map[string]string),
|
|
|
|
},
|
|
|
|
}
|
|
|
|
return container.NewContainer(
|
|
|
|
&content,
|
|
|
|
imageInfo,
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
// CreateMockContainerWithDigest should only be used for testing
|
|
|
|
func CreateMockContainerWithDigest(id string, name string, image string, created time.Time, digest string) wt.Container {
|
|
|
|
c := CreateMockContainer(id, name, image, created)
|
|
|
|
c.ImageInfo().RepoDigests = []string{digest}
|
|
|
|
return c
|
|
|
|
}
|
|
|
|
|
|
|
|
// CreateMockContainerWithConfig creates a container substitute valid for testing
|
|
|
|
func CreateMockContainerWithConfig(id string, name string, image string, running bool, restarting bool, created time.Time, config *dockerContainer.Config) wt.Container {
|
|
|
|
content := types.ContainerJSON{
|
|
|
|
ContainerJSONBase: &types.ContainerJSONBase{
|
|
|
|
ID: id,
|
|
|
|
Image: image,
|
|
|
|
Name: name,
|
|
|
|
State: &types.ContainerState{
|
|
|
|
Running: running,
|
|
|
|
Restarting: restarting,
|
|
|
|
},
|
|
|
|
Created: created.String(),
|
|
|
|
HostConfig: &dockerContainer.HostConfig{
|
|
|
|
PortBindings: map[nat.Port][]nat.PortBinding{},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Config: config,
|
|
|
|
}
|
|
|
|
return container.NewContainer(
|
|
|
|
&content,
|
|
|
|
CreateMockImageInfo(image),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
// CreateContainerForProgress creates a container substitute for tracking session/update progress
|
|
|
|
func CreateContainerForProgress(index int, idPrefix int, nameFormat string) (wt.Container, wt.ImageID) {
|
|
|
|
indexStr := strconv.Itoa(idPrefix + index)
|
|
|
|
mockID := indexStr + strings.Repeat("0", 61-len(indexStr))
|
|
|
|
contID := "c79" + mockID
|
|
|
|
contName := fmt.Sprintf(nameFormat, index+1)
|
|
|
|
oldImgID := "01d" + mockID
|
|
|
|
newImgID := "d0a" + mockID
|
|
|
|
imageName := fmt.Sprintf("mock/%s:latest", contName)
|
|
|
|
config := &dockerContainer.Config{
|
|
|
|
Image: imageName,
|
|
|
|
}
|
|
|
|
c := CreateMockContainerWithConfig(contID, contName, oldImgID, true, false, time.Now(), config)
|
|
|
|
return c, wt.ImageID(newImgID)
|
|
|
|
}
|
|
|
|
|
|
|
|
// CreateMockContainerWithLinks should only be used for testing
|
|
|
|
func CreateMockContainerWithLinks(id string, name string, image string, created time.Time, links []string, imageInfo *types.ImageInspect) wt.Container {
|
|
|
|
content := types.ContainerJSON{
|
|
|
|
ContainerJSONBase: &types.ContainerJSONBase{
|
|
|
|
ID: id,
|
|
|
|
Image: image,
|
|
|
|
Name: name,
|
|
|
|
Created: created.String(),
|
|
|
|
HostConfig: &dockerContainer.HostConfig{
|
|
|
|
Links: links,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Config: &dockerContainer.Config{
|
|
|
|
Image: image,
|
|
|
|
Labels: make(map[string]string),
|
|
|
|
},
|
|
|
|
}
|
|
|
|
return container.NewContainer(
|
|
|
|
&content,
|
|
|
|
imageInfo,
|
|
|
|
)
|
|
|
|
}
|