...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package remote
16
17 import (
18 "errors"
19 "testing"
20
21 "github.com/google/go-containerregistry/pkg/name"
22 v1 "github.com/google/go-containerregistry/pkg/v1"
23 "github.com/google/go-containerregistry/pkg/v1/remote"
24 )
25
26 func TestResolveDigest(t *testing.T) {
27 rg := remoteGet
28 defer func() {
29 remoteGet = rg
30 }()
31
32 tag := name.MustParseReference("gcr.io/distroless/static:nonroot")
33
34
35 digest := name.MustParseReference("gcr.io/distroless/static@sha256:be5d77c62dbe7fedfb0a4e5ec2f91078080800ab1f18358e5f31fcc8faa023c4")
36
37 t.Run("digest doesn't call remote.Get", func(t *testing.T) {
38 remoteGet = func(_ name.Reference, _ ...remote.Option) (*remote.Descriptor, error) {
39 t.Fatal("ResolveDigest should not call remote.Get.")
40 return nil, nil
41 }
42
43 got, err := ResolveDigest(digest)
44 if err != nil {
45 t.Fatalf("ResolveDigest() = %v", err)
46 }
47 if want := digest; got != want {
48 t.Errorf("ResolveDigest() = %v, wanted %v", got, want)
49 }
50 })
51
52 t.Run("tag calls remote.Get", func(t *testing.T) {
53 remoteGet = func(_ name.Reference, _ ...remote.Option) (*remote.Descriptor, error) {
54 return &remote.Descriptor{
55 Descriptor: v1.Descriptor{
56 Digest: v1.Hash{
57 Algorithm: "sha256",
58
59
60 Hex: "be5d77c62dbe7fedfb0a4e5ec2f91078080800ab1f18358e5f31fcc8faa023c4",
61 },
62 },
63 }, nil
64 }
65
66 got, err := ResolveDigest(tag)
67 if err != nil {
68 t.Fatalf("ResolveDigest() = %v", err)
69 }
70 if want := digest; got != want {
71 t.Errorf("ResolveDigest() = %v, wanted %v", got, want)
72 }
73 })
74
75 t.Run("remote.Get errors propagate", func(t *testing.T) {
76 want := errors.New("we should propagate this error")
77 remoteGet = func(_ name.Reference, _ ...remote.Option) (*remote.Descriptor, error) {
78 return nil, want
79 }
80
81 _, got := ResolveDigest(tag)
82 if !errors.Is(got, want) {
83 t.Fatalf("ResolveDigest() = %v, wanted %v", got, want)
84 }
85 })
86 }
87
View as plain text