1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package schema_test
16
17 import (
18 "strings"
19 "testing"
20
21 "github.com/opencontainers/image-spec/schema"
22 )
23
24 func TestDescriptor(t *testing.T) {
25 for i, tt := range []struct {
26 descriptor string
27 fail bool
28 }{
29
30 {
31 descriptor: `
32 {
33 "mediaType": "application/vnd.oci.image.manifest.v1+json",
34 "size": 7682,
35 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
36 }
37 `,
38 fail: false,
39 },
40
41
42 {
43 descriptor: `
44 {
45 "size": 7682,
46 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
47 }
48 `,
49 fail: true,
50 },
51
52
53 {
54 descriptor: `
55 {
56 "mediaType": "application",
57 "size": 7682,
58 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
59 }
60 `,
61 fail: true,
62 },
63
64
65 {
66 descriptor: `
67 {
68 "mediaType": ".foo/bar",
69 "size": 7682,
70 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
71 }
72 `,
73 fail: true,
74 },
75
76
77 {
78 descriptor: `
79 {
80 "mediaType": "foo/.bar",
81 "size": 7682,
82 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
83 }
84 `,
85 fail: true,
86 },
87
88
89 {
90 descriptor: `
91 {
92 "mediaType": "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567/1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567",
93 "size": 7682,
94 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
95 }
96 `,
97 fail: false,
98 },
99
100
101 {
102 descriptor: `
103 {
104 "mediaType": "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678/bar",
105 "size": 7682,
106 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
107 }
108 `,
109 fail: true,
110 },
111
112
113 {
114 descriptor: `
115 {
116 "mediaType": "foo/12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678",
117 "size": 7682,
118 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
119 }
120 `,
121 fail: true,
122 },
123
124
125 {
126 descriptor: `
127 {
128 "mediaType": "application/vnd.oci.image.manifest.v1+json",
129 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
130 }
131 `,
132 fail: true,
133 },
134
135
136 {
137 descriptor: `
138 {
139 "mediaType": "application/vnd.oci.image.manifest.v1+json",
140 "size": "7682",
141 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
142 }
143 `,
144 fail: true,
145 },
146
147
148 {
149 descriptor: `
150 {
151 "mediaType": "application/vnd.oci.image.manifest.v1+json",
152 "size": 7682
153 }
154 `,
155 fail: true,
156 },
157
158
159 {
160 descriptor: `
161 {
162 "mediaType": "application/vnd.oci.image.manifest.v1+json",
163 "size": 7682,
164 "digest": ":5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
165 }
166 `,
167 fail: true,
168 },
169
170
171 {
172 descriptor: `
173 {
174 "mediaType": "application/vnd.oci.image.manifest.v1+json",
175 "size": 7682,
176 "digest": "sha256"
177 }
178 `,
179 fail: true,
180 },
181
182
183 {
184 descriptor: `
185 {
186 "mediaType": "application/vnd.oci.image.manifest.v1+json",
187 "size": 7682,
188 "digest": "SHA256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
189 }
190 `,
191 fail: true,
192 },
193
194
195 {
196 descriptor: `
197 {
198 "mediaType": "application/vnd.oci.image.manifest.v1+json",
199 "size": 7682,
200 "digest": "sha256:5B0BCABD1ED22E9FB1310CF6C2DEC7CDEF19F0AD69EFA1F392E94A4333501270"
201 }
202 `,
203 fail: true,
204 },
205
206
207 {
208 descriptor: `
209 {
210 "mediaType": "application/vnd.oci.image.manifest.v1+json",
211 "size": 7682,
212 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270",
213 "urls": [
214 "https://example.com/foo"
215 ]
216 }
217 `,
218 fail: false,
219 },
220
221
222 {
223 descriptor: `
224 {
225 "mediaType": "application/vnd.oci.image.manifest.v1+json",
226 "size": 7682,
227 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270",
228 "urls": [
229 "value"
230 ]
231 }
232 `,
233 fail: true,
234 },
235
236
237 {
238 descriptor: `
239 {
240 "mediaType": "application/vnd.oci.image.manifest.v1+json",
241 "artifactType": "application/vnd.oci.image.manifest.v1+json",
242 "size": 7682,
243 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
244 }
245 `,
246 fail: false,
247 },
248
249
250 {
251 descriptor: `
252 {
253 "mediaType": "application/vnd.oci.image.manifest.v1+json",
254 "artifactType": "foo/.bar",
255 "size": 7682,
256 "digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
257 }
258 `,
259 fail: true,
260 },
261
262
263 {
264 descriptor: `
265 {
266 "mediaType": "text/plain",
267 "size": 34,
268 "data": "aHR0cHM6Ly9naXRodWIuY29tL29wZW5jb250YWluZXJzCg==",
269 "digest": "sha256:2690af59371e9eca9453dc29882643f46e5ca47ec2862bd517b5e17351325153"
270 }
271 `,
272 fail: false,
273 },
274
275 {
276 descriptor: `{
277 "mediaType": "application/vnd.oci.image.config.v1+json",
278 "size": 1470,
279 "digest": "sha256+b64:c86f7763873b6c0aae22d963bab59b4f5debbed6685761b5951584f6efb0633b"
280 }`,
281 },
282 {
283 descriptor: `{
284 "mediaType": "application/vnd.oci.image.config.v1+json",
285 "size": 1470,
286 "digest": "sha256+b64:c86f7763873b6c0aae22d963bab59b4f5debbed6685761b5951584f6efb0633b"
287 }`,
288 },
289 {
290 descriptor: `{
291 "mediaType": "application/vnd.oci.image.config.v1+json",
292 "size": 1470,
293 "digest": "sha256+foo-bar:c86f7763873b6c0aae22d963bab59b4f5debbed6685761b5951584f6efb0633b"
294 }`,
295 },
296 {
297 descriptor: `
298 {
299 "mediaType": "application/vnd.oci.image.config.v1+json",
300 "size": 1470,
301 "digest": "sha256.foo-bar:c86f7763873b6c0aae22d963bab59b4f5debbed6685761b5951584f6efb0633b"
302 }`,
303 },
304 {
305 descriptor: `{
306 "mediaType": "application/vnd.oci.image.config.v1+json",
307 "size": 1470,
308 "digest": "multihash+base58:QmRZxt2b1FVZPNqd8hsiykDL3TdBDeTSPX9Kv46HmX4Gx8"
309 }`,
310 },
311 {
312
313 descriptor: `{
314 "mediaType": "application/vnd.oci.image.config.v1+json",
315 "size": 1470,
316 "digest": "sha256+foo+-b:c86f7763873b6c0aae22d963bab59b4f5debbed6685761b5951584f6efb0633b"
317 }`,
318 fail: true,
319 },
320 {
321 descriptor: `{
322 "digest": "sha256+b64u:LCa0a2j_xo_5m0U8HTBBNBNCLXBkg7-g-YpeiGJm564",
323 "size": 1000000,
324 "mediaType": "application/vnd.oci.image.config.v1+json"
325 }`,
326 },
327 {
328
329 descriptor: `{
330 "digest": "sha256+b64u.unknownlength:LCa0a2j_xo_5m0U8HTBBNBNCLXBkg7-g-YpeiGJm564=",
331 "size": 1000000,
332 "mediaType": "application/vnd.oci.image.config.v1+json"
333 }`,
334 },
335 {
336 descriptor: `
337 {
338 "mediaType": "text/plain",
339 "size": 34,
340 "data": "aHR0cHM6Ly9naXRodWIuY29tL29wZW5jb250YWluZXJzCg",
341 "digest": "sha256:2690af59371e9eca9453dc29882643f46e5ca47ec2862bd517b5e17351325153"
342 }
343 `,
344 fail: true,
345 },
346 } {
347 r := strings.NewReader(tt.descriptor)
348 err := schema.ValidatorMediaTypeDescriptor.Validate(r)
349
350 if got := err != nil; tt.fail != got {
351 t.Errorf("test %d: expected validation failure %t but got %t, err %v", i, tt.fail, got, err)
352 }
353 }
354 }
355
View as plain text