xref: /aosp_15_r20/external/spdx-tools/tvsaver/saver2v1/save_package_test.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2*ba677afaSXin Li
3*ba677afaSXin Lipackage saver2v1
4*ba677afaSXin Li
5*ba677afaSXin Liimport (
6*ba677afaSXin Li	"bytes"
7*ba677afaSXin Li	"testing"
8*ba677afaSXin Li
9*ba677afaSXin Li	"github.com/spdx/tools-golang/spdx/common"
10*ba677afaSXin Li	"github.com/spdx/tools-golang/spdx/v2_1"
11*ba677afaSXin Li)
12*ba677afaSXin Li
13*ba677afaSXin Li// ===== Package section Saver tests =====
14*ba677afaSXin Lifunc TestSaver2_1PackageSavesTextCombo1(t *testing.T) {
15*ba677afaSXin Li	// include package external refs
16*ba677afaSXin Li	// test Supplier:Organization, Originator:Person
17*ba677afaSXin Li	// FilesAnalyzed true, IsFilesAnalyzedTagPresent true
18*ba677afaSXin Li	// PackageVerificationCodeExcludedFile has string
19*ba677afaSXin Li
20*ba677afaSXin Li	// NOTE, this is an entirely made up CPE and the format is likely invalid
21*ba677afaSXin Li	per1 := &v2_1.PackageExternalReference{
22*ba677afaSXin Li		Category:           "SECURITY",
23*ba677afaSXin Li		RefType:            "cpe22Type",
24*ba677afaSXin Li		Locator:            "cpe:/a:john_doe_inc:p1:0.1.0",
25*ba677afaSXin Li		ExternalRefComment: "this is an external ref comment #1",
26*ba677afaSXin Li	}
27*ba677afaSXin Li
28*ba677afaSXin Li	// NOTE, this is an entirely made up NPM
29*ba677afaSXin Li	per2 := &v2_1.PackageExternalReference{
30*ba677afaSXin Li		Category: "PACKAGE-MANAGER",
31*ba677afaSXin Li		RefType:  "npm",
32*ba677afaSXin Li		Locator:  "[email protected]",
33*ba677afaSXin Li		ExternalRefComment: `this is a
34*ba677afaSXin Limulti-line external ref comment`,
35*ba677afaSXin Li	}
36*ba677afaSXin Li
37*ba677afaSXin Li	per3 := &v2_1.PackageExternalReference{
38*ba677afaSXin Li		Category: "OTHER",
39*ba677afaSXin Li		RefType:  "anything",
40*ba677afaSXin Li		Locator:  "anything-without-spaces-can-go-here",
41*ba677afaSXin Li		// no ExternalRefComment for this one
42*ba677afaSXin Li	}
43*ba677afaSXin Li
44*ba677afaSXin Li	pkg := &v2_1.Package{
45*ba677afaSXin Li		PackageName:               "p1",
46*ba677afaSXin Li		PackageSPDXIdentifier:     common.ElementID("p1"),
47*ba677afaSXin Li		PackageVersion:            "0.1.0",
48*ba677afaSXin Li		PackageFileName:           "p1-0.1.0-master.tar.gz",
49*ba677afaSXin Li		PackageSupplier:           &common.Supplier{SupplierType: "Organization", Supplier: "John Doe, Inc."},
50*ba677afaSXin Li		PackageOriginator:         &common.Originator{Originator: "John Doe", OriginatorType: "Person"},
51*ba677afaSXin Li		PackageDownloadLocation:   "http://example.com/p1/p1-0.1.0-master.tar.gz",
52*ba677afaSXin Li		FilesAnalyzed:             true,
53*ba677afaSXin Li		IsFilesAnalyzedTagPresent: true,
54*ba677afaSXin Li		PackageVerificationCode: common.PackageVerificationCode{
55*ba677afaSXin Li			Value:         "0123456789abcdef0123456789abcdef01234567",
56*ba677afaSXin Li			ExcludedFiles: []string{"p1-0.1.0.spdx"},
57*ba677afaSXin Li		},
58*ba677afaSXin Li		PackageChecksums: []common.Checksum{
59*ba677afaSXin Li			{
60*ba677afaSXin Li				Algorithm: common.SHA1,
61*ba677afaSXin Li				Value:     "85ed0817af83a24ad8da68c2b5094de69833983c",
62*ba677afaSXin Li			},
63*ba677afaSXin Li			{
64*ba677afaSXin Li				Algorithm: common.SHA256,
65*ba677afaSXin Li				Value:     "11b6d3ee554eedf79299905a98f9b9a04e498210b59f15094c916c91d150efcd",
66*ba677afaSXin Li			},
67*ba677afaSXin Li			{
68*ba677afaSXin Li				Algorithm: common.MD5,
69*ba677afaSXin Li				Value:     "624c1abb3664f4b35547e7c73864ad24",
70*ba677afaSXin Li			},
71*ba677afaSXin Li		},
72*ba677afaSXin Li		PackageHomePage:         "http://example.com/p1",
73*ba677afaSXin Li		PackageSourceInfo:       "this is a source comment",
74*ba677afaSXin Li		PackageLicenseConcluded: "GPL-2.0-or-later",
75*ba677afaSXin Li		PackageLicenseInfoFromFiles: []string{
76*ba677afaSXin Li			"Apache-1.1",
77*ba677afaSXin Li			"Apache-2.0",
78*ba677afaSXin Li			"GPL-2.0-or-later",
79*ba677afaSXin Li		},
80*ba677afaSXin Li		PackageLicenseDeclared: "Apache-2.0 OR GPL-2.0-or-later",
81*ba677afaSXin Li		PackageLicenseComments: "this is a license comment(s)",
82*ba677afaSXin Li		PackageCopyrightText:   "Copyright (c) John Doe, Inc.",
83*ba677afaSXin Li		PackageSummary:         "this is a summary comment",
84*ba677afaSXin Li		PackageDescription:     "this is a description comment",
85*ba677afaSXin Li		PackageComment:         "this is a comment comment",
86*ba677afaSXin Li		PackageExternalReferences: []*v2_1.PackageExternalReference{
87*ba677afaSXin Li			per1,
88*ba677afaSXin Li			per2,
89*ba677afaSXin Li			per3,
90*ba677afaSXin Li		},
91*ba677afaSXin Li	}
92*ba677afaSXin Li
93*ba677afaSXin Li	// what we want to get, as a buffer of bytes
94*ba677afaSXin Li	want := bytes.NewBufferString(`PackageName: p1
95*ba677afaSXin LiSPDXID: SPDXRef-p1
96*ba677afaSXin LiPackageVersion: 0.1.0
97*ba677afaSXin LiPackageFileName: p1-0.1.0-master.tar.gz
98*ba677afaSXin LiPackageSupplier: Organization: John Doe, Inc.
99*ba677afaSXin LiPackageOriginator: Person: John Doe
100*ba677afaSXin LiPackageDownloadLocation: http://example.com/p1/p1-0.1.0-master.tar.gz
101*ba677afaSXin LiFilesAnalyzed: true
102*ba677afaSXin LiPackageVerificationCode: 0123456789abcdef0123456789abcdef01234567 (excludes: p1-0.1.0.spdx)
103*ba677afaSXin LiPackageChecksum: SHA1: 85ed0817af83a24ad8da68c2b5094de69833983c
104*ba677afaSXin LiPackageChecksum: SHA256: 11b6d3ee554eedf79299905a98f9b9a04e498210b59f15094c916c91d150efcd
105*ba677afaSXin LiPackageChecksum: MD5: 624c1abb3664f4b35547e7c73864ad24
106*ba677afaSXin LiPackageHomePage: http://example.com/p1
107*ba677afaSXin LiPackageSourceInfo: this is a source comment
108*ba677afaSXin LiPackageLicenseConcluded: GPL-2.0-or-later
109*ba677afaSXin LiPackageLicenseInfoFromFiles: Apache-1.1
110*ba677afaSXin LiPackageLicenseInfoFromFiles: Apache-2.0
111*ba677afaSXin LiPackageLicenseInfoFromFiles: GPL-2.0-or-later
112*ba677afaSXin LiPackageLicenseDeclared: Apache-2.0 OR GPL-2.0-or-later
113*ba677afaSXin LiPackageLicenseComments: this is a license comment(s)
114*ba677afaSXin LiPackageCopyrightText: Copyright (c) John Doe, Inc.
115*ba677afaSXin LiPackageSummary: this is a summary comment
116*ba677afaSXin LiPackageDescription: this is a description comment
117*ba677afaSXin LiPackageComment: this is a comment comment
118*ba677afaSXin LiExternalRef: SECURITY cpe22Type cpe:/a:john_doe_inc:p1:0.1.0
119*ba677afaSXin LiExternalRefComment: this is an external ref comment #1
120*ba677afaSXin LiExternalRef: PACKAGE-MANAGER npm p1@0.1.0
121*ba677afaSXin LiExternalRefComment: <text>this is a
122*ba677afaSXin Limulti-line external ref comment</text>
123*ba677afaSXin LiExternalRef: OTHER anything anything-without-spaces-can-go-here
124*ba677afaSXin Li
125*ba677afaSXin Li`)
126*ba677afaSXin Li
127*ba677afaSXin Li	// render as buffer of bytes
128*ba677afaSXin Li	var got bytes.Buffer
129*ba677afaSXin Li	err := renderPackage2_1(pkg, &got)
130*ba677afaSXin Li	if err != nil {
131*ba677afaSXin Li		t.Errorf("Expected nil error, got %v", err)
132*ba677afaSXin Li	}
133*ba677afaSXin Li
134*ba677afaSXin Li	// check that they match
135*ba677afaSXin Li	c := bytes.Compare(want.Bytes(), got.Bytes())
136*ba677afaSXin Li	if c != 0 {
137*ba677afaSXin Li		t.Errorf("Expected %v, got %v", want.String(), got.String())
138*ba677afaSXin Li	}
139*ba677afaSXin Li}
140*ba677afaSXin Li
141*ba677afaSXin Lifunc TestSaver2_1PackageSavesTextCombo2(t *testing.T) {
142*ba677afaSXin Li	// no package external refs
143*ba677afaSXin Li	// test Supplier:NOASSERTION, Originator:Organization
144*ba677afaSXin Li	// FilesAnalyzed true, IsFilesAnalyzedTagPresent false
145*ba677afaSXin Li	// PackageVerificationCodeExcludedFile is empty
146*ba677afaSXin Li
147*ba677afaSXin Li	pkg := &v2_1.Package{
148*ba677afaSXin Li		PackageName:               "p1",
149*ba677afaSXin Li		PackageSPDXIdentifier:     common.ElementID("p1"),
150*ba677afaSXin Li		PackageVersion:            "0.1.0",
151*ba677afaSXin Li		PackageFileName:           "p1-0.1.0-master.tar.gz",
152*ba677afaSXin Li		PackageSupplier:           &common.Supplier{Supplier: "NOASSERTION"},
153*ba677afaSXin Li		PackageOriginator:         &common.Originator{OriginatorType: "Organization", Originator: "John Doe, Inc."},
154*ba677afaSXin Li		PackageDownloadLocation:   "http://example.com/p1/p1-0.1.0-master.tar.gz",
155*ba677afaSXin Li		FilesAnalyzed:             true,
156*ba677afaSXin Li		IsFilesAnalyzedTagPresent: false,
157*ba677afaSXin Li		PackageVerificationCode:   common.PackageVerificationCode{Value: "0123456789abcdef0123456789abcdef01234567"},
158*ba677afaSXin Li		PackageChecksums: []common.Checksum{
159*ba677afaSXin Li			{
160*ba677afaSXin Li				Algorithm: common.SHA1,
161*ba677afaSXin Li				Value:     "85ed0817af83a24ad8da68c2b5094de69833983c",
162*ba677afaSXin Li			},
163*ba677afaSXin Li			{
164*ba677afaSXin Li				Algorithm: common.SHA256,
165*ba677afaSXin Li				Value:     "11b6d3ee554eedf79299905a98f9b9a04e498210b59f15094c916c91d150efcd",
166*ba677afaSXin Li			},
167*ba677afaSXin Li			{
168*ba677afaSXin Li				Algorithm: common.MD5,
169*ba677afaSXin Li				Value:     "624c1abb3664f4b35547e7c73864ad24",
170*ba677afaSXin Li			},
171*ba677afaSXin Li		},
172*ba677afaSXin Li		PackageHomePage:         "http://example.com/p1",
173*ba677afaSXin Li		PackageSourceInfo:       "this is a source comment",
174*ba677afaSXin Li		PackageLicenseConcluded: "GPL-2.0-or-later",
175*ba677afaSXin Li		PackageLicenseInfoFromFiles: []string{
176*ba677afaSXin Li			"Apache-1.1",
177*ba677afaSXin Li			"Apache-2.0",
178*ba677afaSXin Li			"GPL-2.0-or-later",
179*ba677afaSXin Li		},
180*ba677afaSXin Li		PackageLicenseDeclared: "Apache-2.0 OR GPL-2.0-or-later",
181*ba677afaSXin Li		PackageLicenseComments: "this is a license comment(s)",
182*ba677afaSXin Li		PackageCopyrightText:   "Copyright (c) John Doe, Inc.",
183*ba677afaSXin Li		PackageSummary:         "this is a summary comment",
184*ba677afaSXin Li		PackageDescription:     "this is a description comment",
185*ba677afaSXin Li		PackageComment:         "this is a comment comment",
186*ba677afaSXin Li	}
187*ba677afaSXin Li
188*ba677afaSXin Li	// what we want to get, as a buffer of bytes
189*ba677afaSXin Li	want := bytes.NewBufferString(`PackageName: p1
190*ba677afaSXin LiSPDXID: SPDXRef-p1
191*ba677afaSXin LiPackageVersion: 0.1.0
192*ba677afaSXin LiPackageFileName: p1-0.1.0-master.tar.gz
193*ba677afaSXin LiPackageSupplier: NOASSERTION
194*ba677afaSXin LiPackageOriginator: Organization: John Doe, Inc.
195*ba677afaSXin LiPackageDownloadLocation: http://example.com/p1/p1-0.1.0-master.tar.gz
196*ba677afaSXin LiPackageVerificationCode: 0123456789abcdef0123456789abcdef01234567
197*ba677afaSXin LiPackageChecksum: SHA1: 85ed0817af83a24ad8da68c2b5094de69833983c
198*ba677afaSXin LiPackageChecksum: SHA256: 11b6d3ee554eedf79299905a98f9b9a04e498210b59f15094c916c91d150efcd
199*ba677afaSXin LiPackageChecksum: MD5: 624c1abb3664f4b35547e7c73864ad24
200*ba677afaSXin LiPackageHomePage: http://example.com/p1
201*ba677afaSXin LiPackageSourceInfo: this is a source comment
202*ba677afaSXin LiPackageLicenseConcluded: GPL-2.0-or-later
203*ba677afaSXin LiPackageLicenseInfoFromFiles: Apache-1.1
204*ba677afaSXin LiPackageLicenseInfoFromFiles: Apache-2.0
205*ba677afaSXin LiPackageLicenseInfoFromFiles: GPL-2.0-or-later
206*ba677afaSXin LiPackageLicenseDeclared: Apache-2.0 OR GPL-2.0-or-later
207*ba677afaSXin LiPackageLicenseComments: this is a license comment(s)
208*ba677afaSXin LiPackageCopyrightText: Copyright (c) John Doe, Inc.
209*ba677afaSXin LiPackageSummary: this is a summary comment
210*ba677afaSXin LiPackageDescription: this is a description comment
211*ba677afaSXin LiPackageComment: this is a comment comment
212*ba677afaSXin Li
213*ba677afaSXin Li`)
214*ba677afaSXin Li
215*ba677afaSXin Li	// render as buffer of bytes
216*ba677afaSXin Li	var got bytes.Buffer
217*ba677afaSXin Li	err := renderPackage2_1(pkg, &got)
218*ba677afaSXin Li	if err != nil {
219*ba677afaSXin Li		t.Errorf("Expected nil error, got %v", err)
220*ba677afaSXin Li	}
221*ba677afaSXin Li
222*ba677afaSXin Li	// check that they match
223*ba677afaSXin Li	c := bytes.Compare(want.Bytes(), got.Bytes())
224*ba677afaSXin Li	if c != 0 {
225*ba677afaSXin Li		t.Errorf("Expected %v, got %v", want.String(), got.String())
226*ba677afaSXin Li	}
227*ba677afaSXin Li}
228*ba677afaSXin Li
229*ba677afaSXin Lifunc TestSaver2_1PackageSavesTextCombo3(t *testing.T) {
230*ba677afaSXin Li	// no package external refs
231*ba677afaSXin Li	// test Supplier:Person, Originator:NOASSERTION
232*ba677afaSXin Li	// FilesAnalyzed false, IsFilesAnalyzedTagPresent true
233*ba677afaSXin Li	// PackageVerificationCodeExcludedFile is empty
234*ba677afaSXin Li
235*ba677afaSXin Li	pkg := &v2_1.Package{
236*ba677afaSXin Li		PackageName:               "p1",
237*ba677afaSXin Li		PackageSPDXIdentifier:     common.ElementID("p1"),
238*ba677afaSXin Li		PackageVersion:            "0.1.0",
239*ba677afaSXin Li		PackageFileName:           "p1-0.1.0-master.tar.gz",
240*ba677afaSXin Li		PackageSupplier:           &common.Supplier{Supplier: "John Doe", SupplierType: "Person"},
241*ba677afaSXin Li		PackageOriginator:         &common.Originator{Originator: "NOASSERTION"},
242*ba677afaSXin Li		PackageDownloadLocation:   "http://example.com/p1/p1-0.1.0-master.tar.gz",
243*ba677afaSXin Li		FilesAnalyzed:             false,
244*ba677afaSXin Li		IsFilesAnalyzedTagPresent: true,
245*ba677afaSXin Li		// NOTE that verification code MUST be omitted from output
246*ba677afaSXin Li		// since FilesAnalyzed is false
247*ba677afaSXin Li		PackageVerificationCode: common.PackageVerificationCode{Value: "0123456789abcdef0123456789abcdef01234567"},
248*ba677afaSXin Li		PackageChecksums: []common.Checksum{
249*ba677afaSXin Li			{
250*ba677afaSXin Li				Algorithm: common.SHA1,
251*ba677afaSXin Li				Value:     "85ed0817af83a24ad8da68c2b5094de69833983c",
252*ba677afaSXin Li			},
253*ba677afaSXin Li			{
254*ba677afaSXin Li				Algorithm: common.SHA256,
255*ba677afaSXin Li				Value:     "11b6d3ee554eedf79299905a98f9b9a04e498210b59f15094c916c91d150efcd",
256*ba677afaSXin Li			},
257*ba677afaSXin Li			{
258*ba677afaSXin Li				Algorithm: common.MD5,
259*ba677afaSXin Li				Value:     "624c1abb3664f4b35547e7c73864ad24",
260*ba677afaSXin Li			},
261*ba677afaSXin Li		},
262*ba677afaSXin Li		PackageHomePage:         "http://example.com/p1",
263*ba677afaSXin Li		PackageSourceInfo:       "this is a source comment",
264*ba677afaSXin Li		PackageLicenseConcluded: "GPL-2.0-or-later",
265*ba677afaSXin Li		// NOTE that license info from files MUST be omitted from output
266*ba677afaSXin Li		// since FilesAnalyzed is false
267*ba677afaSXin Li		PackageLicenseInfoFromFiles: []string{
268*ba677afaSXin Li			"Apache-1.1",
269*ba677afaSXin Li			"Apache-2.0",
270*ba677afaSXin Li			"GPL-2.0-or-later",
271*ba677afaSXin Li		},
272*ba677afaSXin Li		PackageLicenseDeclared: "Apache-2.0 OR GPL-2.0-or-later",
273*ba677afaSXin Li		PackageLicenseComments: "this is a license comment(s)",
274*ba677afaSXin Li		PackageCopyrightText:   "Copyright (c) John Doe, Inc.",
275*ba677afaSXin Li		PackageSummary:         "this is a summary comment",
276*ba677afaSXin Li		PackageDescription:     "this is a description comment",
277*ba677afaSXin Li		PackageComment:         "this is a comment comment",
278*ba677afaSXin Li	}
279*ba677afaSXin Li
280*ba677afaSXin Li	// what we want to get, as a buffer of bytes
281*ba677afaSXin Li	want := bytes.NewBufferString(`PackageName: p1
282*ba677afaSXin LiSPDXID: SPDXRef-p1
283*ba677afaSXin LiPackageVersion: 0.1.0
284*ba677afaSXin LiPackageFileName: p1-0.1.0-master.tar.gz
285*ba677afaSXin LiPackageSupplier: Person: John Doe
286*ba677afaSXin LiPackageOriginator: NOASSERTION
287*ba677afaSXin LiPackageDownloadLocation: http://example.com/p1/p1-0.1.0-master.tar.gz
288*ba677afaSXin LiFilesAnalyzed: false
289*ba677afaSXin LiPackageChecksum: SHA1: 85ed0817af83a24ad8da68c2b5094de69833983c
290*ba677afaSXin LiPackageChecksum: SHA256: 11b6d3ee554eedf79299905a98f9b9a04e498210b59f15094c916c91d150efcd
291*ba677afaSXin LiPackageChecksum: MD5: 624c1abb3664f4b35547e7c73864ad24
292*ba677afaSXin LiPackageHomePage: http://example.com/p1
293*ba677afaSXin LiPackageSourceInfo: this is a source comment
294*ba677afaSXin LiPackageLicenseConcluded: GPL-2.0-or-later
295*ba677afaSXin LiPackageLicenseDeclared: Apache-2.0 OR GPL-2.0-or-later
296*ba677afaSXin LiPackageLicenseComments: this is a license comment(s)
297*ba677afaSXin LiPackageCopyrightText: Copyright (c) John Doe, Inc.
298*ba677afaSXin LiPackageSummary: this is a summary comment
299*ba677afaSXin LiPackageDescription: this is a description comment
300*ba677afaSXin LiPackageComment: this is a comment comment
301*ba677afaSXin Li
302*ba677afaSXin Li`)
303*ba677afaSXin Li
304*ba677afaSXin Li	// render as buffer of bytes
305*ba677afaSXin Li	var got bytes.Buffer
306*ba677afaSXin Li	err := renderPackage2_1(pkg, &got)
307*ba677afaSXin Li	if err != nil {
308*ba677afaSXin Li		t.Errorf("Expected nil error, got %v", err)
309*ba677afaSXin Li	}
310*ba677afaSXin Li
311*ba677afaSXin Li	// check that they match
312*ba677afaSXin Li	c := bytes.Compare(want.Bytes(), got.Bytes())
313*ba677afaSXin Li	if c != 0 {
314*ba677afaSXin Li		t.Errorf("Expected %v, got %v", want.String(), got.String())
315*ba677afaSXin Li	}
316*ba677afaSXin Li}
317*ba677afaSXin Li
318*ba677afaSXin Lifunc TestSaver2_1PackageSaveOmitsOptionalFieldsIfEmpty(t *testing.T) {
319*ba677afaSXin Li	pkg := &v2_1.Package{
320*ba677afaSXin Li		PackageName:               "p1",
321*ba677afaSXin Li		PackageSPDXIdentifier:     common.ElementID("p1"),
322*ba677afaSXin Li		PackageDownloadLocation:   "http://example.com/p1/p1-0.1.0-master.tar.gz",
323*ba677afaSXin Li		FilesAnalyzed:             false,
324*ba677afaSXin Li		IsFilesAnalyzedTagPresent: true,
325*ba677afaSXin Li		// NOTE that verification code MUST be omitted from output,
326*ba677afaSXin Li		// even if present in model, since FilesAnalyzed is false
327*ba677afaSXin Li		PackageLicenseConcluded: "GPL-2.0-or-later",
328*ba677afaSXin Li		// NOTE that license info from files MUST be omitted from output
329*ba677afaSXin Li		// even if present in model, since FilesAnalyzed is false
330*ba677afaSXin Li		PackageLicenseInfoFromFiles: []string{
331*ba677afaSXin Li			"Apache-1.1",
332*ba677afaSXin Li			"Apache-2.0",
333*ba677afaSXin Li			"GPL-2.0-or-later",
334*ba677afaSXin Li		},
335*ba677afaSXin Li		PackageLicenseDeclared: "Apache-2.0 OR GPL-2.0-or-later",
336*ba677afaSXin Li		PackageCopyrightText:   "Copyright (c) John Doe, Inc.",
337*ba677afaSXin Li	}
338*ba677afaSXin Li
339*ba677afaSXin Li	// what we want to get, as a buffer of bytes
340*ba677afaSXin Li	want := bytes.NewBufferString(`PackageName: p1
341*ba677afaSXin LiSPDXID: SPDXRef-p1
342*ba677afaSXin LiPackageDownloadLocation: http://example.com/p1/p1-0.1.0-master.tar.gz
343*ba677afaSXin LiFilesAnalyzed: false
344*ba677afaSXin LiPackageLicenseConcluded: GPL-2.0-or-later
345*ba677afaSXin LiPackageLicenseDeclared: Apache-2.0 OR GPL-2.0-or-later
346*ba677afaSXin LiPackageCopyrightText: Copyright (c) John Doe, Inc.
347*ba677afaSXin Li
348*ba677afaSXin Li`)
349*ba677afaSXin Li
350*ba677afaSXin Li	// render as buffer of bytes
351*ba677afaSXin Li	var got bytes.Buffer
352*ba677afaSXin Li	err := renderPackage2_1(pkg, &got)
353*ba677afaSXin Li	if err != nil {
354*ba677afaSXin Li		t.Errorf("Expected nil error, got %v", err)
355*ba677afaSXin Li	}
356*ba677afaSXin Li
357*ba677afaSXin Li	// check that they match
358*ba677afaSXin Li	c := bytes.Compare(want.Bytes(), got.Bytes())
359*ba677afaSXin Li	if c != 0 {
360*ba677afaSXin Li		t.Errorf("Expected %v, got %v", want.String(), got.String())
361*ba677afaSXin Li	}
362*ba677afaSXin Li}
363*ba677afaSXin Li
364*ba677afaSXin Lifunc TestSaver2_1PackageSavesFilesIfPresent(t *testing.T) {
365*ba677afaSXin Li	f1 := &v2_1.File{
366*ba677afaSXin Li		FileName:           "/tmp/whatever1.txt",
367*ba677afaSXin Li		FileSPDXIdentifier: common.ElementID("File1231"),
368*ba677afaSXin Li		Checksums: []common.Checksum{
369*ba677afaSXin Li			{
370*ba677afaSXin Li				Algorithm: common.SHA1,
371*ba677afaSXin Li				Value:     "85ed0817af83a24ad8da68c2b5094de69833983c",
372*ba677afaSXin Li			},
373*ba677afaSXin Li		},
374*ba677afaSXin Li		LicenseConcluded:   "Apache-2.0",
375*ba677afaSXin Li		LicenseInfoInFiles: []string{"Apache-2.0"},
376*ba677afaSXin Li		FileCopyrightText:  "Copyright (c) Jane Doe",
377*ba677afaSXin Li	}
378*ba677afaSXin Li
379*ba677afaSXin Li	f2 := &v2_1.File{
380*ba677afaSXin Li		FileName:           "/tmp/whatever2.txt",
381*ba677afaSXin Li		FileSPDXIdentifier: common.ElementID("File1232"),
382*ba677afaSXin Li		Checksums: []common.Checksum{
383*ba677afaSXin Li			{
384*ba677afaSXin Li				Algorithm: common.SHA1,
385*ba677afaSXin Li				Value:     "85ed0817af83a24ad8da68c2b5094de69833983d",
386*ba677afaSXin Li			},
387*ba677afaSXin Li		},
388*ba677afaSXin Li		LicenseConcluded:   "MIT",
389*ba677afaSXin Li		LicenseInfoInFiles: []string{"MIT"},
390*ba677afaSXin Li		FileCopyrightText:  "Copyright (c) John Doe",
391*ba677afaSXin Li	}
392*ba677afaSXin Li
393*ba677afaSXin Li	pkg := &v2_1.Package{
394*ba677afaSXin Li		PackageName:               "p1",
395*ba677afaSXin Li		PackageSPDXIdentifier:     common.ElementID("p1"),
396*ba677afaSXin Li		PackageDownloadLocation:   "http://example.com/p1/p1-0.1.0-master.tar.gz",
397*ba677afaSXin Li		FilesAnalyzed:             false,
398*ba677afaSXin Li		IsFilesAnalyzedTagPresent: true,
399*ba677afaSXin Li		// NOTE that verification code MUST be omitted from output,
400*ba677afaSXin Li		// even if present in model, since FilesAnalyzed is false
401*ba677afaSXin Li		PackageLicenseConcluded: "GPL-2.0-or-later",
402*ba677afaSXin Li		// NOTE that license info from files MUST be omitted from output
403*ba677afaSXin Li		// even if present in model, since FilesAnalyzed is false
404*ba677afaSXin Li		PackageLicenseInfoFromFiles: []string{
405*ba677afaSXin Li			"Apache-1.1",
406*ba677afaSXin Li			"Apache-2.0",
407*ba677afaSXin Li			"GPL-2.0-or-later",
408*ba677afaSXin Li		},
409*ba677afaSXin Li		PackageLicenseDeclared: "Apache-2.0 OR GPL-2.0-or-later",
410*ba677afaSXin Li		PackageCopyrightText:   "Copyright (c) John Doe, Inc.",
411*ba677afaSXin Li		Files: []*v2_1.File{
412*ba677afaSXin Li			f1,
413*ba677afaSXin Li			f2,
414*ba677afaSXin Li		},
415*ba677afaSXin Li	}
416*ba677afaSXin Li
417*ba677afaSXin Li	// what we want to get, as a buffer of bytes
418*ba677afaSXin Li	want := bytes.NewBufferString(`PackageName: p1
419*ba677afaSXin LiSPDXID: SPDXRef-p1
420*ba677afaSXin LiPackageDownloadLocation: http://example.com/p1/p1-0.1.0-master.tar.gz
421*ba677afaSXin LiFilesAnalyzed: false
422*ba677afaSXin LiPackageLicenseConcluded: GPL-2.0-or-later
423*ba677afaSXin LiPackageLicenseDeclared: Apache-2.0 OR GPL-2.0-or-later
424*ba677afaSXin LiPackageCopyrightText: Copyright (c) John Doe, Inc.
425*ba677afaSXin Li
426*ba677afaSXin LiFileName: /tmp/whatever1.txt
427*ba677afaSXin LiSPDXID: SPDXRef-File1231
428*ba677afaSXin LiFileChecksum: SHA1: 85ed0817af83a24ad8da68c2b5094de69833983c
429*ba677afaSXin LiLicenseConcluded: Apache-2.0
430*ba677afaSXin LiLicenseInfoInFile: Apache-2.0
431*ba677afaSXin LiFileCopyrightText: Copyright (c) Jane Doe
432*ba677afaSXin Li
433*ba677afaSXin LiFileName: /tmp/whatever2.txt
434*ba677afaSXin LiSPDXID: SPDXRef-File1232
435*ba677afaSXin LiFileChecksum: SHA1: 85ed0817af83a24ad8da68c2b5094de69833983d
436*ba677afaSXin LiLicenseConcluded: MIT
437*ba677afaSXin LiLicenseInfoInFile: MIT
438*ba677afaSXin LiFileCopyrightText: Copyright (c) John Doe
439*ba677afaSXin Li
440*ba677afaSXin Li`)
441*ba677afaSXin Li
442*ba677afaSXin Li	// render as buffer of bytes
443*ba677afaSXin Li	var got bytes.Buffer
444*ba677afaSXin Li	err := renderPackage2_1(pkg, &got)
445*ba677afaSXin Li	if err != nil {
446*ba677afaSXin Li		t.Errorf("Expected nil error, got %v", err)
447*ba677afaSXin Li	}
448*ba677afaSXin Li
449*ba677afaSXin Li	// check that they match
450*ba677afaSXin Li	c := bytes.Compare(want.Bytes(), got.Bytes())
451*ba677afaSXin Li	if c != 0 {
452*ba677afaSXin Li		t.Errorf("Expected %v, got %v", want.String(), got.String())
453*ba677afaSXin Li	}
454*ba677afaSXin Li}
455*ba677afaSXin Li
456*ba677afaSXin Lifunc TestSaver2_1PackageWrapsCopyrightMultiLine(t *testing.T) {
457*ba677afaSXin Li	pkg := &v2_1.Package{
458*ba677afaSXin Li		PackageName:               "p1",
459*ba677afaSXin Li		PackageSPDXIdentifier:     common.ElementID("p1"),
460*ba677afaSXin Li		PackageDownloadLocation:   "http://example.com/p1/p1-0.1.0-master.tar.gz",
461*ba677afaSXin Li		FilesAnalyzed:             false,
462*ba677afaSXin Li		IsFilesAnalyzedTagPresent: true,
463*ba677afaSXin Li		PackageLicenseConcluded:   "GPL-2.0-or-later",
464*ba677afaSXin Li		PackageLicenseInfoFromFiles: []string{
465*ba677afaSXin Li			"Apache-1.1",
466*ba677afaSXin Li			"Apache-2.0",
467*ba677afaSXin Li			"GPL-2.0-or-later",
468*ba677afaSXin Li		},
469*ba677afaSXin Li		PackageLicenseDeclared: "Apache-2.0 OR GPL-2.0-or-later",
470*ba677afaSXin Li		PackageCopyrightText: `Copyright (c) John Doe, Inc.
471*ba677afaSXin LiCopyright Jane Doe`,
472*ba677afaSXin Li	}
473*ba677afaSXin Li
474*ba677afaSXin Li	// what we want to get, as a buffer of bytes
475*ba677afaSXin Li	want := bytes.NewBufferString(`PackageName: p1
476*ba677afaSXin LiSPDXID: SPDXRef-p1
477*ba677afaSXin LiPackageDownloadLocation: http://example.com/p1/p1-0.1.0-master.tar.gz
478*ba677afaSXin LiFilesAnalyzed: false
479*ba677afaSXin LiPackageLicenseConcluded: GPL-2.0-or-later
480*ba677afaSXin LiPackageLicenseDeclared: Apache-2.0 OR GPL-2.0-or-later
481*ba677afaSXin LiPackageCopyrightText: <text>Copyright (c) John Doe, Inc.
482*ba677afaSXin LiCopyright Jane Doe</text>
483*ba677afaSXin Li
484*ba677afaSXin Li`)
485*ba677afaSXin Li
486*ba677afaSXin Li	// render as buffer of bytes
487*ba677afaSXin Li	var got bytes.Buffer
488*ba677afaSXin Li	err := renderPackage2_1(pkg, &got)
489*ba677afaSXin Li	if err != nil {
490*ba677afaSXin Li		t.Errorf("Expected nil error, got %v", err)
491*ba677afaSXin Li	}
492*ba677afaSXin Li
493*ba677afaSXin Li	// check that they match
494*ba677afaSXin Li	c := bytes.Compare(want.Bytes(), got.Bytes())
495*ba677afaSXin Li	if c != 0 {
496*ba677afaSXin Li		t.Errorf("Expected %v, got %v", want.String(), got.String())
497*ba677afaSXin Li	}
498*ba677afaSXin Li}
499