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