1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package mutate
17
18 import (
19 "errors"
20 "testing"
21
22 v1 "github.com/google/go-containerregistry/pkg/v1"
23 "github.com/sigstore/cosign/v2/pkg/oci"
24 "github.com/sigstore/cosign/v2/pkg/oci/empty"
25 "github.com/sigstore/cosign/v2/pkg/oci/static"
26 )
27
28 func TestAppendSignatures(t *testing.T) {
29 base := empty.Signatures()
30
31 s1, err := static.NewSignature([]byte{}, "s1")
32 if err != nil {
33 t.Fatalf("NewSignature() = %v", err)
34 }
35 s2, err := static.NewSignature([]byte{}, "s2")
36 if err != nil {
37 t.Fatalf("NewSignature() = %v", err)
38 }
39 s3, err := static.NewSignature([]byte{}, "s3")
40 if err != nil {
41 t.Fatalf("NewSignature() = %v", err)
42 }
43
44 oneSig, err := AppendSignatures(base, false, s1)
45 if err != nil {
46 t.Fatalf("AppendSignatures() = %v", err)
47 }
48
49 twoSig, err := AppendSignatures(oneSig, false, s2)
50 if err != nil {
51 t.Fatalf("AppendSignatures() = %v", err)
52 }
53
54 threeSig, err := AppendSignatures(oneSig, true, s2, s3)
55 if err != nil {
56 t.Fatalf("AppendSignatures() = %v", err)
57 }
58
59 if sl, err := oneSig.Get(); err != nil {
60 t.Fatalf("Get() = %v", err)
61 } else if got, want := len(sl), 1; got != want {
62 t.Errorf("len(Get()) = %d, wanted %d", got, want)
63 }
64
65 if sl, err := twoSig.Get(); err != nil {
66 t.Fatalf("Get() = %v", err)
67 } else if got, want := len(sl), 2; got != want {
68 t.Errorf("len(Get()) = %d, wanted %d", got, want)
69 }
70
71 if sl, err := threeSig.Get(); err != nil {
72 t.Fatalf("Get() = %v", err)
73 } else if got, want := len(sl), 3; got != want {
74 t.Errorf("len(Get()) = %d, wanted %d", got, want)
75 }
76
77 if testCfg, err := threeSig.ConfigFile(); err != nil {
78 t.Fatalf("ConfigFile() = %v", err)
79 } else if testCfg.Created.Time.IsZero() {
80 t.Errorf("Date of Signature was Zero")
81 }
82
83 if testDefaultCfg, err := twoSig.ConfigFile(); err != nil {
84 t.Fatalf("ConfigFile() = %v", err)
85 } else if !testDefaultCfg.Created.Time.IsZero() {
86 t.Errorf("Date of Signature was Zero")
87 }
88 }
89
90 func TestGet(t *testing.T) {
91 tests := []struct {
92 name string
93 baseLayers int
94 appendLayers int
95 wantError error
96 }{
97 {
98 name: "within limit",
99 baseLayers: 1,
100 appendLayers: 1,
101 wantError: nil,
102 },
103 {
104 name: "base exceeds limit",
105 baseLayers: 2000,
106 appendLayers: 1,
107 wantError: errors.New("number of layers (2001) exceeded the limit (1000)"),
108 },
109 {
110 name: "append exceeds limit",
111 baseLayers: 1,
112 appendLayers: 1300,
113 wantError: errors.New("number of layers (1301) exceeded the limit (1000)"),
114 },
115 {
116 name: "sum exceeds limit",
117 baseLayers: 666,
118 appendLayers: 666,
119 wantError: errors.New("number of layers (1332) exceeded the limit (1000)"),
120 },
121 }
122 for _, test := range tests {
123 t.Run(test.name, func(t *testing.T) {
124 sa := sigAppender{
125 base: &mockOCISignatures{
126 signatures: make([]oci.Signature, test.baseLayers),
127 },
128 sigs: make([]oci.Signature, test.appendLayers),
129 }
130 _, err := sa.Get()
131 if test.wantError != nil && test.wantError.Error() != err.Error() {
132 t.Fatalf("Get() = %v, wanted %v", err, test.wantError)
133 }
134 if test.wantError == nil && err != nil {
135 t.Fatalf("Get() = %v, wanted %v", err, test.wantError)
136 }
137 })
138 }
139 }
140
141 type mockOCISignatures struct {
142 v1.Image
143 signatures []oci.Signature
144 }
145
146 func (m *mockOCISignatures) Get() ([]oci.Signature, error) {
147 return m.signatures, nil
148 }
149
View as plain text