1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Lipackage parser2v3 4*ba677afaSXin Li 5*ba677afaSXin Liimport ( 6*ba677afaSXin Li "reflect" 7*ba677afaSXin Li "testing" 8*ba677afaSXin Li 9*ba677afaSXin Li gordfParser "github.com/spdx/gordf/rdfloader/parser" 10*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/common" 11*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/v2_3" 12*ba677afaSXin Li) 13*ba677afaSXin Li 14*ba677afaSXin Lifunc Test_setPackageSupplier(t *testing.T) { 15*ba677afaSXin Li var err error 16*ba677afaSXin Li 17*ba677afaSXin Li // TestCase 1: no assertion must set PackageSupplierNOASSERTION field to true 18*ba677afaSXin Li pkg := &v2_3.Package{} 19*ba677afaSXin Li err = setPackageSupplier(pkg, "NOASSERTION") 20*ba677afaSXin Li if err != nil { 21*ba677afaSXin Li t.Fatalf("unexpected error: %v", err) 22*ba677afaSXin Li } 23*ba677afaSXin Li if pkg.PackageSupplier.Supplier != "NOASSERTION" { 24*ba677afaSXin Li t.Errorf("PackageSupplier must've been set to NOASSERTION") 25*ba677afaSXin Li } 26*ba677afaSXin Li 27*ba677afaSXin Li // TestCase 2: lower-case noassertion must also set the 28*ba677afaSXin Li // PackageSupplierNOASSERTION to true. 29*ba677afaSXin Li pkg = &v2_3.Package{} 30*ba677afaSXin Li err = setPackageSupplier(pkg, "noassertion") 31*ba677afaSXin Li if err != nil { 32*ba677afaSXin Li t.Fatalf("unexpected error: %v", err) 33*ba677afaSXin Li } 34*ba677afaSXin Li if pkg.PackageSupplier.Supplier != "NOASSERTION" { 35*ba677afaSXin Li t.Errorf("PackageSupplier must've been set to NOASSERTION") 36*ba677afaSXin Li } 37*ba677afaSXin Li 38*ba677afaSXin Li // TestCase 3: invalid input without colon separator. must raise an error 39*ba677afaSXin Li pkg = &v2_3.Package{} 40*ba677afaSXin Li input := "string without colon separator" 41*ba677afaSXin Li err = setPackageSupplier(pkg, input) 42*ba677afaSXin Li if err == nil { 43*ba677afaSXin Li t.Errorf("invalid input \"%s\" didn't raise an error", input) 44*ba677afaSXin Li } 45*ba677afaSXin Li 46*ba677afaSXin Li // TestCase 4: Valid Person 47*ba677afaSXin Li pkg = &v2_3.Package{} 48*ba677afaSXin Li personName := "Rishabh Bhatnagar" 49*ba677afaSXin Li input = "Person: " + personName 50*ba677afaSXin Li err = setPackageSupplier(pkg, input) 51*ba677afaSXin Li if err != nil { 52*ba677afaSXin Li t.Errorf("unexpected error: %v", err) 53*ba677afaSXin Li } 54*ba677afaSXin Li if pkg.PackageSupplier.Supplier != personName { 55*ba677afaSXin Li t.Errorf("PackageSupplierPerson should be %s. found %s", personName, pkg.PackageSupplier.Supplier) 56*ba677afaSXin Li } 57*ba677afaSXin Li 58*ba677afaSXin Li // TestCase 5: Valid Organization 59*ba677afaSXin Li pkg = &v2_3.Package{} 60*ba677afaSXin Li orgName := "SPDX" 61*ba677afaSXin Li input = "Organization: " + orgName 62*ba677afaSXin Li err = setPackageSupplier(pkg, input) 63*ba677afaSXin Li if err != nil { 64*ba677afaSXin Li t.Errorf("unexpected error: %v", err) 65*ba677afaSXin Li } 66*ba677afaSXin Li if pkg.PackageSupplier.Supplier != orgName { 67*ba677afaSXin Li t.Errorf("PackageSupplierPerson should be %s. found %s", orgName, pkg.PackageSupplier.Supplier) 68*ba677afaSXin Li } 69*ba677afaSXin Li 70*ba677afaSXin Li // TestCase 6: Invalid EntityType 71*ba677afaSXin Li pkg = &v2_3.Package{} 72*ba677afaSXin Li input = "InvalidEntity: entity" 73*ba677afaSXin Li err = setPackageSupplier(pkg, input) 74*ba677afaSXin Li if err == nil { 75*ba677afaSXin Li t.Errorf("invalid entity should've raised an error") 76*ba677afaSXin Li } 77*ba677afaSXin Li} 78*ba677afaSXin Li 79*ba677afaSXin Lifunc Test_setPackageOriginator(t *testing.T) { 80*ba677afaSXin Li var err error 81*ba677afaSXin Li 82*ba677afaSXin Li // TestCase 1: no assertion must set PackageSupplierNOASSERTION field to true 83*ba677afaSXin Li pkg := &v2_3.Package{} 84*ba677afaSXin Li err = setPackageOriginator(pkg, "NOASSERTION") 85*ba677afaSXin Li if err != nil { 86*ba677afaSXin Li t.Fatalf("unexpected error: %v", err) 87*ba677afaSXin Li } 88*ba677afaSXin Li if pkg.PackageOriginator.Originator != "NOASSERTION" { 89*ba677afaSXin Li t.Errorf("PackageOriginator must've been set to NOASSERTION") 90*ba677afaSXin Li } 91*ba677afaSXin Li 92*ba677afaSXin Li // TestCase 2: lower-case noassertion must also set the 93*ba677afaSXin Li // PackageOriginatorNOASSERTION to true. 94*ba677afaSXin Li pkg = &v2_3.Package{} 95*ba677afaSXin Li err = setPackageOriginator(pkg, "noassertion") 96*ba677afaSXin Li if err != nil { 97*ba677afaSXin Li t.Fatalf("unexpected error: %v", err) 98*ba677afaSXin Li } 99*ba677afaSXin Li if pkg.PackageOriginator.Originator != "NOASSERTION" { 100*ba677afaSXin Li t.Errorf("PackageOriginator must've been set to NOASSERTION") 101*ba677afaSXin Li } 102*ba677afaSXin Li 103*ba677afaSXin Li // TestCase 3: invalid input without colon separator. must raise an error 104*ba677afaSXin Li pkg = &v2_3.Package{} 105*ba677afaSXin Li input := "string without colon separator" 106*ba677afaSXin Li err = setPackageOriginator(pkg, input) 107*ba677afaSXin Li if err == nil { 108*ba677afaSXin Li t.Errorf("invalid input \"%s\" didn't raise an error", input) 109*ba677afaSXin Li } 110*ba677afaSXin Li 111*ba677afaSXin Li // TestCase 4: Valid Person 112*ba677afaSXin Li pkg = &v2_3.Package{} 113*ba677afaSXin Li personName := "Rishabh Bhatnagar" 114*ba677afaSXin Li input = "Person: " + personName 115*ba677afaSXin Li err = setPackageOriginator(pkg, input) 116*ba677afaSXin Li if err != nil { 117*ba677afaSXin Li t.Errorf("unexpected error: %v", err) 118*ba677afaSXin Li } 119*ba677afaSXin Li if pkg.PackageOriginator.Originator != personName { 120*ba677afaSXin Li t.Errorf("PackageOriginatorPerson should be %s. found %s", personName, pkg.PackageOriginator.Originator) 121*ba677afaSXin Li } 122*ba677afaSXin Li 123*ba677afaSXin Li // TestCase 5: Valid Organization 124*ba677afaSXin Li pkg = &v2_3.Package{} 125*ba677afaSXin Li orgName := "SPDX" 126*ba677afaSXin Li input = "Organization: " + orgName 127*ba677afaSXin Li err = setPackageOriginator(pkg, input) 128*ba677afaSXin Li if err != nil { 129*ba677afaSXin Li t.Errorf("unexpected error: %v", err) 130*ba677afaSXin Li } 131*ba677afaSXin Li if pkg.PackageOriginator.Originator != orgName { 132*ba677afaSXin Li t.Errorf("PackageOriginatorOrganization should be %s. found %s", orgName, pkg.PackageOriginator.Originator) 133*ba677afaSXin Li } 134*ba677afaSXin Li 135*ba677afaSXin Li // TestCase 6: Invalid EntityType 136*ba677afaSXin Li pkg = &v2_3.Package{} 137*ba677afaSXin Li input = "InvalidEntity: entity" 138*ba677afaSXin Li err = setPackageOriginator(pkg, input) 139*ba677afaSXin Li if err == nil { 140*ba677afaSXin Li t.Errorf("invalid entity should've raised an error") 141*ba677afaSXin Li } 142*ba677afaSXin Li} 143*ba677afaSXin Li 144*ba677afaSXin Lifunc Test_rdfParser2_3_setPackageVerificationCode(t *testing.T) { 145*ba677afaSXin Li var parser *rdfParser2_3 146*ba677afaSXin Li var node *gordfParser.Node 147*ba677afaSXin Li var pkg *v2_3.Package 148*ba677afaSXin Li var err error 149*ba677afaSXin Li 150*ba677afaSXin Li // TestCase 1: invalid predicate must raise an error 151*ba677afaSXin Li parser, _ = parserFromBodyContent(` 152*ba677afaSXin Li <spdx.PackageVerificationCode> 153*ba677afaSXin Li <spdx:invalidPredicate /> 154*ba677afaSXin Li <spdx:packageVerificationCodeValue>cbceb8b5689b75a584efe35587b5d41bd48820ce</spdx:packageVerificationCodeValue> 155*ba677afaSXin Li <spdx:packageVerificationCodeExcludedFile>./package.spdx</spdx:packageVerificationCodeExcludedFile> 156*ba677afaSXin Li </spdx.PackageVerificationCode> 157*ba677afaSXin Li `) 158*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 159*ba677afaSXin Li pkg = &v2_3.Package{} 160*ba677afaSXin Li err = parser.setPackageVerificationCode(pkg, node) 161*ba677afaSXin Li if err == nil { 162*ba677afaSXin Li t.Errorf("expected an error due to invalid predicate, got <nil>") 163*ba677afaSXin Li } 164*ba677afaSXin Li 165*ba677afaSXin Li // TestCase 2: valid input 166*ba677afaSXin Li parser, _ = parserFromBodyContent(` 167*ba677afaSXin Li <spdx.PackageVerificationCode> 168*ba677afaSXin Li <spdx:packageVerificationCodeValue>cbceb8b5689b75a584efe35587b5d41bd48820ce</spdx:packageVerificationCodeValue> 169*ba677afaSXin Li <spdx:packageVerificationCodeExcludedFile>./package.spdx</spdx:packageVerificationCodeExcludedFile> 170*ba677afaSXin Li </spdx.PackageVerificationCode> 171*ba677afaSXin Li `) 172*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 173*ba677afaSXin Li pkg = &v2_3.Package{} 174*ba677afaSXin Li err = parser.setPackageVerificationCode(pkg, node) 175*ba677afaSXin Li if err != nil { 176*ba677afaSXin Li t.Errorf("unexpected error: %v", err) 177*ba677afaSXin Li } 178*ba677afaSXin Li expectedValue := "cbceb8b5689b75a584efe35587b5d41bd48820ce" 179*ba677afaSXin Li if pkg.PackageVerificationCode.Value != expectedValue { 180*ba677afaSXin Li t.Errorf("expected %v, got %v", expectedValue, pkg.PackageVerificationCode) 181*ba677afaSXin Li } 182*ba677afaSXin Li expectedExcludedFile := "./package.spdx" 183*ba677afaSXin Li if pkg.PackageVerificationCode.ExcludedFiles[0] != expectedExcludedFile { 184*ba677afaSXin Li t.Errorf("expected %v, got %v", expectedExcludedFile, pkg.PackageVerificationCode.ExcludedFiles) 185*ba677afaSXin Li } 186*ba677afaSXin Li} 187*ba677afaSXin Li 188*ba677afaSXin Lifunc Test_rdfParser2_3_getPackageExternalRef(t *testing.T) { 189*ba677afaSXin Li var extRef *v2_3.PackageExternalReference 190*ba677afaSXin Li var err error 191*ba677afaSXin Li var parser *rdfParser2_3 192*ba677afaSXin Li var node *gordfParser.Node 193*ba677afaSXin Li 194*ba677afaSXin Li // TestCase 1: invalid reference category 195*ba677afaSXin Li parser, _ = parserFromBodyContent(` 196*ba677afaSXin Li <spdx:ExternalRef> 197*ba677afaSXin Li <spdx:referenceLocator>cpe:2.3:a:pivotal_software:spring_framework:4.1.0:*:*:*:*:*:*:*</spdx:referenceLocator> 198*ba677afaSXin Li <spdx:referenceType> 199*ba677afaSXin Li <spdx:ReferenceType rdf:about="http://spdx.org/rdf/references/cpe23Type"/> 200*ba677afaSXin Li </spdx:referenceType> 201*ba677afaSXin Li <spdx:referenceCategory rdf:resource="http://spdx.org/rdf/terms#referenceCategory_invalid"/> 202*ba677afaSXin Li </spdx:ExternalRef> 203*ba677afaSXin Li `) 204*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 205*ba677afaSXin Li extRef, err = parser.getPackageExternalRef(node) 206*ba677afaSXin Li if err == nil { 207*ba677afaSXin Li t.Errorf("expected an error due to invalid referenceCategory, got <nil>") 208*ba677afaSXin Li } 209*ba677afaSXin Li 210*ba677afaSXin Li // TestCase 2: invalid predicate 211*ba677afaSXin Li parser, _ = parserFromBodyContent(` 212*ba677afaSXin Li <spdx:ExternalRef> 213*ba677afaSXin Li <spdx:unknownPredicate /> 214*ba677afaSXin Li <spdx:referenceLocator>cpe:2.3:a:pivotal_software:spring_framework:4.1.0:*:*:*:*:*:*:*</spdx:referenceLocator> 215*ba677afaSXin Li <spdx:referenceType> 216*ba677afaSXin Li <spdx:ReferenceType rdf:about="http://spdx.org/rdf/references/cpe23Type"/> 217*ba677afaSXin Li </spdx:referenceType> 218*ba677afaSXin Li <spdx:referenceCategory rdf:resource="http://spdx.org/rdf/terms#referenceCategory_security"/> 219*ba677afaSXin Li </spdx:ExternalRef> 220*ba677afaSXin Li `) 221*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 222*ba677afaSXin Li extRef, err = parser.getPackageExternalRef(node) 223*ba677afaSXin Li if err == nil { 224*ba677afaSXin Li t.Errorf("expected an error due to invalid referenceCategory, got <nil>") 225*ba677afaSXin Li } 226*ba677afaSXin Li 227*ba677afaSXin Li // TestCase 3: valid example (referenceCategory_security) 228*ba677afaSXin Li parser, _ = parserFromBodyContent(` 229*ba677afaSXin Li <spdx:ExternalRef> 230*ba677afaSXin Li <spdx:referenceLocator>cpe:2.3:a:pivotal_software:spring_framework:4.1.0:*:*:*:*:*:*:*</spdx:referenceLocator> 231*ba677afaSXin Li <spdx:referenceType> 232*ba677afaSXin Li <spdx:ReferenceType rdf:about="http://spdx.org/rdf/references/cpe23Type"/> 233*ba677afaSXin Li </spdx:referenceType> 234*ba677afaSXin Li <spdx:referenceCategory rdf:resource="http://spdx.org/rdf/terms#referenceCategory_security"/> 235*ba677afaSXin Li <rdfs:comment>comment</rdfs:comment> 236*ba677afaSXin Li </spdx:ExternalRef> 237*ba677afaSXin Li `) 238*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 239*ba677afaSXin Li extRef, err = parser.getPackageExternalRef(node) 240*ba677afaSXin Li if err != nil { 241*ba677afaSXin Li t.Fatalf("unexpected error parsing a valid example: %v", err) 242*ba677afaSXin Li } 243*ba677afaSXin Li expectedExtRef := &v2_3.PackageExternalReference{ 244*ba677afaSXin Li Locator: "cpe:2.3:a:pivotal_software:spring_framework:4.1.0:*:*:*:*:*:*:*", 245*ba677afaSXin Li RefType: "http://spdx.org/rdf/references/cpe23Type", 246*ba677afaSXin Li Category: "SECURITY", 247*ba677afaSXin Li ExternalRefComment: "comment", 248*ba677afaSXin Li } 249*ba677afaSXin Li if !reflect.DeepEqual(extRef, expectedExtRef) { 250*ba677afaSXin Li t.Errorf("expected: \n%+v\ngot: \n%+v", expectedExtRef, extRef) 251*ba677afaSXin Li } 252*ba677afaSXin Li 253*ba677afaSXin Li // TestCase 4: valid example (referenceCategory_packageManager) 254*ba677afaSXin Li parser, _ = parserFromBodyContent(` 255*ba677afaSXin Li <spdx:ExternalRef> 256*ba677afaSXin Li <spdx:referenceLocator>cpe:2.3:a:pivotal_software:spring_framework:4.1.0:*:*:*:*:*:*:*</spdx:referenceLocator> 257*ba677afaSXin Li <spdx:referenceType> 258*ba677afaSXin Li <spdx:ReferenceType rdf:about="http://spdx.org/rdf/references/cpe23Type"/> 259*ba677afaSXin Li </spdx:referenceType> 260*ba677afaSXin Li <spdx:referenceCategory rdf:resource="http://spdx.org/rdf/terms#referenceCategory_packageManager"/> 261*ba677afaSXin Li <rdfs:comment>comment</rdfs:comment> 262*ba677afaSXin Li </spdx:ExternalRef> 263*ba677afaSXin Li `) 264*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 265*ba677afaSXin Li extRef, err = parser.getPackageExternalRef(node) 266*ba677afaSXin Li if err != nil { 267*ba677afaSXin Li t.Fatalf("unexpected error parsing a valid example: %v", err) 268*ba677afaSXin Li } 269*ba677afaSXin Li expectedExtRef = &v2_3.PackageExternalReference{ 270*ba677afaSXin Li Locator: "cpe:2.3:a:pivotal_software:spring_framework:4.1.0:*:*:*:*:*:*:*", 271*ba677afaSXin Li RefType: "http://spdx.org/rdf/references/cpe23Type", 272*ba677afaSXin Li Category: "PACKAGE-MANAGER", 273*ba677afaSXin Li ExternalRefComment: "comment", 274*ba677afaSXin Li } 275*ba677afaSXin Li if !reflect.DeepEqual(extRef, expectedExtRef) { 276*ba677afaSXin Li t.Errorf("expected: \n%+v\ngot: \n%+v", expectedExtRef, extRef) 277*ba677afaSXin Li } 278*ba677afaSXin Li 279*ba677afaSXin Li // TestCase 5: valid example (referenceCategory_other) 280*ba677afaSXin Li parser, _ = parserFromBodyContent(` 281*ba677afaSXin Li <spdx:ExternalRef> 282*ba677afaSXin Li <spdx:referenceLocator>cpe:2.3:a:pivotal_software:spring_framework:4.1.0:*:*:*:*:*:*:*</spdx:referenceLocator> 283*ba677afaSXin Li <spdx:referenceType> 284*ba677afaSXin Li <spdx:ReferenceType rdf:about="http://spdx.org/rdf/references/cpe23Type"/> 285*ba677afaSXin Li </spdx:referenceType> 286*ba677afaSXin Li <spdx:referenceCategory rdf:resource="http://spdx.org/rdf/terms#referenceCategory_other"/> 287*ba677afaSXin Li <rdfs:comment>comment</rdfs:comment> 288*ba677afaSXin Li </spdx:ExternalRef> 289*ba677afaSXin Li `) 290*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 291*ba677afaSXin Li extRef, err = parser.getPackageExternalRef(node) 292*ba677afaSXin Li if err != nil { 293*ba677afaSXin Li t.Fatalf("unexpected error parsing a valid example: %v", err) 294*ba677afaSXin Li } 295*ba677afaSXin Li expectedExtRef = &v2_3.PackageExternalReference{ 296*ba677afaSXin Li Locator: "cpe:2.3:a:pivotal_software:spring_framework:4.1.0:*:*:*:*:*:*:*", 297*ba677afaSXin Li RefType: "http://spdx.org/rdf/references/cpe23Type", 298*ba677afaSXin Li Category: "OTHER", 299*ba677afaSXin Li ExternalRefComment: "comment", 300*ba677afaSXin Li } 301*ba677afaSXin Li if !reflect.DeepEqual(extRef, expectedExtRef) { 302*ba677afaSXin Li t.Errorf("expected: \n%+v\ngot: \n%+v", expectedExtRef, extRef) 303*ba677afaSXin Li } 304*ba677afaSXin Li} 305*ba677afaSXin Li 306*ba677afaSXin Lifunc Test_rdfParser2_3_getPrimaryPackagePurpose(t *testing.T) { 307*ba677afaSXin Li // TestCase 1: basic purpose 308*ba677afaSXin Li value := getPrimaryPackagePurpose("packagePurpose_container") 309*ba677afaSXin Li if value != "CONTAINER" { 310*ba677afaSXin Li t.Errorf("expected primary package purpose to be CONTAINER. got: '%s'", value) 311*ba677afaSXin Li } 312*ba677afaSXin Li 313*ba677afaSXin Li // TestCase 2: purpose with underscore-to-dash 314*ba677afaSXin Li value = getPrimaryPackagePurpose("packagePurpose_operating_system") 315*ba677afaSXin Li if value != "OPERATING-SYSTEM" { 316*ba677afaSXin Li t.Errorf("expected primary package purpose to be OPERATING-SYSTEM. got: '%s'", value) 317*ba677afaSXin Li } 318*ba677afaSXin Li 319*ba677afaSXin Li // TestCase 3: invalid purpose 320*ba677afaSXin Li value = getPrimaryPackagePurpose("packagePurpose_invalid") 321*ba677afaSXin Li if value != "" { 322*ba677afaSXin Li t.Errorf("expected invalid primary package purpose to be empty. got: '%s'", value) 323*ba677afaSXin Li } 324*ba677afaSXin Li} 325*ba677afaSXin Li 326*ba677afaSXin Lifunc Test_rdfParser2_3_getPackageFromNode(t *testing.T) { 327*ba677afaSXin Li var parser *rdfParser2_3 328*ba677afaSXin Li var node *gordfParser.Node 329*ba677afaSXin Li var err error 330*ba677afaSXin Li 331*ba677afaSXin Li // TestCase 1: invalid elementId 332*ba677afaSXin Li parser, _ = parserFromBodyContent(` 333*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#upload2"> 334*ba677afaSXin Li <spdx:name>time-1.9.tar.gz</spdx:name> 335*ba677afaSXin Li </spdx:Package> 336*ba677afaSXin Li `) 337*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 338*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 339*ba677afaSXin Li if err == nil { 340*ba677afaSXin Li t.Errorf("expected an error(missing SPDXRef- prefix), found %v", err) 341*ba677afaSXin Li } 342*ba677afaSXin Li 343*ba677afaSXin Li // TestCase 2: Invalid License Concluded must raise an error: 344*ba677afaSXin Li parser, _ = parserFromBodyContent(` 345*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 346*ba677afaSXin Li <spdx:licenseConcluded rdf:resource="http://spdx.org/licenses/IPL-3.0"/> 347*ba677afaSXin Li </spdx:Package> 348*ba677afaSXin Li `) 349*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 350*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 351*ba677afaSXin Li if err == nil { 352*ba677afaSXin Li t.Errorf("expected an error(invalid license), found %v", err) 353*ba677afaSXin Li } 354*ba677afaSXin Li 355*ba677afaSXin Li // TestCase 2: Invalid License Declared must raise an error: 356*ba677afaSXin Li parser, _ = parserFromBodyContent(` 357*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 358*ba677afaSXin Li <spdx:licenseDeclared rdf:resource="http://spdx.org/licenses/IPL-3.0"/> 359*ba677afaSXin Li </spdx:Package> 360*ba677afaSXin Li `) 361*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 362*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 363*ba677afaSXin Li if err == nil { 364*ba677afaSXin Li t.Errorf("expected an error(invalid license), found %v", err) 365*ba677afaSXin Li } 366*ba677afaSXin Li 367*ba677afaSXin Li // TestCase 3: Invalid ExternalRef 368*ba677afaSXin Li parser, _ = parserFromBodyContent(` 369*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 370*ba677afaSXin Li <spdx:externalRef> 371*ba677afaSXin Li <spdx:ExternalRef> 372*ba677afaSXin Li <spdx:referenceLocator>cpe:2.3:a:pivotal_software:spring_framework:4.1.0:*:*:*:*:*:*:*</spdx:referenceLocator> 373*ba677afaSXin Li <spdx:referenceType> 374*ba677afaSXin Li <spdx:ReferenceType rdf:about="http://spdx.org/rdf/references/cpe23Type"/> 375*ba677afaSXin Li </spdx:referenceType> 376*ba677afaSXin Li <spdx:referenceCategory rdf:resource="http://spdx.org/rdf/terms#referenceCategory_invalid"/> 377*ba677afaSXin Li </spdx:ExternalRef> 378*ba677afaSXin Li </spdx:externalRef> 379*ba677afaSXin Li </spdx:Package> 380*ba677afaSXin Li `) 381*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 382*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 383*ba677afaSXin Li if err == nil { 384*ba677afaSXin Li t.Errorf("expected an error(invalid externalRef), found %v", err) 385*ba677afaSXin Li } 386*ba677afaSXin Li 387*ba677afaSXin Li // TestCase 4: invalid file must raise an error 388*ba677afaSXin Li parser, _ = parserFromBodyContent(` 389*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 390*ba677afaSXin Li <spdx:hasFile> 391*ba677afaSXin Li <spdx:File rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9.tar.gz_1535120734-spdx.rdf#item8"/> 392*ba677afaSXin Li </spdx:hasFile> 393*ba677afaSXin Li </spdx:Package> 394*ba677afaSXin Li `) 395*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 396*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 397*ba677afaSXin Li if err == nil { 398*ba677afaSXin Li t.Errorf("expected an error(invalid file), found %v", err) 399*ba677afaSXin Li } 400*ba677afaSXin Li 401*ba677afaSXin Li // TestCase 5: invalid predicate must raise an error 402*ba677afaSXin Li parser, _ = parserFromBodyContent(` 403*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 404*ba677afaSXin Li <spdx:hasFiles> 405*ba677afaSXin Li <spdx:File rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9.tar.gz_1535120734-spdx.rdf#item8"/> 406*ba677afaSXin Li </spdx:hasFiles> 407*ba677afaSXin Li </spdx:Package> 408*ba677afaSXin Li `) 409*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 410*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 411*ba677afaSXin Li if err == nil { 412*ba677afaSXin Li t.Errorf("expected an error(invalid predicate), found %v", err) 413*ba677afaSXin Li } 414*ba677afaSXin Li 415*ba677afaSXin Li // TestCase 6: invalid annotation must raise an error 416*ba677afaSXin Li parser, _ = parserFromBodyContent(` 417*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 418*ba677afaSXin Li <spdx:annotation> 419*ba677afaSXin Li <spdx:Annotation> 420*ba677afaSXin Li <spdx:unknownAttribute /> 421*ba677afaSXin Li </spdx:Annotation> 422*ba677afaSXin Li </spdx:annotation> 423*ba677afaSXin Li </spdx:Package> 424*ba677afaSXin Li `) 425*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 426*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 427*ba677afaSXin Li if err == nil { 428*ba677afaSXin Li t.Errorf("expected an error(invalid annotation), found %v", err) 429*ba677afaSXin Li } 430*ba677afaSXin Li 431*ba677afaSXin Li // TestCase 6: invalid homepage must raise an error 432*ba677afaSXin Li parser, _ = parserFromBodyContent(` 433*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 434*ba677afaSXin Li <doap:homepage>u r i</doap:homepage> 435*ba677afaSXin Li </spdx:Package> 436*ba677afaSXin Li `) 437*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 438*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 439*ba677afaSXin Li if err == nil { 440*ba677afaSXin Li t.Errorf("expected an error(invalid homepage uri), found %v", err) 441*ba677afaSXin Li } 442*ba677afaSXin Li 443*ba677afaSXin Li // TestCase 7: Package tag declared more than once should be parsed into a single object's definition 444*ba677afaSXin Li parser, _ = parserFromBodyContent(` 445*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 446*ba677afaSXin Li <spdx:name>Test Package</spdx:name> 447*ba677afaSXin Li </spdx:Package> 448*ba677afaSXin Li `) 449*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 450*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 451*ba677afaSXin Li if err != nil { 452*ba677afaSXin Li t.Errorf("error parsing a valid package: %v", err) 453*ba677afaSXin Li } 454*ba677afaSXin Li yetAnotherPkgTriple := gordfParser.Triple{ 455*ba677afaSXin Li Subject: node, 456*ba677afaSXin Li Predicate: &gordfParser.Node{ 457*ba677afaSXin Li NodeType: gordfParser.IRI, 458*ba677afaSXin Li ID: SPDX_PACKAGE_FILE_NAME, 459*ba677afaSXin Li }, 460*ba677afaSXin Li Object: &gordfParser.Node{ 461*ba677afaSXin Li NodeType: gordfParser.LITERAL, 462*ba677afaSXin Li ID: "packageFileName", 463*ba677afaSXin Li }, 464*ba677afaSXin Li } 465*ba677afaSXin Li parser.nodeStringToTriples[node.String()] = append(parser.nodeStringToTriples[node.String()], &yetAnotherPkgTriple) 466*ba677afaSXin Li pkg, err := parser.getPackageFromNode(node) 467*ba677afaSXin Li if err != nil { 468*ba677afaSXin Li t.Errorf("error parsing a valid package: %v", err) 469*ba677afaSXin Li } 470*ba677afaSXin Li // validating if all the attributes that spanned over two tags are included in the parsed package. 471*ba677afaSXin Li expectedID := "upload2" 472*ba677afaSXin Li if string(pkg.PackageSPDXIdentifier) != expectedID { 473*ba677afaSXin Li t.Errorf("expected package id: %s, got %s", expectedID, pkg.PackageSPDXIdentifier) 474*ba677afaSXin Li } 475*ba677afaSXin Li expectedPkgFileName := "packageFileName" 476*ba677afaSXin Li if expectedPkgFileName != pkg.PackageFileName { 477*ba677afaSXin Li t.Errorf("expected package file name: %s, got %s", expectedPkgFileName, pkg.PackageFileName) 478*ba677afaSXin Li } 479*ba677afaSXin Li expectedName := "Test Package" 480*ba677afaSXin Li if pkg.PackageName != expectedName { 481*ba677afaSXin Li t.Errorf("expected package name: %s, got %s", expectedPkgFileName, pkg.PackageName) 482*ba677afaSXin Li } 483*ba677afaSXin Li 484*ba677afaSXin Li // TestCase 8: Checking if packages can handle cyclic dependencies: 485*ba677afaSXin Li // Simulating a smallest possible cycle: package related to itself. 486*ba677afaSXin Li parser, _ = parserFromBodyContent(` 487*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 488*ba677afaSXin Li <spdx:name>Test Package</spdx:name> 489*ba677afaSXin Li <spdx:relationship> 490*ba677afaSXin Li <spdx:Relationship> 491*ba677afaSXin Li <spdx:relationshipType rdf:resource="http://spdx.org/rdf/terms#relationshipType_describes" /> 492*ba677afaSXin Li <spdx:relatedSpdxElement> 493*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 494*ba677afaSXin Li <spdx:versionInfo>1.1.1</spdx:versionInfo> 495*ba677afaSXin Li </spdx:Package> 496*ba677afaSXin Li </spdx:relatedSpdxElement> 497*ba677afaSXin Li </spdx:Relationship> 498*ba677afaSXin Li </spdx:relationship> 499*ba677afaSXin Li </spdx:Package> 500*ba677afaSXin Li `) 501*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 502*ba677afaSXin Li pkg, err = parser.getPackageFromNode(node) 503*ba677afaSXin Li if err != nil { 504*ba677afaSXin Li t.Errorf("error parsing a valid package: %v", err) 505*ba677afaSXin Li } 506*ba677afaSXin Li // checking if both the attributes of the packages are set. 507*ba677afaSXin Li expectedVersionInfo := "1.1.1" 508*ba677afaSXin Li expectedPackageName := "Test Package" 509*ba677afaSXin Li if pkg.PackageVersion != expectedVersionInfo { 510*ba677afaSXin Li t.Errorf("Expected %s, found %s", expectedVersionInfo, pkg.PackageVersion) 511*ba677afaSXin Li } 512*ba677afaSXin Li if pkg.PackageName != expectedPackageName { 513*ba677afaSXin Li t.Errorf("Expected %s, found %s", expectedPackageName, pkg.PackageName) 514*ba677afaSXin Li } 515*ba677afaSXin Li 516*ba677afaSXin Li // TestCase 9: everything valid 517*ba677afaSXin Li parser, _ = parserFromBodyContent(` 518*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 519*ba677afaSXin Li <spdx:name>Test Package</spdx:name> 520*ba677afaSXin Li <spdx:versionInfo>1.1.1</spdx:versionInfo> 521*ba677afaSXin Li <spdx:packageFileName>time-1.9.tar.gz</spdx:packageFileName> 522*ba677afaSXin Li <spdx:supplier>Person: Jane Doe (jane.doe@example.com)</spdx:supplier> 523*ba677afaSXin Li <spdx:originator>Organization: SPDX</spdx:originator> 524*ba677afaSXin Li <spdx:downloadLocation rdf:resource="http://spdx.org/rdf/terms#noassertion" /> 525*ba677afaSXin Li <spdx:filesAnalyzed>true</spdx:filesAnalyzed> 526*ba677afaSXin Li <spdx:packageVerificationCode> 527*ba677afaSXin Li <spdx.PackageVerificationCode> 528*ba677afaSXin Li <spdx:packageVerificationCodeValue>cbceb8b5689b75a584efe35587b5d41bd48820ce</spdx:packageVerificationCodeValue> 529*ba677afaSXin Li <spdx:packageVerificationCodeExcludedFile>./package.spdx</spdx:packageVerificationCodeExcludedFile> 530*ba677afaSXin Li </spdx.PackageVerificationCode> 531*ba677afaSXin Li </spdx:packageVerificationCode> 532*ba677afaSXin Li <spdx:checksum> 533*ba677afaSXin Li <spdx:Checksum> 534*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha1" /> 535*ba677afaSXin Li <spdx:checksumValue>75068c26abbed3ad3980685bae21d7202d288317</spdx:checksumValue> 536*ba677afaSXin Li </spdx:Checksum> 537*ba677afaSXin Li </spdx:checksum> 538*ba677afaSXin Li <doap:homepage>http://www.openjena.org/</doap:homepage> 539*ba677afaSXin Li <spdx:sourceInfo>uses glibc-2_11-branch from git://sourceware.org/git/glibc.git.</spdx:sourceInfo> 540*ba677afaSXin Li <spdx:licenseConcluded> 541*ba677afaSXin Li <spdx:DisjunctiveLicenseSet> 542*ba677afaSXin Li <spdx:member rdf:resource="http://spdx.org/licenses/Nokia"/> 543*ba677afaSXin Li <spdx:member rdf:resource="http://spdx.org/licenses/LGPL-2.0"/> 544*ba677afaSXin Li </spdx:DisjunctiveLicenseSet> 545*ba677afaSXin Li </spdx:licenseConcluded> 546*ba677afaSXin Li <spdx:licenseInfoFromFiles rdf:resource="http://spdx.org/rdf/terms#noassertion" /> 547*ba677afaSXin Li <spdx:licenseDeclared rdf:resource="http://spdx.org/rdf/terms#noassertion" /> 548*ba677afaSXin Li <spdx:licenseComments>Other versions available for a commercial license</spdx:licenseComments> 549*ba677afaSXin Li <spdx:copyrightText rdf:resource="http://spdx.org/rdf/terms#noassertion" /> 550*ba677afaSXin Li <spdx:summary> Package for Testing </spdx:summary> 551*ba677afaSXin Li <spdx:description> Some tags are taken from other spdx autogenerated files </spdx:description> 552*ba677afaSXin Li <rdfs:comment>no comments</rdfs:comment> 553*ba677afaSXin Li <spdx:externalRef> 554*ba677afaSXin Li <spdx:ExternalRef> 555*ba677afaSXin Li <spdx:referenceLocator>cpe:2.3:a:pivotal_software:spring_framework:4.1.0:*:*:*:*:*:*:*</spdx:referenceLocator> 556*ba677afaSXin Li <spdx:referenceType> 557*ba677afaSXin Li <spdx:ReferenceType rdf:about="http://spdx.org/rdf/references/cpe23Type"/> 558*ba677afaSXin Li </spdx:referenceType> 559*ba677afaSXin Li <spdx:referenceCategory rdf:resource="http://spdx.org/rdf/terms#referenceCategory_security"/> 560*ba677afaSXin Li </spdx:ExternalRef> 561*ba677afaSXin Li </spdx:externalRef> 562*ba677afaSXin Li <spdx:hasFile rdf:resource="http://spdx.org/documents/spdx-toolsv2.1.7-SNAPSHOT#SPDXRef-129" /> 563*ba677afaSXin Li <spdx:relationship> 564*ba677afaSXin Li <spdx:Relationship> 565*ba677afaSXin Li <spdx:relationshipType rdf:resource="http://spdx.org/rdf/terms#relationshipType_describes" /> 566*ba677afaSXin Li <spdx:relatedSpdxElement rdf:resource="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2" /> 567*ba677afaSXin Li </spdx:Relationship> 568*ba677afaSXin Li </spdx:relationship> 569*ba677afaSXin Li <spdx:attributionText>attribution text</spdx:attributionText> 570*ba677afaSXin Li <spdx:annotation> 571*ba677afaSXin Li <spdx:Annotation> 572*ba677afaSXin Li <spdx:annotationDate>2011-01-29T18:30:22Z</spdx:annotationDate> 573*ba677afaSXin Li <rdfs:comment>Package level annotation</rdfs:comment> 574*ba677afaSXin Li <spdx:annotator>Person: Package Commenter</spdx:annotator> 575*ba677afaSXin Li <spdx:annotationType rdf:resource="http://spdx.org/rdf/terms#annotationType_other"/> 576*ba677afaSXin Li </spdx:Annotation> 577*ba677afaSXin Li </spdx:annotation> 578*ba677afaSXin Li </spdx:Package> 579*ba677afaSXin Li `) 580*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 581*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 582*ba677afaSXin Li if err != nil { 583*ba677afaSXin Li t.Errorf("error parsing a valid package: %v", err) 584*ba677afaSXin Li } 585*ba677afaSXin Li} 586*ba677afaSXin Li 587*ba677afaSXin Lifunc Test_rdfParser2_3_setFileToPackage(t *testing.T) { 588*ba677afaSXin Li var pkg *v2_3.Package 589*ba677afaSXin Li var file *v2_3.File 590*ba677afaSXin Li var parser *rdfParser2_3 591*ba677afaSXin Li 592*ba677afaSXin Li // TestCase 1: setting to a nil files attribute shouldn't panic. 593*ba677afaSXin Li parser, _ = parserFromBodyContent(``) 594*ba677afaSXin Li pkg = &v2_3.Package{} 595*ba677afaSXin Li file = &v2_3.File{} 596*ba677afaSXin Li parser.setFileToPackage(pkg, file) 597*ba677afaSXin Li if len(pkg.Files) != 1 { 598*ba677afaSXin Li t.Errorf("expected given package to have one file after setting, got %d", len(pkg.Files)) 599*ba677afaSXin Li } 600*ba677afaSXin Li if parser.assocWithPackage[file.FileSPDXIdentifier] != true { 601*ba677afaSXin Li t.Errorf("given file should've been associated with a package, assocWithPackage is false") 602*ba677afaSXin Li } 603*ba677afaSXin Li} 604*ba677afaSXin Li 605*ba677afaSXin Lifunc Test_rdfParser2_3_setPackageChecksum(t *testing.T) { 606*ba677afaSXin Li var parser *rdfParser2_3 607*ba677afaSXin Li var node *gordfParser.Node 608*ba677afaSXin Li var pkg *v2_3.Package 609*ba677afaSXin Li var expectedChecksumValue string 610*ba677afaSXin Li var err error 611*ba677afaSXin Li 612*ba677afaSXin Li // TestCase 1: invalid checksum algorithm 613*ba677afaSXin Li parser, _ = parserFromBodyContent(` 614*ba677afaSXin Li <spdx:Checksum> 615*ba677afaSXin Li <spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue> 616*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha999"/> 617*ba677afaSXin Li </spdx:Checksum> 618*ba677afaSXin Li `) 619*ba677afaSXin Li pkg = &v2_3.Package{} 620*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 621*ba677afaSXin Li err = parser.setPackageChecksum(pkg, node) 622*ba677afaSXin Li if err == nil { 623*ba677afaSXin Li t.Error("expected an error due to invalid checksum node, got <nil>") 624*ba677afaSXin Li } 625*ba677afaSXin Li 626*ba677afaSXin Li // TestCase 1: valid checksum algorithm which is invalid for package 627*ba677afaSXin Li parser, _ = parserFromBodyContent(` 628*ba677afaSXin Li <spdx:Checksum> 629*ba677afaSXin Li <spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue> 630*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha2000"/> 631*ba677afaSXin Li </spdx:Checksum> 632*ba677afaSXin Li `) 633*ba677afaSXin Li pkg = &v2_3.Package{} 634*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 635*ba677afaSXin Li err = parser.setPackageChecksum(pkg, node) 636*ba677afaSXin Li if err == nil { 637*ba677afaSXin Li t.Error("expected an error due to invalid checksum for package, got <nil>") 638*ba677afaSXin Li } 639*ba677afaSXin Li 640*ba677afaSXin Li // TestCase 2: valid checksum (sha1) 641*ba677afaSXin Li parser, _ = parserFromBodyContent(` 642*ba677afaSXin Li <spdx:Checksum> 643*ba677afaSXin Li <spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue> 644*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha1"/> 645*ba677afaSXin Li </spdx:Checksum> 646*ba677afaSXin Li `) 647*ba677afaSXin Li pkg = &v2_3.Package{} 648*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 649*ba677afaSXin Li err = parser.setPackageChecksum(pkg, node) 650*ba677afaSXin Li if err != nil { 651*ba677afaSXin Li t.Errorf("unexpected error: %v", err) 652*ba677afaSXin Li } 653*ba677afaSXin Li expectedChecksumValue = "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12" 654*ba677afaSXin Li 655*ba677afaSXin Li for _, checksum := range pkg.PackageChecksums { 656*ba677afaSXin Li switch checksum.Algorithm { 657*ba677afaSXin Li case common.SHA1: 658*ba677afaSXin Li if checksum.Value != expectedChecksumValue { 659*ba677afaSXin Li t.Errorf("expected %v, got: %v", expectedChecksumValue, checksum.Value) 660*ba677afaSXin Li } 661*ba677afaSXin Li } 662*ba677afaSXin Li } 663*ba677afaSXin Li 664*ba677afaSXin Li // TestCase 3: valid checksum (sha256) 665*ba677afaSXin Li parser, _ = parserFromBodyContent(` 666*ba677afaSXin Li <spdx:Checksum> 667*ba677afaSXin Li <spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue> 668*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha256"/> 669*ba677afaSXin Li </spdx:Checksum> 670*ba677afaSXin Li `) 671*ba677afaSXin Li pkg = &v2_3.Package{} 672*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 673*ba677afaSXin Li err = parser.setPackageChecksum(pkg, node) 674*ba677afaSXin Li if err != nil { 675*ba677afaSXin Li t.Errorf("unexpected error: %v", err) 676*ba677afaSXin Li } 677*ba677afaSXin Li expectedChecksumValue = "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12" 678*ba677afaSXin Li for _, checksum := range pkg.PackageChecksums { 679*ba677afaSXin Li switch checksum.Algorithm { 680*ba677afaSXin Li case common.SHA256: 681*ba677afaSXin Li if checksum.Value != expectedChecksumValue { 682*ba677afaSXin Li t.Errorf("expected %v, got: %v", expectedChecksumValue, checksum.Value) 683*ba677afaSXin Li } 684*ba677afaSXin Li } 685*ba677afaSXin Li } 686*ba677afaSXin Li 687*ba677afaSXin Li // TestCase 4: valid checksum (md5) 688*ba677afaSXin Li parser, _ = parserFromBodyContent(` 689*ba677afaSXin Li <spdx:Checksum> 690*ba677afaSXin Li <spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue> 691*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_md5"/> 692*ba677afaSXin Li </spdx:Checksum> 693*ba677afaSXin Li `) 694*ba677afaSXin Li pkg = &v2_3.Package{} 695*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 696*ba677afaSXin Li err = parser.setPackageChecksum(pkg, node) 697*ba677afaSXin Li if err != nil { 698*ba677afaSXin Li t.Errorf("unexpected error: %v", err) 699*ba677afaSXin Li } 700*ba677afaSXin Li expectedChecksumValue = "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12" 701*ba677afaSXin Li for _, checksum := range pkg.PackageChecksums { 702*ba677afaSXin Li switch checksum.Algorithm { 703*ba677afaSXin Li case common.MD5: 704*ba677afaSXin Li if checksum.Value != expectedChecksumValue { 705*ba677afaSXin Li t.Errorf("expected %v, got: %v", expectedChecksumValue, checksum.Value) 706*ba677afaSXin Li } 707*ba677afaSXin Li } 708*ba677afaSXin Li } 709*ba677afaSXin Li} 710*ba677afaSXin Li 711*ba677afaSXin Lifunc Test_setDocumentLocationFromURI(t *testing.T) { 712*ba677afaSXin Li var pkg *v2_3.Package 713*ba677afaSXin Li var expectedDocumentLocation, gotDocumentLocation string 714*ba677afaSXin Li var inputURI string 715*ba677afaSXin Li var err error 716*ba677afaSXin Li 717*ba677afaSXin Li // TestCase 1: NOASSERTION 718*ba677afaSXin Li inputURI = SPDX_NOASSERTION_SMALL 719*ba677afaSXin Li pkg = &v2_3.Package{} 720*ba677afaSXin Li err = setDocumentLocationFromURI(pkg, inputURI) 721*ba677afaSXin Li if err != nil { 722*ba677afaSXin Li t.Fatalf("unexpected error: %v", err) 723*ba677afaSXin Li } 724*ba677afaSXin Li expectedDocumentLocation = "NOASSERTION" 725*ba677afaSXin Li gotDocumentLocation = pkg.PackageDownloadLocation 726*ba677afaSXin Li if expectedDocumentLocation != gotDocumentLocation { 727*ba677afaSXin Li t.Errorf("expected: %v, got: %v", expectedDocumentLocation, gotDocumentLocation) 728*ba677afaSXin Li } 729*ba677afaSXin Li 730*ba677afaSXin Li // TestCase 2: NONE 731*ba677afaSXin Li inputURI = SPDX_NONE_CAPS 732*ba677afaSXin Li pkg = &v2_3.Package{} 733*ba677afaSXin Li err = setDocumentLocationFromURI(pkg, inputURI) 734*ba677afaSXin Li if err != nil { 735*ba677afaSXin Li t.Fatalf("unexpected error: %v", err) 736*ba677afaSXin Li } 737*ba677afaSXin Li expectedDocumentLocation = "NONE" 738*ba677afaSXin Li gotDocumentLocation = pkg.PackageDownloadLocation 739*ba677afaSXin Li if expectedDocumentLocation != gotDocumentLocation { 740*ba677afaSXin Li t.Errorf("expected: %v, got: %v", expectedDocumentLocation, gotDocumentLocation) 741*ba677afaSXin Li } 742*ba677afaSXin Li 743*ba677afaSXin Li // TestCase 3: valid uri 744*ba677afaSXin Li inputURI = "https://www.gnu.org/software/texinfo/" 745*ba677afaSXin Li pkg = &v2_3.Package{} 746*ba677afaSXin Li err = setDocumentLocationFromURI(pkg, inputURI) 747*ba677afaSXin Li if err != nil { 748*ba677afaSXin Li t.Fatalf("unexpected error: %v", err) 749*ba677afaSXin Li } 750*ba677afaSXin Li expectedDocumentLocation = "https://www.gnu.org/software/texinfo/" 751*ba677afaSXin Li gotDocumentLocation = pkg.PackageDownloadLocation 752*ba677afaSXin Li if expectedDocumentLocation != gotDocumentLocation { 753*ba677afaSXin Li t.Errorf("expected: %v, got: %v", expectedDocumentLocation, gotDocumentLocation) 754*ba677afaSXin Li } 755*ba677afaSXin Li 756*ba677afaSXin Li // TestCase 3: invalid uri 757*ba677afaSXin Li inputURI = " " 758*ba677afaSXin Li pkg = &v2_3.Package{} 759*ba677afaSXin Li err = setDocumentLocationFromURI(pkg, inputURI) 760*ba677afaSXin Li if err == nil { 761*ba677afaSXin Li t.Fatalf("expected an error due to invalid uri, got %v", err) 762*ba677afaSXin Li } 763*ba677afaSXin Li} 764*ba677afaSXin Li 765*ba677afaSXin Lifunc Test_setFilesAnalyzed(t *testing.T) { 766*ba677afaSXin Li var pkg *v2_3.Package 767*ba677afaSXin Li var err error 768*ba677afaSXin Li 769*ba677afaSXin Li // TestCase 1: not a valid bool value: 770*ba677afaSXin Li pkg = &v2_3.Package{} 771*ba677afaSXin Li err = setFilesAnalyzed(pkg, "no") 772*ba677afaSXin Li if err == nil { 773*ba677afaSXin Li t.Errorf("expected an error due to invalid bool input, got %v", err) 774*ba677afaSXin Li } 775*ba677afaSXin Li 776*ba677afaSXin Li // TestCase 2: valid input 777*ba677afaSXin Li pkg = &v2_3.Package{} 778*ba677afaSXin Li err = setFilesAnalyzed(pkg, "true") 779*ba677afaSXin Li if err != nil { 780*ba677afaSXin Li t.Fatalf("unexpected error: %v", err) 781*ba677afaSXin Li } 782*ba677afaSXin Li if !pkg.IsFilesAnalyzedTagPresent { 783*ba677afaSXin Li t.Errorf("should've set IsFilesAnalyzedTagPresent, got: %t", pkg.IsFilesAnalyzedTagPresent) 784*ba677afaSXin Li } 785*ba677afaSXin Li if !pkg.FilesAnalyzed { 786*ba677afaSXin Li t.Errorf("expected: %t, got: %t", true, pkg.FilesAnalyzed) 787*ba677afaSXin Li } 788*ba677afaSXin Li} 789