1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Lipackage builder 4*ba677afaSXin Li 5*ba677afaSXin Liimport ( 6*ba677afaSXin Li "fmt" 7*ba677afaSXin Li "testing" 8*ba677afaSXin Li 9*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/common" 10*ba677afaSXin Li) 11*ba677afaSXin Li 12*ba677afaSXin Li// ===== 2.1 Builder top-level Document test ===== 13*ba677afaSXin Lifunc TestBuild2_1CreatesDocument(t *testing.T) { 14*ba677afaSXin Li dirRoot := "../testdata/project1/" 15*ba677afaSXin Li 16*ba677afaSXin Li config := &Config2_1{ 17*ba677afaSXin Li NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", 18*ba677afaSXin Li CreatorType: "Person", 19*ba677afaSXin Li Creator: "John Doe", 20*ba677afaSXin Li TestValues: make(map[string]string), 21*ba677afaSXin Li } 22*ba677afaSXin Li config.TestValues["Created"] = "2018-10-19T04:38:00Z" 23*ba677afaSXin Li 24*ba677afaSXin Li wantVerificationCode := common.PackageVerificationCode{Value: "fc9ac4a370af0a471c2e52af66d6b4cf4e2ba12b"} 25*ba677afaSXin Li 26*ba677afaSXin Li doc, err := Build2_1("project1", dirRoot, config) 27*ba677afaSXin Li if err != nil { 28*ba677afaSXin Li t.Errorf("expected nil error, got %v", err) 29*ba677afaSXin Li } 30*ba677afaSXin Li if doc == nil { 31*ba677afaSXin Li t.Fatalf("expected non-nil Document, got nil") 32*ba677afaSXin Li } 33*ba677afaSXin Li 34*ba677afaSXin Li // check CI section 35*ba677afaSXin Li if doc.CreationInfo == nil { 36*ba677afaSXin Li t.Fatalf("expected non-nil CreationInfo section, got nil") 37*ba677afaSXin Li } 38*ba677afaSXin Li if doc.SPDXVersion != "SPDX-2.1" { 39*ba677afaSXin Li t.Errorf("expected %s, got %s", "SPDX-2.1", doc.SPDXVersion) 40*ba677afaSXin Li } 41*ba677afaSXin Li if doc.DataLicense != "CC0-1.0" { 42*ba677afaSXin Li t.Errorf("expected %s, got %s", "CC0-1.0", doc.DataLicense) 43*ba677afaSXin Li } 44*ba677afaSXin Li if doc.SPDXIdentifier != common.ElementID("DOCUMENT") { 45*ba677afaSXin Li t.Errorf("expected %s, got %v", "DOCUMENT", doc.SPDXIdentifier) 46*ba677afaSXin Li } 47*ba677afaSXin Li if doc.DocumentName != "project1" { 48*ba677afaSXin Li t.Errorf("expected %s, got %s", "project1", doc.DocumentName) 49*ba677afaSXin Li } 50*ba677afaSXin Li wantNamespace := fmt.Sprintf("https://github.com/swinslow/spdx-docs/spdx-go/testdata-project1-%s", wantVerificationCode) 51*ba677afaSXin Li if doc.DocumentNamespace != wantNamespace { 52*ba677afaSXin Li t.Errorf("expected %s, got %s", wantNamespace, doc.DocumentNamespace) 53*ba677afaSXin Li } 54*ba677afaSXin Li if len(doc.CreationInfo.Creators) != 2 { 55*ba677afaSXin Li t.Fatalf("expected %d, got %d", 2, len(doc.CreationInfo.Creators)) 56*ba677afaSXin Li } 57*ba677afaSXin Li if doc.CreationInfo.Creators[1].Creator != "John Doe" { 58*ba677afaSXin Li t.Errorf("expected %s, got %+v", "John Doe", doc.CreationInfo.Creators[1]) 59*ba677afaSXin Li } 60*ba677afaSXin Li if doc.CreationInfo.Creators[0].Creator != "github.com/spdx/tools-golang/builder" { 61*ba677afaSXin Li t.Errorf("expected %s, got %+v", "github.com/spdx/tools-golang/builder", doc.CreationInfo.Creators[0]) 62*ba677afaSXin Li } 63*ba677afaSXin Li if doc.CreationInfo.Created != "2018-10-19T04:38:00Z" { 64*ba677afaSXin Li t.Errorf("expected %s, got %s", "2018-10-19T04:38:00Z", doc.CreationInfo.Created) 65*ba677afaSXin Li } 66*ba677afaSXin Li 67*ba677afaSXin Li // check Package section 68*ba677afaSXin Li if doc.Packages == nil { 69*ba677afaSXin Li t.Fatalf("expected non-nil doc.Packages, got nil") 70*ba677afaSXin Li } 71*ba677afaSXin Li if len(doc.Packages) != 1 { 72*ba677afaSXin Li t.Fatalf("expected %d, got %d", 1, len(doc.Packages)) 73*ba677afaSXin Li } 74*ba677afaSXin Li pkg := doc.Packages[0] 75*ba677afaSXin Li if pkg == nil { 76*ba677afaSXin Li t.Fatalf("expected non-nil pkg, got nil") 77*ba677afaSXin Li } 78*ba677afaSXin Li if pkg.PackageName != "project1" { 79*ba677afaSXin Li t.Errorf("expected %v, got %v", "project1", pkg.PackageName) 80*ba677afaSXin Li } 81*ba677afaSXin Li if pkg.PackageSPDXIdentifier != common.ElementID("Package-project1") { 82*ba677afaSXin Li t.Errorf("expected %v, got %v", "Package-project1", pkg.PackageSPDXIdentifier) 83*ba677afaSXin Li } 84*ba677afaSXin Li if pkg.PackageDownloadLocation != "NOASSERTION" { 85*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", pkg.PackageDownloadLocation) 86*ba677afaSXin Li } 87*ba677afaSXin Li if pkg.FilesAnalyzed != true { 88*ba677afaSXin Li t.Errorf("expected %v, got %v", true, pkg.FilesAnalyzed) 89*ba677afaSXin Li } 90*ba677afaSXin Li if pkg.PackageVerificationCode.Value != wantVerificationCode.Value { 91*ba677afaSXin Li t.Errorf("expected %v, got %v", wantVerificationCode, pkg.PackageVerificationCode) 92*ba677afaSXin Li } 93*ba677afaSXin Li if pkg.PackageLicenseConcluded != "NOASSERTION" { 94*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", pkg.PackageLicenseConcluded) 95*ba677afaSXin Li } 96*ba677afaSXin Li if len(pkg.PackageLicenseInfoFromFiles) != 0 { 97*ba677afaSXin Li t.Errorf("expected %v, got %v", 0, len(pkg.PackageLicenseInfoFromFiles)) 98*ba677afaSXin Li } 99*ba677afaSXin Li if pkg.PackageLicenseDeclared != "NOASSERTION" { 100*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", pkg.PackageLicenseDeclared) 101*ba677afaSXin Li } 102*ba677afaSXin Li if pkg.PackageCopyrightText != "NOASSERTION" { 103*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", pkg.PackageCopyrightText) 104*ba677afaSXin Li } 105*ba677afaSXin Li 106*ba677afaSXin Li // check Files section 107*ba677afaSXin Li if pkg.Files == nil { 108*ba677afaSXin Li t.Fatalf("expected non-nil pkg.Files, got nil") 109*ba677afaSXin Li } 110*ba677afaSXin Li if len(pkg.Files) != 5 { 111*ba677afaSXin Li t.Fatalf("expected %d, got %d", 5, len(pkg.Files)) 112*ba677afaSXin Li } 113*ba677afaSXin Li 114*ba677afaSXin Li // files should be in order of identifier, which is numeric, 115*ba677afaSXin Li // created based on alphabetical order of files: 116*ba677afaSXin Li // emptyfile, file1, file3, folder/file4, lastfile 117*ba677afaSXin Li 118*ba677afaSXin Li // check emptyfile.testdata.txt 119*ba677afaSXin Li fileEmpty := pkg.Files[0] 120*ba677afaSXin Li if fileEmpty == nil { 121*ba677afaSXin Li t.Fatalf("expected non-nil file, got nil") 122*ba677afaSXin Li } 123*ba677afaSXin Li if fileEmpty.FileName != "./emptyfile.testdata.txt" { 124*ba677afaSXin Li t.Errorf("expected %v, got %v", "./emptyfile.testdata.txt", fileEmpty.FileName) 125*ba677afaSXin Li } 126*ba677afaSXin Li if fileEmpty.FileSPDXIdentifier != common.ElementID("File0") { 127*ba677afaSXin Li t.Errorf("expected %v, got %v", "File0", fileEmpty.FileSPDXIdentifier) 128*ba677afaSXin Li } 129*ba677afaSXin Li 130*ba677afaSXin Li for _, checksum := range fileEmpty.Checksums { 131*ba677afaSXin Li switch checksum.Algorithm { 132*ba677afaSXin Li case common.SHA1: 133*ba677afaSXin Li if checksum.Value != "da39a3ee5e6b4b0d3255bfef95601890afd80709" { 134*ba677afaSXin Li t.Errorf("expected %v, got %v", "da39a3ee5e6b4b0d3255bfef95601890afd80709", checksum.Value) 135*ba677afaSXin Li } 136*ba677afaSXin Li case common.SHA256: 137*ba677afaSXin Li if checksum.Value != "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" { 138*ba677afaSXin Li t.Errorf("expected %v, got %v", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", checksum.Value) 139*ba677afaSXin Li } 140*ba677afaSXin Li case common.MD5: 141*ba677afaSXin Li if checksum.Value != "d41d8cd98f00b204e9800998ecf8427e" { 142*ba677afaSXin Li t.Errorf("expected %v, got %v", "d41d8cd98f00b204e9800998ecf8427e", checksum.Value) 143*ba677afaSXin Li } 144*ba677afaSXin Li } 145*ba677afaSXin Li } 146*ba677afaSXin Li 147*ba677afaSXin Li if fileEmpty.LicenseConcluded != "NOASSERTION" { 148*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", fileEmpty.LicenseConcluded) 149*ba677afaSXin Li } 150*ba677afaSXin Li if len(fileEmpty.LicenseInfoInFiles) != 1 { 151*ba677afaSXin Li t.Errorf("expected %v, got %v", 1, len(fileEmpty.LicenseInfoInFiles)) 152*ba677afaSXin Li } else { 153*ba677afaSXin Li if fileEmpty.LicenseInfoInFiles[0] != "NOASSERTION" { 154*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", fileEmpty.LicenseInfoInFiles[0]) 155*ba677afaSXin Li } 156*ba677afaSXin Li } 157*ba677afaSXin Li if fileEmpty.FileCopyrightText != "NOASSERTION" { 158*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", fileEmpty.FileCopyrightText) 159*ba677afaSXin Li } 160*ba677afaSXin Li 161*ba677afaSXin Li // check file1.testdata.txt 162*ba677afaSXin Li file1 := pkg.Files[1] 163*ba677afaSXin Li if file1 == nil { 164*ba677afaSXin Li t.Fatalf("expected non-nil file, got nil") 165*ba677afaSXin Li } 166*ba677afaSXin Li if file1.FileName != "./file1.testdata.txt" { 167*ba677afaSXin Li t.Errorf("expected %v, got %v", "./file1.testdata.txt", file1.FileName) 168*ba677afaSXin Li } 169*ba677afaSXin Li if file1.FileSPDXIdentifier != common.ElementID("File1") { 170*ba677afaSXin Li t.Errorf("expected %v, got %v", "File1", file1.FileSPDXIdentifier) 171*ba677afaSXin Li } 172*ba677afaSXin Li 173*ba677afaSXin Li for _, checksum := range file1.Checksums { 174*ba677afaSXin Li switch checksum.Algorithm { 175*ba677afaSXin Li case common.SHA1: 176*ba677afaSXin Li if checksum.Value != "024f870eb6323f532515f7a09d5646a97083b819" { 177*ba677afaSXin Li t.Errorf("expected %v, got %v", "024f870eb6323f532515f7a09d5646a97083b819", checksum.Value) 178*ba677afaSXin Li } 179*ba677afaSXin Li case common.SHA256: 180*ba677afaSXin Li if checksum.Value != "b14e44284ca477b4c0db34b15ca4c454b2947cce7883e22321cf2984050e15bf" { 181*ba677afaSXin Li t.Errorf("expected %v, got %v", "b14e44284ca477b4c0db34b15ca4c454b2947cce7883e22321cf2984050e15bf", checksum.Value) 182*ba677afaSXin Li } 183*ba677afaSXin Li case common.MD5: 184*ba677afaSXin Li if checksum.Value != "37c8208479dfe42d2bb29debd6e32d4a" { 185*ba677afaSXin Li t.Errorf("expected %v, got %v", "37c8208479dfe42d2bb29debd6e32d4a", checksum.Value) 186*ba677afaSXin Li } 187*ba677afaSXin Li } 188*ba677afaSXin Li } 189*ba677afaSXin Li if file1.LicenseConcluded != "NOASSERTION" { 190*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file1.LicenseConcluded) 191*ba677afaSXin Li } 192*ba677afaSXin Li if len(file1.LicenseInfoInFiles) != 1 { 193*ba677afaSXin Li t.Errorf("expected %v, got %v", 1, len(file1.LicenseInfoInFiles)) 194*ba677afaSXin Li } else { 195*ba677afaSXin Li if file1.LicenseInfoInFiles[0] != "NOASSERTION" { 196*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file1.LicenseInfoInFiles[0]) 197*ba677afaSXin Li } 198*ba677afaSXin Li } 199*ba677afaSXin Li if file1.FileCopyrightText != "NOASSERTION" { 200*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file1.FileCopyrightText) 201*ba677afaSXin Li } 202*ba677afaSXin Li 203*ba677afaSXin Li // check file3.testdata.txt 204*ba677afaSXin Li file3 := pkg.Files[2] 205*ba677afaSXin Li if file3 == nil { 206*ba677afaSXin Li t.Fatalf("expected non-nil file, got nil") 207*ba677afaSXin Li } 208*ba677afaSXin Li if file3.FileName != "./file3.testdata.txt" { 209*ba677afaSXin Li t.Errorf("expected %v, got %v", "./file3.testdata.txt", file3.FileName) 210*ba677afaSXin Li } 211*ba677afaSXin Li if file3.FileSPDXIdentifier != common.ElementID("File2") { 212*ba677afaSXin Li t.Errorf("expected %v, got %v", "File2", file3.FileSPDXIdentifier) 213*ba677afaSXin Li } 214*ba677afaSXin Li 215*ba677afaSXin Li for _, checksum := range file3.Checksums { 216*ba677afaSXin Li switch checksum.Algorithm { 217*ba677afaSXin Li case common.SHA1: 218*ba677afaSXin Li if checksum.Value != "a46114b70e163614f01c64adf44cdd438f158fce" { 219*ba677afaSXin Li t.Errorf("expected %v, got %v", "a46114b70e163614f01c64adf44cdd438f158fce", checksum.Value) 220*ba677afaSXin Li } 221*ba677afaSXin Li case common.SHA256: 222*ba677afaSXin Li if checksum.Value != "9fc181b9892720a15df1a1e561860318db40621bd4040ccdf18e110eb01d04b4" { 223*ba677afaSXin Li t.Errorf("expected %v, got %v", "9fc181b9892720a15df1a1e561860318db40621bd4040ccdf18e110eb01d04b4", checksum.Value) 224*ba677afaSXin Li } 225*ba677afaSXin Li case common.MD5: 226*ba677afaSXin Li if checksum.Value != "3e02d3ab9c58eec6911dbba37570934f" { 227*ba677afaSXin Li t.Errorf("expected %v, got %v", "3e02d3ab9c58eec6911dbba37570934f", checksum.Value) 228*ba677afaSXin Li } 229*ba677afaSXin Li } 230*ba677afaSXin Li } 231*ba677afaSXin Li if file3.LicenseConcluded != "NOASSERTION" { 232*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file3.LicenseConcluded) 233*ba677afaSXin Li } 234*ba677afaSXin Li if len(file3.LicenseInfoInFiles) != 1 { 235*ba677afaSXin Li t.Errorf("expected %v, got %v", 1, len(file3.LicenseInfoInFiles)) 236*ba677afaSXin Li } else { 237*ba677afaSXin Li if file3.LicenseInfoInFiles[0] != "NOASSERTION" { 238*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file3.LicenseInfoInFiles[0]) 239*ba677afaSXin Li } 240*ba677afaSXin Li } 241*ba677afaSXin Li if file3.FileCopyrightText != "NOASSERTION" { 242*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file3.FileCopyrightText) 243*ba677afaSXin Li } 244*ba677afaSXin Li 245*ba677afaSXin Li // check folder1/file4.testdata.txt 246*ba677afaSXin Li file4 := pkg.Files[3] 247*ba677afaSXin Li if file4 == nil { 248*ba677afaSXin Li t.Fatalf("expected non-nil file, got nil") 249*ba677afaSXin Li } 250*ba677afaSXin Li if file4.FileName != "./folder1/file4.testdata.txt" { 251*ba677afaSXin Li t.Errorf("expected %v, got %v", "./folder1/file4.testdata.txt", file4.FileName) 252*ba677afaSXin Li } 253*ba677afaSXin Li if file4.FileSPDXIdentifier != common.ElementID("File3") { 254*ba677afaSXin Li t.Errorf("expected %v, got %v", "File3", file4.FileSPDXIdentifier) 255*ba677afaSXin Li } 256*ba677afaSXin Li 257*ba677afaSXin Li for _, checksum := range file4.Checksums { 258*ba677afaSXin Li switch checksum.Algorithm { 259*ba677afaSXin Li case common.SHA1: 260*ba677afaSXin Li if checksum.Value != "e623d7d7d782a7c8323c4d436acee4afab34320f" { 261*ba677afaSXin Li t.Errorf("expected %v, got %v", "e623d7d7d782a7c8323c4d436acee4afab34320f", checksum.Value) 262*ba677afaSXin Li } 263*ba677afaSXin Li case common.SHA256: 264*ba677afaSXin Li if checksum.Value != "574fa42c5e0806c0f8906a44884166540206f021527729407cd5326838629c59" { 265*ba677afaSXin Li t.Errorf("expected %v, got %v", "574fa42c5e0806c0f8906a44884166540206f021527729407cd5326838629c59", checksum.Value) 266*ba677afaSXin Li } 267*ba677afaSXin Li case common.MD5: 268*ba677afaSXin Li if checksum.Value != "96e6a25d35df5b1c477710ef4d0c7210" { 269*ba677afaSXin Li t.Errorf("expected %v, got %v", "96e6a25d35df5b1c477710ef4d0c7210", checksum.Value) 270*ba677afaSXin Li } 271*ba677afaSXin Li } 272*ba677afaSXin Li } 273*ba677afaSXin Li if file4.LicenseConcluded != "NOASSERTION" { 274*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file4.LicenseConcluded) 275*ba677afaSXin Li } 276*ba677afaSXin Li if len(file4.LicenseInfoInFiles) != 1 { 277*ba677afaSXin Li t.Errorf("expected %v, got %v", 1, len(file4.LicenseInfoInFiles)) 278*ba677afaSXin Li } else { 279*ba677afaSXin Li if file4.LicenseInfoInFiles[0] != "NOASSERTION" { 280*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file4.LicenseInfoInFiles[0]) 281*ba677afaSXin Li } 282*ba677afaSXin Li } 283*ba677afaSXin Li if file4.FileCopyrightText != "NOASSERTION" { 284*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file4.FileCopyrightText) 285*ba677afaSXin Li } 286*ba677afaSXin Li 287*ba677afaSXin Li // check lastfile.testdata.txt 288*ba677afaSXin Li lastfile := pkg.Files[4] 289*ba677afaSXin Li if lastfile == nil { 290*ba677afaSXin Li t.Fatalf("expected non-nil file, got nil") 291*ba677afaSXin Li } 292*ba677afaSXin Li if lastfile.FileName != "./lastfile.testdata.txt" { 293*ba677afaSXin Li t.Errorf("expected %v, got %v", "./lastfile.testdata.txt", lastfile.FileName) 294*ba677afaSXin Li } 295*ba677afaSXin Li if lastfile.FileSPDXIdentifier != common.ElementID("File4") { 296*ba677afaSXin Li t.Errorf("expected %v, got %v", "File4", lastfile.FileSPDXIdentifier) 297*ba677afaSXin Li } 298*ba677afaSXin Li 299*ba677afaSXin Li for _, checksum := range lastfile.Checksums { 300*ba677afaSXin Li switch checksum.Algorithm { 301*ba677afaSXin Li case common.SHA1: 302*ba677afaSXin Li if checksum.Value != "26d6221d682d9ba59116f9753a701f34271c8ce1" { 303*ba677afaSXin Li t.Errorf("expected %v, got %v", "26d6221d682d9ba59116f9753a701f34271c8ce1", checksum.Value) 304*ba677afaSXin Li } 305*ba677afaSXin Li case common.SHA256: 306*ba677afaSXin Li if checksum.Value != "0a4bdaf990e9b330ff72022dd78110ae98b60e08337cf2105b89856373416805" { 307*ba677afaSXin Li t.Errorf("expected %v, got %v", "0a4bdaf990e9b330ff72022dd78110ae98b60e08337cf2105b89856373416805", checksum.Value) 308*ba677afaSXin Li } 309*ba677afaSXin Li case common.MD5: 310*ba677afaSXin Li if checksum.Value != "f60baa793870d9085461ad6bbab50b7f" { 311*ba677afaSXin Li t.Errorf("expected %v, got %v", "f60baa793870d9085461ad6bbab50b7f", checksum.Value) 312*ba677afaSXin Li } 313*ba677afaSXin Li } 314*ba677afaSXin Li } 315*ba677afaSXin Li if lastfile.LicenseConcluded != "NOASSERTION" { 316*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", lastfile.LicenseConcluded) 317*ba677afaSXin Li } 318*ba677afaSXin Li if len(lastfile.LicenseInfoInFiles) != 1 { 319*ba677afaSXin Li t.Errorf("expected %v, got %v", 1, len(lastfile.LicenseInfoInFiles)) 320*ba677afaSXin Li } else { 321*ba677afaSXin Li if lastfile.LicenseInfoInFiles[0] != "NOASSERTION" { 322*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", lastfile.LicenseInfoInFiles[0]) 323*ba677afaSXin Li } 324*ba677afaSXin Li } 325*ba677afaSXin Li if lastfile.FileCopyrightText != "NOASSERTION" { 326*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", lastfile.FileCopyrightText) 327*ba677afaSXin Li } 328*ba677afaSXin Li 329*ba677afaSXin Li // check Relationship section -- should be a relationship for doc DESCRIBES pkg 330*ba677afaSXin Li if doc.Relationships == nil { 331*ba677afaSXin Li t.Fatalf("expected non-nil Relationships section, got nil") 332*ba677afaSXin Li } 333*ba677afaSXin Li if len(doc.Relationships) == 0 { 334*ba677afaSXin Li t.Fatalf("expected %v, got %v", 0, len(doc.Relationships)) 335*ba677afaSXin Li } 336*ba677afaSXin Li rln := doc.Relationships[0] 337*ba677afaSXin Li if rln == nil { 338*ba677afaSXin Li t.Fatalf("expected non-nil Relationship, got nil") 339*ba677afaSXin Li } 340*ba677afaSXin Li if rln.RefA != common.MakeDocElementID("", "DOCUMENT") { 341*ba677afaSXin Li t.Errorf("expected %v, got %v", "DOCUMENT", rln.RefA) 342*ba677afaSXin Li } 343*ba677afaSXin Li if rln.RefB != common.MakeDocElementID("", "Package-project1") { 344*ba677afaSXin Li t.Errorf("expected %v, got %v", "Package-project1", rln.RefB) 345*ba677afaSXin Li } 346*ba677afaSXin Li if rln.Relationship != "DESCRIBES" { 347*ba677afaSXin Li t.Errorf("expected %v, got %v", "DESCRIBES", rln.Relationship) 348*ba677afaSXin Li } 349*ba677afaSXin Li 350*ba677afaSXin Li // and check that other sections are present, but empty 351*ba677afaSXin Li if doc.OtherLicenses != nil { 352*ba677afaSXin Li t.Fatalf("expected nil OtherLicenses section, got non-nil") 353*ba677afaSXin Li } 354*ba677afaSXin Li if doc.Annotations != nil { 355*ba677afaSXin Li t.Fatalf("expected nil Annotations section, got non-nil") 356*ba677afaSXin Li } 357*ba677afaSXin Li if doc.Reviews != nil { 358*ba677afaSXin Li t.Fatalf("expected nil Reviews section, got non-nil") 359*ba677afaSXin Li } 360*ba677afaSXin Li 361*ba677afaSXin Li} 362*ba677afaSXin Li 363*ba677afaSXin Lifunc TestBuild2_1CanIgnoreFiles(t *testing.T) { 364*ba677afaSXin Li dirRoot := "../testdata/project3/" 365*ba677afaSXin Li 366*ba677afaSXin Li config := &Config2_1{ 367*ba677afaSXin Li NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", 368*ba677afaSXin Li CreatorType: "Person", 369*ba677afaSXin Li Creator: "John Doe", 370*ba677afaSXin Li PathsIgnored: []string{ 371*ba677afaSXin Li "**/ignoredir/", 372*ba677afaSXin Li "/excludedir/", 373*ba677afaSXin Li "**/ignorefile.txt", 374*ba677afaSXin Li "/alsoEXCLUDEthis.txt", 375*ba677afaSXin Li }, 376*ba677afaSXin Li TestValues: make(map[string]string), 377*ba677afaSXin Li } 378*ba677afaSXin Li config.TestValues["Created"] = "2018-10-19T04:38:00Z" 379*ba677afaSXin Li 380*ba677afaSXin Li doc, err := Build2_1("project1", dirRoot, config) 381*ba677afaSXin Li if err != nil { 382*ba677afaSXin Li t.Errorf("expected nil error, got %v", err) 383*ba677afaSXin Li } 384*ba677afaSXin Li pkg := doc.Packages[0] 385*ba677afaSXin Li if pkg == nil { 386*ba677afaSXin Li t.Fatalf("expected non-nil pkg, got nil") 387*ba677afaSXin Li } 388*ba677afaSXin Li if len(pkg.Files) != 5 { 389*ba677afaSXin Li t.Fatalf("expected len %d, got %d", 5, len(pkg.Files)) 390*ba677afaSXin Li } 391*ba677afaSXin Li 392*ba677afaSXin Li want := "./dontscan.txt" 393*ba677afaSXin Li got := pkg.Files[0].FileName 394*ba677afaSXin Li if want != got { 395*ba677afaSXin Li t.Errorf("expected %v, got %v", want, got) 396*ba677afaSXin Li } 397*ba677afaSXin Li 398*ba677afaSXin Li want = "./keep/keep.txt" 399*ba677afaSXin Li got = pkg.Files[1].FileName 400*ba677afaSXin Li if want != got { 401*ba677afaSXin Li t.Errorf("expected %v, got %v", want, got) 402*ba677afaSXin Li } 403*ba677afaSXin Li 404*ba677afaSXin Li want = "./keep.txt" 405*ba677afaSXin Li got = pkg.Files[2].FileName 406*ba677afaSXin Li if want != got { 407*ba677afaSXin Li t.Errorf("expected %v, got %v", want, got) 408*ba677afaSXin Li } 409*ba677afaSXin Li 410*ba677afaSXin Li want = "./subdir/keep/dontscan.txt" 411*ba677afaSXin Li got = pkg.Files[3].FileName 412*ba677afaSXin Li if want != got { 413*ba677afaSXin Li t.Errorf("expected %v, got %v", want, got) 414*ba677afaSXin Li } 415*ba677afaSXin Li 416*ba677afaSXin Li want = "./subdir/keep/keep.txt" 417*ba677afaSXin Li got = pkg.Files[4].FileName 418*ba677afaSXin Li if want != got { 419*ba677afaSXin Li t.Errorf("expected %v, got %v", want, got) 420*ba677afaSXin Li } 421*ba677afaSXin Li} 422*ba677afaSXin Li 423*ba677afaSXin Li// ===== 2.2 Builder top-level Document test ===== 424*ba677afaSXin Lifunc TestBuild2_2CreatesDocument(t *testing.T) { 425*ba677afaSXin Li dirRoot := "../testdata/project1/" 426*ba677afaSXin Li 427*ba677afaSXin Li config := &Config2_2{ 428*ba677afaSXin Li NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", 429*ba677afaSXin Li CreatorType: "Person", 430*ba677afaSXin Li Creator: "John Doe", 431*ba677afaSXin Li TestValues: make(map[string]string), 432*ba677afaSXin Li } 433*ba677afaSXin Li config.TestValues["Created"] = "2018-10-19T04:38:00Z" 434*ba677afaSXin Li 435*ba677afaSXin Li wantVerificationCode := common.PackageVerificationCode{Value: "fc9ac4a370af0a471c2e52af66d6b4cf4e2ba12b"} 436*ba677afaSXin Li 437*ba677afaSXin Li doc, err := Build2_2("project1", dirRoot, config) 438*ba677afaSXin Li if err != nil { 439*ba677afaSXin Li t.Errorf("expected nil error, got %v", err) 440*ba677afaSXin Li } 441*ba677afaSXin Li if doc == nil { 442*ba677afaSXin Li t.Fatalf("expected non-nil Document, got nil") 443*ba677afaSXin Li } 444*ba677afaSXin Li 445*ba677afaSXin Li // check CI section 446*ba677afaSXin Li if doc.CreationInfo == nil { 447*ba677afaSXin Li t.Fatalf("expected non-nil CreationInfo section, got nil") 448*ba677afaSXin Li } 449*ba677afaSXin Li if doc.SPDXVersion != "SPDX-2.2" { 450*ba677afaSXin Li t.Errorf("expected %s, got %s", "SPDX-2.2", doc.SPDXVersion) 451*ba677afaSXin Li } 452*ba677afaSXin Li if doc.DataLicense != "CC0-1.0" { 453*ba677afaSXin Li t.Errorf("expected %s, got %s", "CC0-1.0", doc.DataLicense) 454*ba677afaSXin Li } 455*ba677afaSXin Li if doc.SPDXIdentifier != common.ElementID("DOCUMENT") { 456*ba677afaSXin Li t.Errorf("expected %s, got %v", "DOCUMENT", doc.SPDXIdentifier) 457*ba677afaSXin Li } 458*ba677afaSXin Li if doc.DocumentName != "project1" { 459*ba677afaSXin Li t.Errorf("expected %s, got %s", "project1", doc.DocumentName) 460*ba677afaSXin Li } 461*ba677afaSXin Li wantNamespace := fmt.Sprintf("https://github.com/swinslow/spdx-docs/spdx-go/testdata-project1-%s", wantVerificationCode) 462*ba677afaSXin Li if doc.DocumentNamespace != wantNamespace { 463*ba677afaSXin Li t.Errorf("expected %s, got %s", wantNamespace, doc.DocumentNamespace) 464*ba677afaSXin Li } 465*ba677afaSXin Li if len(doc.CreationInfo.Creators) != 2 { 466*ba677afaSXin Li t.Fatalf("expected %d, got %d", 2, len(doc.CreationInfo.Creators)) 467*ba677afaSXin Li } 468*ba677afaSXin Li if doc.CreationInfo.Creators[1].Creator != "John Doe" { 469*ba677afaSXin Li t.Errorf("expected %s, got %+v", "John Doe", doc.CreationInfo.Creators[1]) 470*ba677afaSXin Li } 471*ba677afaSXin Li if doc.CreationInfo.Creators[0].Creator != "github.com/spdx/tools-golang/builder" { 472*ba677afaSXin Li t.Errorf("expected %s, got %+v", "github.com/spdx/tools-golang/builder", doc.CreationInfo.Creators[0]) 473*ba677afaSXin Li } 474*ba677afaSXin Li if doc.CreationInfo.Created != "2018-10-19T04:38:00Z" { 475*ba677afaSXin Li t.Errorf("expected %s, got %s", "2018-10-19T04:38:00Z", doc.CreationInfo.Created) 476*ba677afaSXin Li } 477*ba677afaSXin Li 478*ba677afaSXin Li // check Package section 479*ba677afaSXin Li if doc.Packages == nil { 480*ba677afaSXin Li t.Fatalf("expected non-nil doc.Packages, got nil") 481*ba677afaSXin Li } 482*ba677afaSXin Li if len(doc.Packages) != 1 { 483*ba677afaSXin Li t.Fatalf("expected %d, got %d", 1, len(doc.Packages)) 484*ba677afaSXin Li } 485*ba677afaSXin Li pkg := doc.Packages[0] 486*ba677afaSXin Li if pkg == nil { 487*ba677afaSXin Li t.Fatalf("expected non-nil pkg, got nil") 488*ba677afaSXin Li } 489*ba677afaSXin Li if pkg.PackageName != "project1" { 490*ba677afaSXin Li t.Errorf("expected %v, got %v", "project1", pkg.PackageName) 491*ba677afaSXin Li } 492*ba677afaSXin Li if pkg.PackageSPDXIdentifier != common.ElementID("Package-project1") { 493*ba677afaSXin Li t.Errorf("expected %v, got %v", "Package-project1", pkg.PackageSPDXIdentifier) 494*ba677afaSXin Li } 495*ba677afaSXin Li if pkg.PackageDownloadLocation != "NOASSERTION" { 496*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", pkg.PackageDownloadLocation) 497*ba677afaSXin Li } 498*ba677afaSXin Li if pkg.FilesAnalyzed != true { 499*ba677afaSXin Li t.Errorf("expected %v, got %v", true, pkg.FilesAnalyzed) 500*ba677afaSXin Li } 501*ba677afaSXin Li if pkg.PackageVerificationCode.Value != wantVerificationCode.Value { 502*ba677afaSXin Li t.Errorf("expected %v, got %v", wantVerificationCode, pkg.PackageVerificationCode) 503*ba677afaSXin Li } 504*ba677afaSXin Li if pkg.PackageLicenseConcluded != "NOASSERTION" { 505*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", pkg.PackageLicenseConcluded) 506*ba677afaSXin Li } 507*ba677afaSXin Li if len(pkg.PackageLicenseInfoFromFiles) != 0 { 508*ba677afaSXin Li t.Errorf("expected %v, got %v", 0, len(pkg.PackageLicenseInfoFromFiles)) 509*ba677afaSXin Li } 510*ba677afaSXin Li if pkg.PackageLicenseDeclared != "NOASSERTION" { 511*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", pkg.PackageLicenseDeclared) 512*ba677afaSXin Li } 513*ba677afaSXin Li if pkg.PackageCopyrightText != "NOASSERTION" { 514*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", pkg.PackageCopyrightText) 515*ba677afaSXin Li } 516*ba677afaSXin Li 517*ba677afaSXin Li // check Files section 518*ba677afaSXin Li if pkg.Files == nil { 519*ba677afaSXin Li t.Fatalf("expected non-nil pkg.Files, got nil") 520*ba677afaSXin Li } 521*ba677afaSXin Li if len(pkg.Files) != 5 { 522*ba677afaSXin Li t.Fatalf("expected %d, got %d", 5, len(pkg.Files)) 523*ba677afaSXin Li } 524*ba677afaSXin Li 525*ba677afaSXin Li // files should be in order of identifier, which is numeric, 526*ba677afaSXin Li // created based on alphabetical order of files: 527*ba677afaSXin Li // emptyfile, file1, file3, folder/file4, lastfile 528*ba677afaSXin Li 529*ba677afaSXin Li // check emptyfile.testdata.txt 530*ba677afaSXin Li fileEmpty := pkg.Files[0] 531*ba677afaSXin Li if fileEmpty == nil { 532*ba677afaSXin Li t.Fatalf("expected non-nil file, got nil") 533*ba677afaSXin Li } 534*ba677afaSXin Li if fileEmpty.FileName != "./emptyfile.testdata.txt" { 535*ba677afaSXin Li t.Errorf("expected %v, got %v", "./emptyfile.testdata.txt", fileEmpty.FileName) 536*ba677afaSXin Li } 537*ba677afaSXin Li if fileEmpty.FileSPDXIdentifier != common.ElementID("File0") { 538*ba677afaSXin Li t.Errorf("expected %v, got %v", "File0", fileEmpty.FileSPDXIdentifier) 539*ba677afaSXin Li } 540*ba677afaSXin Li for _, checksum := range fileEmpty.Checksums { 541*ba677afaSXin Li switch checksum.Algorithm { 542*ba677afaSXin Li case common.SHA1: 543*ba677afaSXin Li if checksum.Value != "da39a3ee5e6b4b0d3255bfef95601890afd80709" { 544*ba677afaSXin Li t.Errorf("expected %v, got %v", "da39a3ee5e6b4b0d3255bfef95601890afd80709", checksum.Value) 545*ba677afaSXin Li } 546*ba677afaSXin Li case common.SHA256: 547*ba677afaSXin Li if checksum.Value != "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" { 548*ba677afaSXin Li t.Errorf("expected %v, got %v", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", checksum.Value) 549*ba677afaSXin Li } 550*ba677afaSXin Li case common.MD5: 551*ba677afaSXin Li if checksum.Value != "d41d8cd98f00b204e9800998ecf8427e" { 552*ba677afaSXin Li t.Errorf("expected %v, got %v", "d41d8cd98f00b204e9800998ecf8427e", checksum.Value) 553*ba677afaSXin Li } 554*ba677afaSXin Li } 555*ba677afaSXin Li } 556*ba677afaSXin Li if fileEmpty.LicenseConcluded != "NOASSERTION" { 557*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", fileEmpty.LicenseConcluded) 558*ba677afaSXin Li } 559*ba677afaSXin Li if len(fileEmpty.LicenseInfoInFiles) != 1 { 560*ba677afaSXin Li t.Errorf("expected %v, got %v", 1, len(fileEmpty.LicenseInfoInFiles)) 561*ba677afaSXin Li } else { 562*ba677afaSXin Li if fileEmpty.LicenseInfoInFiles[0] != "NOASSERTION" { 563*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", fileEmpty.LicenseInfoInFiles[0]) 564*ba677afaSXin Li } 565*ba677afaSXin Li } 566*ba677afaSXin Li if fileEmpty.FileCopyrightText != "NOASSERTION" { 567*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", fileEmpty.FileCopyrightText) 568*ba677afaSXin Li } 569*ba677afaSXin Li 570*ba677afaSXin Li // check file1.testdata.txt 571*ba677afaSXin Li file1 := pkg.Files[1] 572*ba677afaSXin Li if file1 == nil { 573*ba677afaSXin Li t.Fatalf("expected non-nil file, got nil") 574*ba677afaSXin Li } 575*ba677afaSXin Li if file1.FileName != "./file1.testdata.txt" { 576*ba677afaSXin Li t.Errorf("expected %v, got %v", "./file1.testdata.txt", file1.FileName) 577*ba677afaSXin Li } 578*ba677afaSXin Li if file1.FileSPDXIdentifier != common.ElementID("File1") { 579*ba677afaSXin Li t.Errorf("expected %v, got %v", "File1", file1.FileSPDXIdentifier) 580*ba677afaSXin Li } 581*ba677afaSXin Li for _, checksum := range file1.Checksums { 582*ba677afaSXin Li switch checksum.Algorithm { 583*ba677afaSXin Li case common.SHA1: 584*ba677afaSXin Li if checksum.Value != "024f870eb6323f532515f7a09d5646a97083b819" { 585*ba677afaSXin Li t.Errorf("expected %v, got %v", "024f870eb6323f532515f7a09d5646a97083b819", checksum.Value) 586*ba677afaSXin Li } 587*ba677afaSXin Li case common.SHA256: 588*ba677afaSXin Li if checksum.Value != "b14e44284ca477b4c0db34b15ca4c454b2947cce7883e22321cf2984050e15bf" { 589*ba677afaSXin Li t.Errorf("expected %v, got %v", "b14e44284ca477b4c0db34b15ca4c454b2947cce7883e22321cf2984050e15bf", checksum.Value) 590*ba677afaSXin Li } 591*ba677afaSXin Li case common.MD5: 592*ba677afaSXin Li if checksum.Value != "37c8208479dfe42d2bb29debd6e32d4a" { 593*ba677afaSXin Li t.Errorf("expected %v, got %v", "37c8208479dfe42d2bb29debd6e32d4a", checksum.Value) 594*ba677afaSXin Li } 595*ba677afaSXin Li } 596*ba677afaSXin Li } 597*ba677afaSXin Li if file1.LicenseConcluded != "NOASSERTION" { 598*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file1.LicenseConcluded) 599*ba677afaSXin Li } 600*ba677afaSXin Li if len(file1.LicenseInfoInFiles) != 1 { 601*ba677afaSXin Li t.Errorf("expected %v, got %v", 1, len(file1.LicenseInfoInFiles)) 602*ba677afaSXin Li } else { 603*ba677afaSXin Li if file1.LicenseInfoInFiles[0] != "NOASSERTION" { 604*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file1.LicenseInfoInFiles[0]) 605*ba677afaSXin Li } 606*ba677afaSXin Li } 607*ba677afaSXin Li if file1.FileCopyrightText != "NOASSERTION" { 608*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file1.FileCopyrightText) 609*ba677afaSXin Li } 610*ba677afaSXin Li 611*ba677afaSXin Li // check file3.testdata.txt 612*ba677afaSXin Li file3 := pkg.Files[2] 613*ba677afaSXin Li if file3 == nil { 614*ba677afaSXin Li t.Fatalf("expected non-nil file, got nil") 615*ba677afaSXin Li } 616*ba677afaSXin Li if file3.FileName != "./file3.testdata.txt" { 617*ba677afaSXin Li t.Errorf("expected %v, got %v", "./file3.testdata.txt", file3.FileName) 618*ba677afaSXin Li } 619*ba677afaSXin Li if file3.FileSPDXIdentifier != common.ElementID("File2") { 620*ba677afaSXin Li t.Errorf("expected %v, got %v", "File2", file3.FileSPDXIdentifier) 621*ba677afaSXin Li } 622*ba677afaSXin Li for _, checksum := range file3.Checksums { 623*ba677afaSXin Li switch checksum.Algorithm { 624*ba677afaSXin Li case common.SHA1: 625*ba677afaSXin Li if checksum.Value != "a46114b70e163614f01c64adf44cdd438f158fce" { 626*ba677afaSXin Li t.Errorf("expected %v, got %v", "a46114b70e163614f01c64adf44cdd438f158fce", checksum.Value) 627*ba677afaSXin Li } 628*ba677afaSXin Li case common.SHA256: 629*ba677afaSXin Li if checksum.Value != "9fc181b9892720a15df1a1e561860318db40621bd4040ccdf18e110eb01d04b4" { 630*ba677afaSXin Li t.Errorf("expected %v, got %v", "9fc181b9892720a15df1a1e561860318db40621bd4040ccdf18e110eb01d04b4", checksum.Value) 631*ba677afaSXin Li } 632*ba677afaSXin Li case common.MD5: 633*ba677afaSXin Li if checksum.Value != "3e02d3ab9c58eec6911dbba37570934f" { 634*ba677afaSXin Li t.Errorf("expected %v, got %v", "3e02d3ab9c58eec6911dbba37570934f", checksum.Value) 635*ba677afaSXin Li } 636*ba677afaSXin Li } 637*ba677afaSXin Li } 638*ba677afaSXin Li if file3.LicenseConcluded != "NOASSERTION" { 639*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file3.LicenseConcluded) 640*ba677afaSXin Li } 641*ba677afaSXin Li if len(file3.LicenseInfoInFiles) != 1 { 642*ba677afaSXin Li t.Errorf("expected %v, got %v", 1, len(file3.LicenseInfoInFiles)) 643*ba677afaSXin Li } else { 644*ba677afaSXin Li if file3.LicenseInfoInFiles[0] != "NOASSERTION" { 645*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file3.LicenseInfoInFiles[0]) 646*ba677afaSXin Li } 647*ba677afaSXin Li } 648*ba677afaSXin Li if file3.FileCopyrightText != "NOASSERTION" { 649*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file3.FileCopyrightText) 650*ba677afaSXin Li } 651*ba677afaSXin Li 652*ba677afaSXin Li // check folder1/file4.testdata.txt 653*ba677afaSXin Li file4 := pkg.Files[3] 654*ba677afaSXin Li if file4 == nil { 655*ba677afaSXin Li t.Fatalf("expected non-nil file, got nil") 656*ba677afaSXin Li } 657*ba677afaSXin Li if file4.FileName != "./folder1/file4.testdata.txt" { 658*ba677afaSXin Li t.Errorf("expected %v, got %v", "./folder1/file4.testdata.txt", file4.FileName) 659*ba677afaSXin Li } 660*ba677afaSXin Li if file4.FileSPDXIdentifier != common.ElementID("File3") { 661*ba677afaSXin Li t.Errorf("expected %v, got %v", "File3", file4.FileSPDXIdentifier) 662*ba677afaSXin Li } 663*ba677afaSXin Li for _, checksum := range file4.Checksums { 664*ba677afaSXin Li switch checksum.Algorithm { 665*ba677afaSXin Li case common.SHA1: 666*ba677afaSXin Li if checksum.Value != "e623d7d7d782a7c8323c4d436acee4afab34320f" { 667*ba677afaSXin Li t.Errorf("expected %v, got %v", "e623d7d7d782a7c8323c4d436acee4afab34320f", checksum.Value) 668*ba677afaSXin Li } 669*ba677afaSXin Li case common.SHA256: 670*ba677afaSXin Li if checksum.Value != "574fa42c5e0806c0f8906a44884166540206f021527729407cd5326838629c59" { 671*ba677afaSXin Li t.Errorf("expected %v, got %v", "574fa42c5e0806c0f8906a44884166540206f021527729407cd5326838629c59", checksum.Value) 672*ba677afaSXin Li } 673*ba677afaSXin Li case common.MD5: 674*ba677afaSXin Li if checksum.Value != "96e6a25d35df5b1c477710ef4d0c7210" { 675*ba677afaSXin Li t.Errorf("expected %v, got %v", "96e6a25d35df5b1c477710ef4d0c7210", checksum.Value) 676*ba677afaSXin Li } 677*ba677afaSXin Li } 678*ba677afaSXin Li } 679*ba677afaSXin Li if file4.LicenseConcluded != "NOASSERTION" { 680*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file4.LicenseConcluded) 681*ba677afaSXin Li } 682*ba677afaSXin Li if len(file4.LicenseInfoInFiles) != 1 { 683*ba677afaSXin Li t.Errorf("expected %v, got %v", 1, len(file4.LicenseInfoInFiles)) 684*ba677afaSXin Li } else { 685*ba677afaSXin Li if file4.LicenseInfoInFiles[0] != "NOASSERTION" { 686*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file4.LicenseInfoInFiles[0]) 687*ba677afaSXin Li } 688*ba677afaSXin Li } 689*ba677afaSXin Li if file4.FileCopyrightText != "NOASSERTION" { 690*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", file4.FileCopyrightText) 691*ba677afaSXin Li } 692*ba677afaSXin Li 693*ba677afaSXin Li // check lastfile.testdata.txt 694*ba677afaSXin Li lastfile := pkg.Files[4] 695*ba677afaSXin Li if lastfile == nil { 696*ba677afaSXin Li t.Fatalf("expected non-nil file, got nil") 697*ba677afaSXin Li } 698*ba677afaSXin Li if lastfile.FileName != "./lastfile.testdata.txt" { 699*ba677afaSXin Li t.Errorf("expected %v, got %v", "/lastfile.testdata.txt", lastfile.FileName) 700*ba677afaSXin Li } 701*ba677afaSXin Li if lastfile.FileSPDXIdentifier != common.ElementID("File4") { 702*ba677afaSXin Li t.Errorf("expected %v, got %v", "File4", lastfile.FileSPDXIdentifier) 703*ba677afaSXin Li } 704*ba677afaSXin Li for _, checksum := range lastfile.Checksums { 705*ba677afaSXin Li switch checksum.Algorithm { 706*ba677afaSXin Li case common.SHA1: 707*ba677afaSXin Li if checksum.Value != "26d6221d682d9ba59116f9753a701f34271c8ce1" { 708*ba677afaSXin Li t.Errorf("expected %v, got %v", "26d6221d682d9ba59116f9753a701f34271c8ce1", checksum.Value) 709*ba677afaSXin Li } 710*ba677afaSXin Li case common.SHA256: 711*ba677afaSXin Li if checksum.Value != "0a4bdaf990e9b330ff72022dd78110ae98b60e08337cf2105b89856373416805" { 712*ba677afaSXin Li t.Errorf("expected %v, got %v", "0a4bdaf990e9b330ff72022dd78110ae98b60e08337cf2105b89856373416805", checksum.Value) 713*ba677afaSXin Li } 714*ba677afaSXin Li case common.MD5: 715*ba677afaSXin Li if checksum.Value != "f60baa793870d9085461ad6bbab50b7f" { 716*ba677afaSXin Li t.Errorf("expected %v, got %v", "f60baa793870d9085461ad6bbab50b7f", checksum.Value) 717*ba677afaSXin Li } 718*ba677afaSXin Li } 719*ba677afaSXin Li } 720*ba677afaSXin Li if lastfile.LicenseConcluded != "NOASSERTION" { 721*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", lastfile.LicenseConcluded) 722*ba677afaSXin Li } 723*ba677afaSXin Li if len(lastfile.LicenseInfoInFiles) != 1 { 724*ba677afaSXin Li t.Errorf("expected %v, got %v", 1, len(lastfile.LicenseInfoInFiles)) 725*ba677afaSXin Li } else { 726*ba677afaSXin Li if lastfile.LicenseInfoInFiles[0] != "NOASSERTION" { 727*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", lastfile.LicenseInfoInFiles[0]) 728*ba677afaSXin Li } 729*ba677afaSXin Li } 730*ba677afaSXin Li if lastfile.FileCopyrightText != "NOASSERTION" { 731*ba677afaSXin Li t.Errorf("expected %v, got %v", "NOASSERTION", lastfile.FileCopyrightText) 732*ba677afaSXin Li } 733*ba677afaSXin Li 734*ba677afaSXin Li // check Relationship section -- should be a relationship for doc DESCRIBES pkg 735*ba677afaSXin Li if doc.Relationships == nil { 736*ba677afaSXin Li t.Fatalf("expected non-nil Relationships section, got nil") 737*ba677afaSXin Li } 738*ba677afaSXin Li if len(doc.Relationships) == 0 { 739*ba677afaSXin Li t.Fatalf("expected %v, got %v", 0, len(doc.Relationships)) 740*ba677afaSXin Li } 741*ba677afaSXin Li rln := doc.Relationships[0] 742*ba677afaSXin Li if rln == nil { 743*ba677afaSXin Li t.Fatalf("expected non-nil Relationship, got nil") 744*ba677afaSXin Li } 745*ba677afaSXin Li if rln.RefA != common.MakeDocElementID("", "DOCUMENT") { 746*ba677afaSXin Li t.Errorf("expected %v, got %v", "DOCUMENT", rln.RefA) 747*ba677afaSXin Li } 748*ba677afaSXin Li if rln.RefB != common.MakeDocElementID("", "Package-project1") { 749*ba677afaSXin Li t.Errorf("expected %v, got %v", "Package-project1", rln.RefB) 750*ba677afaSXin Li } 751*ba677afaSXin Li if rln.Relationship != "DESCRIBES" { 752*ba677afaSXin Li t.Errorf("expected %v, got %v", "DESCRIBES", rln.Relationship) 753*ba677afaSXin Li } 754*ba677afaSXin Li 755*ba677afaSXin Li // and check that other sections are present, but empty 756*ba677afaSXin Li if doc.OtherLicenses != nil { 757*ba677afaSXin Li t.Fatalf("expected nil OtherLicenses section, got non-nil") 758*ba677afaSXin Li } 759*ba677afaSXin Li if doc.Annotations != nil { 760*ba677afaSXin Li t.Fatalf("expected nil Annotations section, got non-nil") 761*ba677afaSXin Li } 762*ba677afaSXin Li if doc.Reviews != nil { 763*ba677afaSXin Li t.Fatalf("expected nil Reviews section, got non-nil") 764*ba677afaSXin Li } 765*ba677afaSXin Li 766*ba677afaSXin Li} 767*ba677afaSXin Li 768*ba677afaSXin Lifunc TestBuild2_2CanIgnoreFiles(t *testing.T) { 769*ba677afaSXin Li dirRoot := "../testdata/project3/" 770*ba677afaSXin Li 771*ba677afaSXin Li config := &Config2_2{ 772*ba677afaSXin Li NamespacePrefix: "https://github.com/swinslow/spdx-docs/spdx-go/testdata-", 773*ba677afaSXin Li CreatorType: "Person", 774*ba677afaSXin Li Creator: "John Doe", 775*ba677afaSXin Li PathsIgnored: []string{ 776*ba677afaSXin Li "**/ignoredir/", 777*ba677afaSXin Li "/excludedir/", 778*ba677afaSXin Li "**/ignorefile.txt", 779*ba677afaSXin Li "/alsoEXCLUDEthis.txt", 780*ba677afaSXin Li }, 781*ba677afaSXin Li TestValues: make(map[string]string), 782*ba677afaSXin Li } 783*ba677afaSXin Li config.TestValues["Created"] = "2018-10-19T04:38:00Z" 784*ba677afaSXin Li 785*ba677afaSXin Li doc, err := Build2_2("project1", dirRoot, config) 786*ba677afaSXin Li if err != nil { 787*ba677afaSXin Li t.Errorf("expected nil error, got %v", err) 788*ba677afaSXin Li } 789*ba677afaSXin Li pkg := doc.Packages[0] 790*ba677afaSXin Li if pkg == nil { 791*ba677afaSXin Li t.Fatalf("expected non-nil pkg, got nil") 792*ba677afaSXin Li } 793*ba677afaSXin Li if len(pkg.Files) != 5 { 794*ba677afaSXin Li t.Fatalf("expected len %d, got %d", 5, len(pkg.Files)) 795*ba677afaSXin Li } 796*ba677afaSXin Li 797*ba677afaSXin Li want := "./dontscan.txt" 798*ba677afaSXin Li got := pkg.Files[0].FileName 799*ba677afaSXin Li if want != got { 800*ba677afaSXin Li t.Errorf("expected %v, got %v", want, got) 801*ba677afaSXin Li } 802*ba677afaSXin Li 803*ba677afaSXin Li want = "./keep/keep.txt" 804*ba677afaSXin Li got = pkg.Files[1].FileName 805*ba677afaSXin Li if want != got { 806*ba677afaSXin Li t.Errorf("expected %v, got %v", want, got) 807*ba677afaSXin Li } 808*ba677afaSXin Li 809*ba677afaSXin Li want = "./keep.txt" 810*ba677afaSXin Li got = pkg.Files[2].FileName 811*ba677afaSXin Li if want != got { 812*ba677afaSXin Li t.Errorf("expected %v, got %v", want, got) 813*ba677afaSXin Li } 814*ba677afaSXin Li 815*ba677afaSXin Li want = "./subdir/keep/dontscan.txt" 816*ba677afaSXin Li got = pkg.Files[3].FileName 817*ba677afaSXin Li if want != got { 818*ba677afaSXin Li t.Errorf("expected %v, got %v", want, got) 819*ba677afaSXin Li } 820*ba677afaSXin Li 821*ba677afaSXin Li want = "./subdir/keep/keep.txt" 822*ba677afaSXin Li got = pkg.Files[4].FileName 823*ba677afaSXin Li if want != got { 824*ba677afaSXin Li t.Errorf("expected %v, got %v", want, got) 825*ba677afaSXin Li } 826*ba677afaSXin Li} 827