xref: /aosp_15_r20/external/spdx-tools/utils/verification_test.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
1// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2
3package utils
4
5import (
6	"testing"
7
8	"github.com/spdx/tools-golang/spdx/common"
9	"github.com/spdx/tools-golang/spdx/v2_1"
10	"github.com/spdx/tools-golang/spdx/v2_2"
11	"github.com/spdx/tools-golang/spdx/v2_3"
12)
13
14// ===== 2.1 Verification code functionality tests =====
15
16func TestPackage2_1CanGetVerificationCode(t *testing.T) {
17	files := []*v2_1.File{
18		{
19			FileName:           "file2.txt",
20			FileSPDXIdentifier: "File0",
21			Checksums:          []common.Checksum{{Value: "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}},
22		},
23		{
24			FileName:           "file1.txt",
25			FileSPDXIdentifier: "File1",
26			Checksums:          []common.Checksum{{Value: "3333333333bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}},
27		},
28		{
29			FileName:           "file3.txt",
30			FileSPDXIdentifier: "File2",
31			Checksums:          []common.Checksum{{Value: "8888888888bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}},
32		},
33		{
34			FileName:           "file5.txt",
35			FileSPDXIdentifier: "File3",
36			Checksums:          []common.Checksum{{Value: "2222222222bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}},
37		},
38		{
39			FileName:           "file4.txt",
40			FileSPDXIdentifier: "File4",
41			Checksums:          []common.Checksum{{Value: "bbbbbbbbbbccccccccccddddddddddaaaaaaaaaa", Algorithm: common.SHA1}},
42		},
43	}
44
45	wantCode := common.PackageVerificationCode{Value: "ac924b375119c81c1f08c3e2722044bfbbdcd3dc"}
46
47	gotCode, err := GetVerificationCode2_1(files, "")
48	if err != nil {
49		t.Fatalf("expected nil error, got %v", err)
50	}
51	if wantCode.Value != gotCode.Value {
52		t.Errorf("expected %v, got %v", wantCode, gotCode)
53	}
54
55}
56
57func TestPackage2_1CanGetVerificationCodeIgnoringExcludesFile(t *testing.T) {
58	files := []*v2_1.File{
59		{
60			FileName:           "file1.txt",
61			FileSPDXIdentifier: "File0",
62			Checksums:          []common.Checksum{{Value: "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}},
63		},
64		{
65			FileName:           "file2.txt",
66			FileSPDXIdentifier: "File1",
67			Checksums:          []common.Checksum{{Value: "3333333333bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}},
68		},
69		{
70			FileName:           "thisfile.spdx",
71			FileSPDXIdentifier: "File2",
72			Checksums:          []common.Checksum{{Value: "bbbbbbbbbbccccccccccddddddddddaaaaaaaaaa", Algorithm: common.SHA1}},
73		},
74		{
75			FileName:           "file3.txt",
76			FileSPDXIdentifier: "File3",
77			Checksums:          []common.Checksum{{Value: "8888888888bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}},
78		},
79		{
80			FileName:           "file4.txt",
81			FileSPDXIdentifier: "File4",
82			Checksums:          []common.Checksum{{Value: "2222222222bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}},
83		},
84	}
85
86	wantCode := common.PackageVerificationCode{Value: "17fab1bd18fe5c13b5d3983f1c17e5f88b8ff266"}
87
88	gotCode, err := GetVerificationCode2_1(files, "thisfile.spdx")
89	if err != nil {
90		t.Fatalf("expected nil error, got %v", err)
91	}
92	if wantCode.Value != gotCode.Value {
93		t.Errorf("expected %v, got %v", wantCode, gotCode)
94	}
95}
96
97func TestPackage2_1GetVerificationCodeFailsIfNilFileInSlice(t *testing.T) {
98	files := []*v2_1.File{
99		{
100			FileName:           "file2.txt",
101			FileSPDXIdentifier: "File0",
102			Checksums:          []common.Checksum{{Value: "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}},
103		},
104		nil,
105		{
106			FileName:           "file3.txt",
107			FileSPDXIdentifier: "File2",
108			Checksums:          []common.Checksum{{Value: "8888888888bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}},
109		},
110	}
111
112	_, err := GetVerificationCode2_1(files, "")
113	if err == nil {
114		t.Fatalf("expected non-nil error, got nil")
115	}
116}
117
118// ===== 2.2 Verification code functionality tests =====
119
120func TestPackage2_2CanGetVerificationCode(t *testing.T) {
121	files := []*v2_2.File{
122		{
123			FileName:           "file2.txt",
124			FileSPDXIdentifier: "File0",
125			Checksums: []common.Checksum{
126				{
127					Algorithm: common.SHA1,
128					Value:     "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd",
129				},
130			},
131		},
132		{
133			FileName:           "file1.txt",
134			FileSPDXIdentifier: "File1",
135			Checksums: []common.Checksum{
136				{
137					Algorithm: common.SHA1,
138					Value:     "3333333333bbbbbbbbbbccccccccccdddddddddd",
139				},
140			},
141		},
142		{
143			FileName:           "file3.txt",
144			FileSPDXIdentifier: "File2",
145			Checksums: []common.Checksum{
146				{
147					Algorithm: common.SHA1,
148					Value:     "8888888888bbbbbbbbbbccccccccccdddddddddd",
149				},
150			},
151		},
152		{
153			FileName:           "file5.txt",
154			FileSPDXIdentifier: "File3",
155			Checksums: []common.Checksum{
156				{
157					Algorithm: common.SHA1,
158					Value:     "2222222222bbbbbbbbbbccccccccccdddddddddd",
159				},
160			},
161		},
162		{
163			FileName:           "file4.txt",
164			FileSPDXIdentifier: "File4",
165			Checksums: []common.Checksum{
166				{
167					Algorithm: common.SHA1,
168					Value:     "bbbbbbbbbbccccccccccddddddddddaaaaaaaaaa",
169				},
170			},
171		},
172	}
173
174	wantCode := common.PackageVerificationCode{Value: "ac924b375119c81c1f08c3e2722044bfbbdcd3dc"}
175
176	gotCode, err := GetVerificationCode2_2(files, "")
177	if err != nil {
178		t.Fatalf("expected nil error, got %v", err)
179	}
180	if wantCode.Value != gotCode.Value {
181		t.Errorf("expected %v, got %v", wantCode, gotCode)
182	}
183
184}
185
186func TestPackage2_2CanGetVerificationCodeIgnoringExcludesFile(t *testing.T) {
187	files := []*v2_2.File{
188		{
189			FileName:           "file1.txt",
190			FileSPDXIdentifier: "File0",
191			Checksums: []common.Checksum{
192				{
193					Algorithm: common.SHA1,
194					Value:     "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd",
195				},
196			},
197		},
198		{
199			FileName:           "file2.txt",
200			FileSPDXIdentifier: "File1",
201			Checksums: []common.Checksum{
202				{
203					Algorithm: common.SHA1,
204					Value:     "3333333333bbbbbbbbbbccccccccccdddddddddd",
205				},
206			},
207		},
208		{
209			FileName:           "thisfile.spdx",
210			FileSPDXIdentifier: "File2",
211			Checksums: []common.Checksum{
212				{
213					Algorithm: common.SHA1,
214					Value:     "bbbbbbbbbbccccccccccddddddddddaaaaaaaaaa",
215				},
216			},
217		},
218		{
219			FileName:           "file3.txt",
220			FileSPDXIdentifier: "File3",
221			Checksums: []common.Checksum{
222				{
223					Algorithm: common.SHA1,
224					Value:     "8888888888bbbbbbbbbbccccccccccdddddddddd",
225				},
226			},
227		},
228		{
229			FileName:           "file4.txt",
230			FileSPDXIdentifier: "File4",
231			Checksums: []common.Checksum{
232				{
233					Algorithm: common.SHA1,
234					Value:     "2222222222bbbbbbbbbbccccccccccdddddddddd",
235				},
236			},
237		},
238	}
239
240	wantCode := common.PackageVerificationCode{Value: "17fab1bd18fe5c13b5d3983f1c17e5f88b8ff266"}
241
242	gotCode, err := GetVerificationCode2_2(files, "thisfile.spdx")
243	if err != nil {
244		t.Fatalf("expected nil error, got %v", err)
245	}
246	if wantCode.Value != gotCode.Value {
247		t.Errorf("expected %v, got %v", wantCode, gotCode)
248	}
249}
250
251func TestPackage2_2GetVerificationCodeFailsIfNilFileInSlice(t *testing.T) {
252	files := []*v2_2.File{
253		{
254			FileName:           "file2.txt",
255			FileSPDXIdentifier: "File0",
256			Checksums: []common.Checksum{
257				{
258					Algorithm: common.SHA1,
259					Value:     "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd",
260				},
261			},
262		},
263		nil,
264		{
265			FileName:           "file3.txt",
266			FileSPDXIdentifier: "File2",
267			Checksums: []common.Checksum{
268				{
269					Algorithm: common.SHA1,
270					Value:     "8888888888bbbbbbbbbbccccccccccdddddddddd",
271				},
272			},
273		},
274	}
275
276	_, err := GetVerificationCode2_2(files, "")
277	if err == nil {
278		t.Fatalf("expected non-nil error, got nil")
279	}
280}
281
282// ===== 2.3 Verification code functionality tests =====
283
284func TestPackage2_3CanGetVerificationCode(t *testing.T) {
285	files := []*v2_3.File{
286		{
287			FileName:           "file2.txt",
288			FileSPDXIdentifier: "File0",
289			Checksums: []common.Checksum{
290				{
291					Algorithm: common.SHA1,
292					Value:     "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd",
293				},
294			},
295		},
296		{
297			FileName:           "file1.txt",
298			FileSPDXIdentifier: "File1",
299			Checksums: []common.Checksum{
300				{
301					Algorithm: common.SHA1,
302					Value:     "3333333333bbbbbbbbbbccccccccccdddddddddd",
303				},
304			},
305		},
306		{
307			FileName:           "file3.txt",
308			FileSPDXIdentifier: "File2",
309			Checksums: []common.Checksum{
310				{
311					Algorithm: common.SHA1,
312					Value:     "8888888888bbbbbbbbbbccccccccccdddddddddd",
313				},
314			},
315		},
316		{
317			FileName:           "file5.txt",
318			FileSPDXIdentifier: "File3",
319			Checksums: []common.Checksum{
320				{
321					Algorithm: common.SHA1,
322					Value:     "2222222222bbbbbbbbbbccccccccccdddddddddd",
323				},
324			},
325		},
326		{
327			FileName:           "file4.txt",
328			FileSPDXIdentifier: "File4",
329			Checksums: []common.Checksum{
330				{
331					Algorithm: common.SHA1,
332					Value:     "bbbbbbbbbbccccccccccddddddddddaaaaaaaaaa",
333				},
334			},
335		},
336	}
337
338	wantCode := common.PackageVerificationCode{Value: "ac924b375119c81c1f08c3e2722044bfbbdcd3dc"}
339
340	gotCode, err := GetVerificationCode2_3(files, "")
341	if err != nil {
342		t.Fatalf("expected nil error, got %v", err)
343	}
344	if wantCode.Value != gotCode.Value {
345		t.Errorf("expected %v, got %v", wantCode, gotCode)
346	}
347
348}
349
350func TestPackage2_3CanGetVerificationCodeIgnoringExcludesFile(t *testing.T) {
351	files := []*v2_3.File{
352		{
353			FileName:           "file1.txt",
354			FileSPDXIdentifier: "File0",
355			Checksums: []common.Checksum{
356				{
357					Algorithm: common.SHA1,
358					Value:     "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd",
359				},
360			},
361		},
362		{
363			FileName:           "file2.txt",
364			FileSPDXIdentifier: "File1",
365			Checksums: []common.Checksum{
366				{
367					Algorithm: common.SHA1,
368					Value:     "3333333333bbbbbbbbbbccccccccccdddddddddd",
369				},
370			},
371		},
372		{
373			FileName:           "thisfile.spdx",
374			FileSPDXIdentifier: "File2",
375			Checksums: []common.Checksum{
376				{
377					Algorithm: common.SHA1,
378					Value:     "bbbbbbbbbbccccccccccddddddddddaaaaaaaaaa",
379				},
380			},
381		},
382		{
383			FileName:           "file3.txt",
384			FileSPDXIdentifier: "File3",
385			Checksums: []common.Checksum{
386				{
387					Algorithm: common.SHA1,
388					Value:     "8888888888bbbbbbbbbbccccccccccdddddddddd",
389				},
390			},
391		},
392		{
393			FileName:           "file4.txt",
394			FileSPDXIdentifier: "File4",
395			Checksums: []common.Checksum{
396				{
397					Algorithm: common.SHA1,
398					Value:     "2222222222bbbbbbbbbbccccccccccdddddddddd",
399				},
400			},
401		},
402	}
403
404	wantCode := common.PackageVerificationCode{Value: "17fab1bd18fe5c13b5d3983f1c17e5f88b8ff266"}
405
406	gotCode, err := GetVerificationCode2_3(files, "thisfile.spdx")
407	if err != nil {
408		t.Fatalf("expected nil error, got %v", err)
409	}
410	if wantCode.Value != gotCode.Value {
411		t.Errorf("expected %v, got %v", wantCode, gotCode)
412	}
413}
414
415func TestPackage2_3GetVerificationCodeFailsIfNilFileInSlice(t *testing.T) {
416	files := []*v2_3.File{
417		{
418			FileName:           "file2.txt",
419			FileSPDXIdentifier: "File0",
420			Checksums: []common.Checksum{
421				{
422					Algorithm: common.SHA1,
423					Value:     "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd",
424				},
425			},
426		},
427		nil,
428		{
429			FileName:           "file3.txt",
430			FileSPDXIdentifier: "File2",
431			Checksums: []common.Checksum{
432				{
433					Algorithm: common.SHA1,
434					Value:     "8888888888bbbbbbbbbbccccccccccdddddddddd",
435				},
436			},
437		},
438	}
439
440	_, err := GetVerificationCode2_3(files, "")
441	if err == nil {
442		t.Fatalf("expected non-nil error, got nil")
443	}
444}
445