...
1 package resolve
2
3 import (
4 "fmt"
5 "os"
6 "testing"
7
8 "github.com/google/go-containerregistry/pkg/name"
9 v1 "github.com/google/go-containerregistry/pkg/v1"
10 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/require"
12
13 "edge-infra.dev/pkg/f8n/warehouse/oci"
14 "edge-infra.dev/pkg/f8n/warehouse/oci/mutate"
15 "edge-infra.dev/pkg/f8n/warehouse/whtest/registry"
16 "edge-infra.dev/test/fixtures"
17 "edge-infra.dev/test/snapshot"
18 )
19
20 var path *fixtures.Path
21
22 func TestMain(m *testing.M) {
23 var err error
24 path, err = fixtures.Layout()
25 if err != nil {
26 panic(err)
27 }
28
29 os.Exit(m.Run())
30 }
31
32 func TestResolve(t *testing.T) {
33 tcs := map[string]name.Reference{
34 "shoot artifact": name.MustParseReference("shoot:latest"),
35 "redpanda-system artifact": name.MustParseReference("redpanda-system:latest"),
36 }
37 for test, tc := range tcs {
38 t.Run(test, func(t *testing.T) {
39 oart, err := path.Get(tc)
40 if err != nil {
41 t.Error(err)
42 }
43
44 result, err := Resolve(oart)
45 if err != nil {
46 t.Error(err)
47 }
48
49 snapshot.Snap(t, result)
50 })
51 }
52 }
53
54 func TestResolveRef(t *testing.T) {
55 u, testRegistry, err := registry.New()
56 if err != nil {
57 t.Error(err)
58 }
59
60 tcs := map[string]string{
61 "shoot artifact": "shoot",
62 "redpanda-system artifact": "redpanda-system",
63 }
64
65 for test, tc := range tcs {
66 t.Run(test, func(t *testing.T) {
67 ref, err := name.ParseReference(fmt.Sprintf("%s/test/%s:latest", u.Host, tc))
68 if err != nil {
69 t.Error(err)
70 }
71 t.Log(ref)
72
73 if err := path.Push(ref, tc, "latest"); err != nil {
74 t.Error(err)
75 }
76
77 result, err := Ref(ref)
78 if err != nil {
79 t.Error(err)
80 }
81 snapshots := make(map[string]v1.Hash, len(result))
82 for k, v := range result {
83 d, err := v.Digest()
84 require.NoError(t, err)
85 snapshots[k] = d
86 }
87 snapshot.Snap(t, snapshots)
88 })
89 }
90 testRegistry.Close()
91 }
92
93 func TestAcceptFirst(t *testing.T) {
94 oart, err := path.Get(name.MustParseReference("linkerdctl-test:latest"))
95 if err != nil {
96 require.NoError(t, err)
97 }
98
99 certMgr, err := path.Get(name.MustParseReference("cert-manager-test:resolve-conflict"))
100 if err != nil {
101 require.NoError(t, err)
102 }
103
104 newIdx, err := mutate.AppendManifests(oart.(v1.ImageIndex), certMgr)
105 if err != nil {
106 require.NoError(t, err)
107 }
108
109 _, err = Resolve(newIdx)
110 var conflict *oci.ConflictError
111 assert.ErrorAs(t, err, &conflict, "Failed TestAcceptFirst -> ConflictError expected")
112
113 result, err := Resolve(newIdx, AcceptFirstDigest())
114 assert.NoError(t, err, "Resolve should not error when AcceptFirst() is passed in.")
115 d, err := result["cert-manager-test"].Digest()
116 require.NoError(t, err)
117
118 snapshot.Snap(t, d)
119 }
120
View as plain text