@@ -53,14 +53,6 @@ func (s *testStorage) Fetch(ctx context.Context, target ocispec.Descriptor) (io.
53
53
return s .store .Fetch (ctx , target )
54
54
}
55
55
56
- // func (s *testStorage) Exists(ctx context.Context, target ocispec.Descriptor) (bool, error) {
57
- // return s.store.Exists(ctx, target)
58
- // }
59
-
60
- // func (s *testStorage) Predecessors(ctx context.Context, node ocispec.Descriptor) ([]ocispec.Descriptor, error) {
61
- // return s.store.Predecessors(ctx, node)
62
- // }
63
-
64
56
func TestConfig (t * testing.T ) {
65
57
storage := cas .NewMemory ()
66
58
@@ -138,6 +130,35 @@ func TestConfig(t *testing.T) {
138
130
}
139
131
}
140
132
133
+ func TestConfig_ErrorPath (t * testing.T ) {
134
+ data := []byte ("data" )
135
+ desc := ocispec.Descriptor {
136
+ MediaType : ocispec .MediaTypeImageManifest ,
137
+ Digest : digest .FromBytes (data ),
138
+ Size : int64 (len (data )),
139
+ }
140
+
141
+ t .Run ("Fetch error" , func (t * testing.T ) {
142
+ storage := cas .NewMemory ()
143
+ ctx := context .Background ()
144
+ if _ , err := Config (ctx , storage , desc ); err == nil {
145
+ t .Error ("Config() error = nil, wantErr = true" )
146
+ }
147
+ })
148
+
149
+ t .Run ("Unmarshal error" , func (t * testing.T ) {
150
+ storage := cas .NewMemory ()
151
+ ctx := context .Background ()
152
+ if err := storage .Push (ctx , desc , bytes .NewReader (data )); err != nil {
153
+ t .Fatalf ("failed to push test content to src: %v" , err )
154
+ }
155
+ _ , err := Config (ctx , storage , desc )
156
+ if err == nil {
157
+ t .Error ("Config() error = nil, wantErr = true" )
158
+ }
159
+ })
160
+ }
161
+
141
162
func TestManifests (t * testing.T ) {
142
163
storage := cas .NewMemory ()
143
164
@@ -234,6 +255,35 @@ func TestManifests(t *testing.T) {
234
255
}
235
256
}
236
257
258
+ func TestManifests_ErrorPath (t * testing.T ) {
259
+ data := []byte ("data" )
260
+ desc := ocispec.Descriptor {
261
+ MediaType : ocispec .MediaTypeImageIndex ,
262
+ Digest : digest .FromBytes (data ),
263
+ Size : int64 (len (data )),
264
+ }
265
+
266
+ t .Run ("Fetch error" , func (t * testing.T ) {
267
+ storage := cas .NewMemory ()
268
+ ctx := context .Background ()
269
+ if _ , err := Manifests (ctx , storage , desc ); err == nil {
270
+ t .Error ("Manifests() error = nil, wantErr = true" )
271
+ }
272
+ })
273
+
274
+ t .Run ("Unmarshal error" , func (t * testing.T ) {
275
+ storage := cas .NewMemory ()
276
+ ctx := context .Background ()
277
+ if err := storage .Push (ctx , desc , bytes .NewReader (data )); err != nil {
278
+ t .Fatalf ("failed to push test content to src: %v" , err )
279
+ }
280
+ _ , err := Manifests (ctx , storage , desc )
281
+ if err == nil {
282
+ t .Error ("Manifests() error = nil, wantErr = true" )
283
+ }
284
+ })
285
+ }
286
+
237
287
func TestSubject (t * testing.T ) {
238
288
storage := cas .NewMemory ()
239
289
@@ -289,65 +339,87 @@ func TestSubject(t *testing.T) {
289
339
}
290
340
291
341
func TestSubject_ErrorPath (t * testing.T ) {
292
- s := testStorage {
293
- store : memory .New (),
294
- badFetch : set .New [digest.Digest ](),
295
- }
296
- ctx := context .Background ()
297
342
298
- // generate test content
299
- var blobs [][]byte
300
- var descs []ocispec.Descriptor
301
- appendBlob := func (mediaType string , artifactType string , blob []byte ) {
302
- blobs = append (blobs , blob )
303
- descs = append (descs , ocispec.Descriptor {
304
- MediaType : mediaType ,
305
- ArtifactType : artifactType ,
306
- Annotations : map [string ]string {"test" : "content" },
307
- Digest : digest .FromBytes (blob ),
308
- Size : int64 (len (blob )),
309
- })
310
- }
311
- generateImageManifest := func (config ocispec.Descriptor , subject * ocispec.Descriptor , layers ... ocispec.Descriptor ) {
312
- manifest := ocispec.Manifest {
313
- MediaType : ocispec .MediaTypeImageManifest ,
314
- Config : config ,
315
- Subject : subject ,
316
- Layers : layers ,
317
- Annotations : map [string ]string {"test" : "content" },
343
+ t .Run ("Fetch error" , func (t * testing.T ) {
344
+ s := testStorage {
345
+ store : memory .New (),
346
+ badFetch : set .New [digest.Digest ](),
318
347
}
319
- manifestJSON , err := json .Marshal (manifest )
320
- if err != nil {
321
- t .Fatal (err )
348
+ ctx := context .Background ()
349
+
350
+ // generate test content
351
+ var blobs [][]byte
352
+ var descs []ocispec.Descriptor
353
+ appendBlob := func (mediaType string , artifactType string , blob []byte ) {
354
+ blobs = append (blobs , blob )
355
+ descs = append (descs , ocispec.Descriptor {
356
+ MediaType : mediaType ,
357
+ ArtifactType : artifactType ,
358
+ Annotations : map [string ]string {"test" : "content" },
359
+ Digest : digest .FromBytes (blob ),
360
+ Size : int64 (len (blob )),
361
+ })
322
362
}
323
- appendBlob (ocispec .MediaTypeImageManifest , manifest .Config .MediaType , manifestJSON )
324
- }
325
- appendBlob ("image manifest" , "image config" , []byte ("config" )) // Blob 0
326
- appendBlob (ocispec .MediaTypeImageLayer , "layer" , []byte ("foo" )) // Blob 1
327
- appendBlob (ocispec .MediaTypeImageLayer , "layer" , []byte ("bar" )) // Blob 2
328
- appendBlob (ocispec .MediaTypeImageLayer , "layer" , []byte ("hello" )) // Blob 3
329
- generateImageManifest (descs [0 ], nil , descs [1 ]) // Blob 4
330
- generateImageManifest (descs [0 ], & descs [4 ], descs [2 ]) // Blob 5
331
- s .badFetch .Add (descs [5 ].Digest )
332
-
333
- eg , egCtx := errgroup .WithContext (ctx )
334
- for i := range blobs {
335
- eg .Go (func (i int ) func () error {
336
- return func () error {
337
- err := s .Push (egCtx , descs [i ], bytes .NewReader (blobs [i ]))
338
- if err != nil {
339
- return fmt .Errorf ("failed to push test content to src: %d: %v" , i , err )
340
- }
341
- return nil
363
+ generateImageManifest := func (config ocispec.Descriptor , subject * ocispec.Descriptor , layers ... ocispec.Descriptor ) {
364
+ manifest := ocispec.Manifest {
365
+ MediaType : ocispec .MediaTypeImageManifest ,
366
+ Config : config ,
367
+ Subject : subject ,
368
+ Layers : layers ,
369
+ Annotations : map [string ]string {"test" : "content" },
342
370
}
343
- }(i ))
344
- }
345
- if err := eg .Wait (); err != nil {
346
- t .Fatal (err )
347
- }
371
+ manifestJSON , err := json .Marshal (manifest )
372
+ if err != nil {
373
+ t .Fatal (err )
374
+ }
375
+ appendBlob (ocispec .MediaTypeImageManifest , manifest .Config .MediaType , manifestJSON )
376
+ }
377
+ appendBlob ("image manifest" , "image config" , []byte ("config" )) // Blob 0
378
+ appendBlob (ocispec .MediaTypeImageLayer , "layer" , []byte ("foo" )) // Blob 1
379
+ appendBlob (ocispec .MediaTypeImageLayer , "layer" , []byte ("bar" )) // Blob 2
380
+ appendBlob (ocispec .MediaTypeImageLayer , "layer" , []byte ("hello" )) // Blob 3
381
+ generateImageManifest (descs [0 ], nil , descs [1 ]) // Blob 4
382
+ generateImageManifest (descs [0 ], & descs [4 ], descs [2 ]) // Blob 5
383
+ s .badFetch .Add (descs [5 ].Digest )
348
384
349
- _ , err := Subject (ctx , & s , descs [5 ])
350
- if ! errors .Is (err , ErrBadFetch ) {
351
- t .Errorf ("Store.Referrers() error = %v, want %v" , err , ErrBadFetch )
352
- }
385
+ eg , egCtx := errgroup .WithContext (ctx )
386
+ for i := range blobs {
387
+ eg .Go (func (i int ) func () error {
388
+ return func () error {
389
+ err := s .Push (egCtx , descs [i ], bytes .NewReader (blobs [i ]))
390
+ if err != nil {
391
+ return fmt .Errorf ("failed to push test content to src: %d: %v" , i , err )
392
+ }
393
+ return nil
394
+ }
395
+ }(i ))
396
+ }
397
+ if err := eg .Wait (); err != nil {
398
+ t .Fatal (err )
399
+ }
400
+
401
+ // test fetch error
402
+ if _ , err := Subject (ctx , & s , descs [5 ]); ! errors .Is (err , ErrBadFetch ) {
403
+ t .Errorf ("Subject() error = %v, want %v" , err , ErrBadFetch )
404
+ }
405
+ })
406
+
407
+ t .Run ("Unmarshal error" , func (t * testing.T ) {
408
+ data := []byte ("data" )
409
+ desc := ocispec.Descriptor {
410
+ MediaType : ocispec .MediaTypeImageIndex ,
411
+ Digest : digest .FromBytes (data ),
412
+ Size : int64 (len (data )),
413
+ }
414
+
415
+ storage := cas .NewMemory ()
416
+ ctx := context .Background ()
417
+ if err := storage .Push (ctx , desc , bytes .NewReader (data )); err != nil {
418
+ t .Fatalf ("failed to push test content to src: %v" , err )
419
+ }
420
+ _ , err := Subject (ctx , storage , desc )
421
+ if err == nil {
422
+ t .Error ("Subject() error = nil, wantErr = true" )
423
+ }
424
+ })
353
425
}
0 commit comments