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