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