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