Skip to content

Commit f4fe598

Browse files
committed
add cov
Signed-off-by: Lixia (Sylvia) Lei <[email protected]>
1 parent f86c22b commit f4fe598

File tree

3 files changed

+159
-65
lines changed

3 files changed

+159
-65
lines changed

internal/fs/tarfs/tarfs_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,3 +405,19 @@ func TestTarFS_Stat_Unsupported(t *testing.T) {
405405
})
406406
}
407407
}
408+
409+
func TestTarFs_New_Error(t *testing.T) {
410+
t.Run("not existing path", func(t *testing.T) {
411+
_, err := New("testdata/ghost.tar")
412+
if err == nil {
413+
t.Error("New() error = nil, wantErr = true")
414+
}
415+
})
416+
417+
t.Run("invalid file path", func(t *testing.T) {
418+
_, err := New(string([]byte{0x00}))
419+
if err == nil {
420+
t.Error("New() error = nil, wantErr = true")
421+
}
422+
})
423+
}

internal/manifestutil/parser_test.go

Lines changed: 136 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,6 @@ func (s *testStorage) Fetch(ctx context.Context, target ocispec.Descriptor) (io.
5353
return s.store.Fetch(ctx, target)
5454
}
5555

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-
6456
func TestConfig(t *testing.T) {
6557
storage := cas.NewMemory()
6658

@@ -138,6 +130,35 @@ func TestConfig(t *testing.T) {
138130
}
139131
}
140132

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+
141162
func TestManifests(t *testing.T) {
142163
storage := cas.NewMemory()
143164

@@ -234,6 +255,35 @@ func TestManifests(t *testing.T) {
234255
}
235256
}
236257

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+
237287
func TestSubject(t *testing.T) {
238288
storage := cas.NewMemory()
239289

@@ -289,65 +339,87 @@ func TestSubject(t *testing.T) {
289339
}
290340

291341
func TestSubject_ErrorPath(t *testing.T) {
292-
s := testStorage{
293-
store: memory.New(),
294-
badFetch: set.New[digest.Digest](),
295-
}
296-
ctx := context.Background()
297342

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](),
318347
}
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+
})
322362
}
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"},
342370
}
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)
348384

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+
})
353425
}

registry/remote/utils_test.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,13 @@ func Test_parseLink(t *testing.T) {
5252
want: "https://localhost:5001/v2/_catalog?last=alpine&n=1",
5353
},
5454
{
55-
name: "invalid header",
55+
name: "invalid header, missing <",
56+
url: "https://localhost:5000/v2/_catalog",
57+
header: `/v2/_catalog>`,
58+
wantErr: true,
59+
},
60+
{
61+
name: "invalid header, missing >",
5662
url: "https://localhost:5000/v2/_catalog",
5763
header: `</v2/_catalog`,
5864
wantErr: true,

0 commit comments

Comments
 (0)