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