@@ -23,45 +23,222 @@ import (
23
23
"helm.sh/helm/v3/pkg/chartutil"
24
24
)
25
25
26
- const testDigestAlgo = digest .SHA256
27
-
28
26
func TestDigestValues (t * testing.T ) {
29
27
tests := []struct {
30
28
name string
29
+ algo digest.Algorithm
31
30
values chartutil.Values
32
31
want digest.Digest
33
32
}{
34
33
{
35
34
name : "empty" ,
35
+ algo : digest .SHA256 ,
36
36
values : chartutil.Values {},
37
- want : "sha256:ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356" ,
37
+ want : "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ,
38
+ },
39
+ {
40
+ name : "nil" ,
41
+ algo : digest .SHA256 ,
42
+ values : nil ,
43
+ want : "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ,
38
44
},
39
45
{
40
46
name : "value map" ,
47
+ algo : digest .SHA256 ,
41
48
values : chartutil.Values {
42
- "foo" : "bar" ,
43
- "baz" : map [string ]string {
44
- "cool" : "stuff" ,
49
+ "replicas" : 3 ,
50
+ "image" : map [string ]interface {}{
51
+ "tag" : "latest" ,
52
+ "repository" : "nginx" ,
53
+ },
54
+ "ports" : []interface {}{
55
+ map [string ]interface {}{
56
+ "protocol" : "TCP" ,
57
+ "port" : 8080 ,
58
+ },
59
+ map [string ]interface {}{
60
+ "port" : 9090 ,
61
+ "protocol" : "UDP" ,
62
+ },
45
63
},
46
64
},
47
- want : "sha256:3f3641788a2d4abda3534eaa90c90b54916e4c6e3a5b2e1b24758b7bfa701ecd " ,
65
+ want : "sha256:fcdc2b0de1581a3633ada4afee3f918f6eaa5b5ab38c3fef03d5b48d3f85d9f6 " ,
48
66
},
49
67
{
50
68
name : "value map in different order" ,
69
+ algo : digest .SHA256 ,
51
70
values : chartutil.Values {
52
- "baz" : map [string ]string {
53
- "cool" : "stuff" ,
71
+ "image" : map [string ]interface {}{
72
+ "repository" : "nginx" ,
73
+ "tag" : "latest" ,
74
+ },
75
+ "ports" : []interface {}{
76
+ map [string ]interface {}{
77
+ "port" : 8080 ,
78
+ "protocol" : "TCP" ,
79
+ },
80
+ map [string ]interface {}{
81
+ "port" : 9090 ,
82
+ "protocol" : "UDP" ,
83
+ },
84
+ },
85
+ "replicas" : 3 ,
86
+ },
87
+ want : "sha256:fcdc2b0de1581a3633ada4afee3f918f6eaa5b5ab38c3fef03d5b48d3f85d9f6" ,
88
+ },
89
+ {
90
+ // Explicit test for something that does not work with sigs.k8s.io/yaml.
91
+ // See: https://go.dev/play/p/KRyfK9ZobZx
92
+ name : "values map with numeric keys" ,
93
+ algo : digest .SHA256 ,
94
+ values : chartutil.Values {
95
+ "replicas" : 3 ,
96
+ "test" : map [string ]interface {}{
97
+ "632bd80235a05f4192aefade" : "value1" ,
98
+ "632bd80ddf416cf32fd50679" : "value2" ,
99
+ "632bd817c559818a52307da2" : "value3" ,
100
+ "632bd82398e71231a98004b6" : "value4" ,
101
+ },
102
+ },
103
+ want : "sha256:8a980fcbeadd6f05818f07e8aec14070c22250ca3d96af1fcd5f93b3e85b4d70" ,
104
+ },
105
+ {
106
+ name : "values map with numeric keys in different order" ,
107
+ algo : digest .SHA256 ,
108
+ values : chartutil.Values {
109
+ "test" : map [string ]interface {}{
110
+ "632bd82398e71231a98004b6" : "value4" ,
111
+ "632bd817c559818a52307da2" : "value3" ,
112
+ "632bd80ddf416cf32fd50679" : "value2" ,
113
+ "632bd80235a05f4192aefade" : "value1" ,
54
114
},
115
+ "replicas" : 3 ,
116
+ },
117
+ want : "sha256:8a980fcbeadd6f05818f07e8aec14070c22250ca3d96af1fcd5f93b3e85b4d70" ,
118
+ },
119
+ {
120
+ name : "using different algorithm" ,
121
+ algo : digest .SHA512 ,
122
+ values : chartutil.Values {
55
123
"foo" : "bar" ,
124
+ "baz" : map [string ]interface {}{
125
+ "cool" : "stuff" ,
126
+ },
56
127
},
57
- want : "sha256:3f3641788a2d4abda3534eaa90c90b54916e4c6e3a5b2e1b24758b7bfa701ecd " ,
128
+ want : "sha512:b5f9cd4855ca3b08afd602557f373069b1732ce2e6d52341481b0d38f1938452e9d7759ab177c66699962b592f20ceded03eea3cd405d8670578c47842e2c550 " ,
58
129
},
59
130
}
60
131
for _ , tt := range tests {
61
132
t .Run (tt .name , func (t * testing.T ) {
62
- if got := DigestValues (testDigestAlgo , tt .values ); got != tt .want {
133
+ if got := DigestValues (tt . algo , tt .values ); got != tt .want {
63
134
t .Errorf ("DigestValues() = %v, want %v" , got , tt .want )
64
135
}
65
136
})
66
137
}
67
138
}
139
+
140
+ func TestVerifyValues (t * testing.T ) {
141
+ tests := []struct {
142
+ name string
143
+ digest digest.Digest
144
+ values chartutil.Values
145
+ want bool
146
+ }{
147
+ {
148
+ name : "empty values" ,
149
+ digest : "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ,
150
+ values : chartutil.Values {},
151
+ want : true ,
152
+ },
153
+ {
154
+ name : "nil values" ,
155
+ digest : "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ,
156
+ values : nil ,
157
+ want : true ,
158
+ },
159
+ {
160
+ name : "empty digest" ,
161
+ digest : "" ,
162
+ want : false ,
163
+ },
164
+ {
165
+ name : "invalid digest" ,
166
+ digest : "sha512:invalid" ,
167
+ values : nil ,
168
+ want : false ,
169
+ },
170
+ {
171
+ name : "matching values" ,
172
+ digest : "sha256:fcdc2b0de1581a3633ada4afee3f918f6eaa5b5ab38c3fef03d5b48d3f85d9f6" ,
173
+ values : chartutil.Values {
174
+ "image" : map [string ]interface {}{
175
+ "repository" : "nginx" ,
176
+ "tag" : "latest" ,
177
+ },
178
+ "ports" : []interface {}{
179
+ map [string ]interface {}{
180
+ "port" : 8080 ,
181
+ "protocol" : "TCP" ,
182
+ },
183
+ map [string ]interface {}{
184
+ "port" : 9090 ,
185
+ "protocol" : "UDP" ,
186
+ },
187
+ },
188
+ "replicas" : 3 ,
189
+ },
190
+ want : true ,
191
+ },
192
+ {
193
+ name : "matching values in different order" ,
194
+ digest : "sha256:fcdc2b0de1581a3633ada4afee3f918f6eaa5b5ab38c3fef03d5b48d3f85d9f6" ,
195
+ values : chartutil.Values {
196
+ "replicas" : 3 ,
197
+ "image" : map [string ]interface {}{
198
+ "tag" : "latest" ,
199
+ "repository" : "nginx" ,
200
+ },
201
+ "ports" : []interface {}{
202
+ map [string ]interface {}{
203
+ "protocol" : "TCP" ,
204
+ "port" : 8080 ,
205
+ },
206
+ map [string ]interface {}{
207
+ "port" : 9090 ,
208
+ "protocol" : "UDP" ,
209
+ },
210
+ },
211
+ },
212
+ want : true ,
213
+ },
214
+ {
215
+ name : "matching values with numeric keys" ,
216
+ digest : "sha256:8a980fcbeadd6f05818f07e8aec14070c22250ca3d96af1fcd5f93b3e85b4d70" ,
217
+ values : chartutil.Values {
218
+ "replicas" : 3 ,
219
+ "test" : map [string ]interface {}{
220
+ "632bd80235a05f4192aefade" : "value1" ,
221
+ "632bd80ddf416cf32fd50679" : "value2" ,
222
+ "632bd817c559818a52307da2" : "value3" ,
223
+ "632bd82398e71231a98004b6" : "value4" ,
224
+ },
225
+ },
226
+ want : true ,
227
+ },
228
+ {
229
+ name : "mismatching values" ,
230
+ digest : "sha256:3f3641788a2d4abda3534eaa90c90b54916e4c6e3a5b2e1b24758b7bfa701ecd" ,
231
+ values : chartutil.Values {
232
+ "foo" : "bar" ,
233
+ },
234
+ want : false ,
235
+ },
236
+ }
237
+ for _ , tt := range tests {
238
+ t .Run (tt .name , func (t * testing.T ) {
239
+ if got := VerifyValues (tt .digest , tt .values ); got != tt .want {
240
+ t .Errorf ("VerifyValues() = %v, want %v" , got , tt .want )
241
+ }
242
+ })
243
+ }
244
+ }
0 commit comments