Browse code

Allow to mock V2MetadataService in unit tests

Signed-off-by: Michal Minář <miminar@redhat.com>

Michal Minář authored on 2016/09/22 00:01:09
Showing 3 changed files
... ...
@@ -13,10 +13,21 @@ import (
13 13
 
14 14
 // V2MetadataService maps layer IDs to a set of known metadata for
15 15
 // the layer.
16
-type V2MetadataService struct {
16
+type V2MetadataService interface {
17
+	GetMetadata(diffID layer.DiffID) ([]V2Metadata, error)
18
+	GetDiffID(dgst digest.Digest) (layer.DiffID, error)
19
+	Add(diffID layer.DiffID, metadata V2Metadata) error
20
+	TagAndAdd(diffID layer.DiffID, hmacKey []byte, metadata V2Metadata) error
21
+	Remove(metadata V2Metadata) error
22
+}
23
+
24
+// v2MetadataService implements V2MetadataService
25
+type v2MetadataService struct {
17 26
 	store Store
18 27
 }
19 28
 
29
+var _ V2MetadataService = &v2MetadataService{}
30
+
20 31
 // V2Metadata contains the digest and source repository information for a layer.
21 32
 type V2Metadata struct {
22 33
 	Digest           digest.Digest
... ...
@@ -90,30 +101,30 @@ type authConfigKeyInput struct {
90 90
 const maxMetadata = 50
91 91
 
92 92
 // NewV2MetadataService creates a new diff ID to v2 metadata mapping service.
93
-func NewV2MetadataService(store Store) *V2MetadataService {
94
-	return &V2MetadataService{
93
+func NewV2MetadataService(store Store) V2MetadataService {
94
+	return &v2MetadataService{
95 95
 		store: store,
96 96
 	}
97 97
 }
98 98
 
99
-func (serv *V2MetadataService) diffIDNamespace() string {
99
+func (serv *v2MetadataService) diffIDNamespace() string {
100 100
 	return "v2metadata-by-diffid"
101 101
 }
102 102
 
103
-func (serv *V2MetadataService) digestNamespace() string {
103
+func (serv *v2MetadataService) digestNamespace() string {
104 104
 	return "diffid-by-digest"
105 105
 }
106 106
 
107
-func (serv *V2MetadataService) diffIDKey(diffID layer.DiffID) string {
107
+func (serv *v2MetadataService) diffIDKey(diffID layer.DiffID) string {
108 108
 	return string(digest.Digest(diffID).Algorithm()) + "/" + digest.Digest(diffID).Hex()
109 109
 }
110 110
 
111
-func (serv *V2MetadataService) digestKey(dgst digest.Digest) string {
111
+func (serv *v2MetadataService) digestKey(dgst digest.Digest) string {
112 112
 	return string(dgst.Algorithm()) + "/" + dgst.Hex()
113 113
 }
114 114
 
115 115
 // GetMetadata finds the metadata associated with a layer DiffID.
116
-func (serv *V2MetadataService) GetMetadata(diffID layer.DiffID) ([]V2Metadata, error) {
116
+func (serv *v2MetadataService) GetMetadata(diffID layer.DiffID) ([]V2Metadata, error) {
117 117
 	jsonBytes, err := serv.store.Get(serv.diffIDNamespace(), serv.diffIDKey(diffID))
118 118
 	if err != nil {
119 119
 		return nil, err
... ...
@@ -128,7 +139,7 @@ func (serv *V2MetadataService) GetMetadata(diffID layer.DiffID) ([]V2Metadata, e
128 128
 }
129 129
 
130 130
 // GetDiffID finds a layer DiffID from a digest.
131
-func (serv *V2MetadataService) GetDiffID(dgst digest.Digest) (layer.DiffID, error) {
131
+func (serv *v2MetadataService) GetDiffID(dgst digest.Digest) (layer.DiffID, error) {
132 132
 	diffIDBytes, err := serv.store.Get(serv.digestNamespace(), serv.digestKey(dgst))
133 133
 	if err != nil {
134 134
 		return layer.DiffID(""), err
... ...
@@ -139,7 +150,7 @@ func (serv *V2MetadataService) GetDiffID(dgst digest.Digest) (layer.DiffID, erro
139 139
 
140 140
 // Add associates metadata with a layer DiffID. If too many metadata entries are
141 141
 // present, the oldest one is dropped.
142
-func (serv *V2MetadataService) Add(diffID layer.DiffID, metadata V2Metadata) error {
142
+func (serv *v2MetadataService) Add(diffID layer.DiffID, metadata V2Metadata) error {
143 143
 	oldMetadata, err := serv.GetMetadata(diffID)
144 144
 	if err != nil {
145 145
 		oldMetadata = nil
... ...
@@ -174,13 +185,13 @@ func (serv *V2MetadataService) Add(diffID layer.DiffID, metadata V2Metadata) err
174 174
 
175 175
 // TagAndAdd amends the given "meta" for hmac hashed by the given "hmacKey" and associates it with a layer
176 176
 // DiffID. If too many metadata entries are present, the oldest one is dropped.
177
-func (serv *V2MetadataService) TagAndAdd(diffID layer.DiffID, hmacKey []byte, meta V2Metadata) error {
177
+func (serv *v2MetadataService) TagAndAdd(diffID layer.DiffID, hmacKey []byte, meta V2Metadata) error {
178 178
 	meta.HMAC = ComputeV2MetadataHMAC(hmacKey, &meta)
179 179
 	return serv.Add(diffID, meta)
180 180
 }
181 181
 
182 182
 // Remove unassociates a metadata entry from a layer DiffID.
183
-func (serv *V2MetadataService) Remove(metadata V2Metadata) error {
183
+func (serv *v2MetadataService) Remove(metadata V2Metadata) error {
184 184
 	diffID, err := serv.GetDiffID(metadata.Digest)
185 185
 	if err != nil {
186 186
 		return err
... ...
@@ -50,7 +50,7 @@ func (e ImageConfigPullError) Error() string {
50 50
 }
51 51
 
52 52
 type v2Puller struct {
53
-	V2MetadataService *metadata.V2MetadataService
53
+	V2MetadataService metadata.V2MetadataService
54 54
 	endpoint          registry.APIEndpoint
55 55
 	config            *ImagePullConfig
56 56
 	repoInfo          *registry.RepositoryInfo
... ...
@@ -134,7 +134,7 @@ type v2LayerDescriptor struct {
134 134
 	digest            digest.Digest
135 135
 	repoInfo          *registry.RepositoryInfo
136 136
 	repo              distribution.Repository
137
-	V2MetadataService *metadata.V2MetadataService
137
+	V2MetadataService metadata.V2MetadataService
138 138
 	tmpFile           *os.File
139 139
 	verifier          digest.Verifier
140 140
 	src               distribution.Descriptor
... ...
@@ -41,7 +41,7 @@ type PushResult struct {
41 41
 }
42 42
 
43 43
 type v2Pusher struct {
44
-	v2MetadataService *metadata.V2MetadataService
44
+	v2MetadataService metadata.V2MetadataService
45 45
 	ref               reference.Named
46 46
 	endpoint          registry.APIEndpoint
47 47
 	repoInfo          *registry.RepositoryInfo
... ...
@@ -243,7 +243,7 @@ func manifestFromBuilder(ctx context.Context, builder distribution.ManifestBuild
243 243
 
244 244
 type v2PushDescriptor struct {
245 245
 	layer             layer.Layer
246
-	v2MetadataService *metadata.V2MetadataService
246
+	v2MetadataService metadata.V2MetadataService
247 247
 	hmacKey           []byte
248 248
 	repoInfo          reference.Named
249 249
 	ref               reference.Named