6
6
"path/filepath"
7
7
"testing"
8
8
9
- "github.com/opencontainers/go-digest"
9
+ digest "github.com/opencontainers/go-digest"
10
10
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
11
11
"github.com/stretchr/testify/assert"
12
12
"github.com/stretchr/testify/require"
@@ -85,7 +85,7 @@ func TestWriteSingleDescriptor(t *testing.T) {
85
85
store := NewStoreIndex (dir )
86
86
87
87
desc := randDescriptor ("foo" )
88
- err := store .Put ("" , desc )
88
+ err := store .Put (desc )
89
89
require .NoError (t , err )
90
90
91
91
readDesc , err := store .GetSingle ()
@@ -113,7 +113,7 @@ func TestAddDescriptor(t *testing.T) {
113
113
114
114
store := NewStoreIndex (dir )
115
115
three := randDescriptor ("baz" )
116
- err = store .Put ("" , three )
116
+ err = store .Put (three )
117
117
require .NoError (t , err )
118
118
119
119
readIdx , err := store .Read ()
@@ -149,7 +149,7 @@ func TestAddDescriptorWithTag(t *testing.T) {
149
149
150
150
store := NewStoreIndex (dir )
151
151
three := randDescriptor ("baz" )
152
- err = store .Put ("ver1" , three )
152
+ err = store .Put (three , Tag ( "ver1" ) )
153
153
require .NoError (t , err )
154
154
155
155
desc , err := store .Get ("ver1" )
@@ -170,6 +170,101 @@ func TestAddDescriptorWithTag(t *testing.T) {
170
170
assert .Equal (t , * desc , readIdx .Manifests [2 ])
171
171
}
172
172
173
+ func TestAddMultipleNames (t * testing.T ) {
174
+ dir := t .TempDir ()
175
+
176
+ store := NewStoreIndex (dir )
177
+
178
+ one := randDescriptor ("foo" )
179
+ err := store .Put (one , Name ("app/name:v1" ), Name ("app/name:v1.0" ), Name ("app/other:latest" ))
180
+ require .NoError (t , err )
181
+
182
+ var idx ocispecs.Index
183
+ dt , err := os .ReadFile (filepath .Join (dir , "index.json" ))
184
+ require .NoError (t , err )
185
+
186
+ err = json .Unmarshal (dt , & idx )
187
+ require .NoError (t , err )
188
+
189
+ require .Len (t , idx .Manifests , 3 )
190
+
191
+ require .Equal (t , one .Digest , idx .Manifests [0 ].Digest )
192
+ require .Equal (t , one .Size , idx .Manifests [0 ].Size )
193
+ require .Equal (t , one .MediaType , idx .Manifests [0 ].MediaType )
194
+
195
+ require .Equal (t , "v1" , idx .Manifests [0 ].Annotations ["org.opencontainers.image.ref.name" ])
196
+ require .Equal (t , "app/name:v1" , idx .Manifests [0 ].Annotations ["io.containerd.image.name" ])
197
+
198
+ require .Equal (t , one .Digest , idx .Manifests [1 ].Digest )
199
+ require .Equal (t , one .Size , idx .Manifests [1 ].Size )
200
+ require .Equal (t , one .MediaType , idx .Manifests [1 ].MediaType )
201
+
202
+ require .Equal (t , "v1.0" , idx .Manifests [1 ].Annotations ["org.opencontainers.image.ref.name" ])
203
+ require .Equal (t , "app/name:v1.0" , idx .Manifests [1 ].Annotations ["io.containerd.image.name" ])
204
+
205
+ require .Equal (t , one .Digest , idx .Manifests [2 ].Digest )
206
+ require .Equal (t , one .Size , idx .Manifests [2 ].Size )
207
+ require .Equal (t , one .MediaType , idx .Manifests [1 ].MediaType )
208
+
209
+ require .Equal (t , "latest" , idx .Manifests [2 ].Annotations ["org.opencontainers.image.ref.name" ])
210
+ require .Equal (t , "app/other:latest" , idx .Manifests [2 ].Annotations ["io.containerd.image.name" ])
211
+
212
+ desc , err := store .Get ("app/name:v1" )
213
+ require .NoError (t , err )
214
+ require .NotNil (t , desc )
215
+
216
+ require .Equal (t , one .Digest , desc .Digest )
217
+ require .Equal (t , one .Size , desc .Size )
218
+ require .Equal (t , one .MediaType , desc .MediaType )
219
+
220
+ require .Equal (t , "v1" , desc .Annotations ["org.opencontainers.image.ref.name" ])
221
+ require .Equal (t , "app/name:v1" , desc .Annotations ["io.containerd.image.name" ])
222
+ }
223
+
224
+ func TestReplaceByImageName (t * testing.T ) {
225
+ dir := t .TempDir ()
226
+
227
+ strore := NewStoreIndex (dir )
228
+ one := randDescriptor ("foo" )
229
+ two := randDescriptor ("bar" )
230
+ three := randDescriptor ("baz" )
231
+
232
+ err := strore .Put (one )
233
+ require .NoError (t , err )
234
+
235
+ err = strore .Put (two , Name ("app/name:v1" ))
236
+ require .NoError (t , err )
237
+
238
+ err = strore .Put (three , Name ("app/name:v2" ))
239
+ require .NoError (t , err )
240
+
241
+ // replace by image name
242
+ four := randDescriptor ("qux" )
243
+ err = strore .Put (four , Name ("app/name:v1" ))
244
+ require .NoError (t , err )
245
+
246
+ readIdx , err := strore .Read ()
247
+ require .NoError (t , err )
248
+
249
+ assert .Len (t , readIdx .Manifests , 3 )
250
+
251
+ assert .Equal (t , one , readIdx .Manifests [0 ])
252
+
253
+ assert .Equal (t , three .Digest , readIdx .Manifests [1 ].Digest )
254
+ assert .Equal (t , three .Size , readIdx .Manifests [1 ].Size )
255
+ assert .Equal (t , three .MediaType , readIdx .Manifests [1 ].MediaType )
256
+
257
+ assert .Equal (t , "v2" , readIdx .Manifests [1 ].Annotations ["org.opencontainers.image.ref.name" ])
258
+ assert .Equal (t , "app/name:v2" , readIdx .Manifests [1 ].Annotations ["io.containerd.image.name" ])
259
+
260
+ assert .Equal (t , four .Digest , readIdx .Manifests [2 ].Digest )
261
+ assert .Equal (t , four .Size , readIdx .Manifests [2 ].Size )
262
+ assert .Equal (t , four .MediaType , readIdx .Manifests [2 ].MediaType )
263
+
264
+ assert .Equal (t , "v1" , readIdx .Manifests [2 ].Annotations ["org.opencontainers.image.ref.name" ])
265
+ assert .Equal (t , "app/name:v1" , readIdx .Manifests [2 ].Annotations ["io.containerd.image.name" ])
266
+ }
267
+
173
268
func randDescriptor (seed string ) ocispecs.Descriptor {
174
269
dgst := digest .FromBytes ([]byte (seed ))
175
270
return ocispecs.Descriptor {
0 commit comments