forked from fluxcd/flux
/
mock.go
111 lines (92 loc) · 2.4 KB
/
mock.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package registry
import (
"github.com/docker/distribution/manifest/schema1"
"github.com/pkg/errors"
"github.com/weaveworks/flux"
)
type mockClientAdapter struct {
imgs []flux.ImageDescription
err error
}
type mockRemote struct {
img flux.Image
tags []string
err error
}
func NewMockRemote(img flux.Image, tags []string, err error) Remote {
return &mockRemote{
img: img,
tags: tags,
err: err,
}
}
func (r *mockRemote) Tags(repository Repository) ([]string, error) {
return r.tags, r.err
}
func (r *mockRemote) Manifest(repository Repository, tag string) (flux.Image, error) {
if tag == "error" {
return flux.Image{}, errors.New("Mock is set to error when tag == error")
}
return r.img, r.err
}
func (r *mockRemote) Cancel() {
}
type mockDockerClient struct {
manifest func(repository, reference string) ([]schema1.History, error)
tags func(repository string) ([]string, error)
}
func NewMockDockerClient(manifest func(repository, reference string) ([]schema1.History, error), tags func(repository string) ([]string, error)) dockerRegistryInterface {
return &mockDockerClient{
manifest: manifest,
tags: tags,
}
}
func (m *mockDockerClient) Manifest(repository, reference string) ([]schema1.History, error) {
return m.manifest(repository, reference)
}
func (m *mockDockerClient) Tags(repository string) ([]string, error) {
return m.tags(repository)
}
type mockRemoteFactory struct {
r Remote
err error
}
func NewMockRemoteFactory(r Remote, err error) RemoteClientFactory {
return &mockRemoteFactory{
r: r,
err: err,
}
}
func (m *mockRemoteFactory) CreateFor(repository string) (Remote, error) {
return m.r, m.err
}
type mockRegistry struct {
imgs []flux.Image
err error
}
func NewMockRegistry(images []flux.Image, err error) Registry {
return &mockRegistry{
imgs: images,
err: err,
}
}
func (m *mockRegistry) GetRepository(repository Repository) ([]flux.Image, error) {
var imgs []flux.Image
for _, i := range m.imgs {
// include only if it's the same repository in the same place
if i.ImageID.NamespaceImage() == repository.NamespaceImage() {
imgs = append(imgs, i)
}
}
return imgs, m.err
}
func (m *mockRegistry) GetImage(repository Repository, tag string) (flux.Image, error) {
if len(m.imgs) > 0 {
for _, i := range m.imgs {
if i.String() == repository.ToImage(tag).String() {
return i, nil
}
}
}
return flux.Image{}, errors.New("not found")
}