1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Lipackage parser2v2 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_2" 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_2.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_2.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_2.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_2.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_2.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_2.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_2.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_2.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_2.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_2.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_2.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_2.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_2_setPackageVerificationCode(t *testing.T) { 145*ba677afaSXin Li var parser *rdfParser2_2 146*ba677afaSXin Li var node *gordfParser.Node 147*ba677afaSXin Li var pkg *v2_2.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_2.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_2.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_2_getPackageExternalRef(t *testing.T) { 189*ba677afaSXin Li var extRef *v2_2.PackageExternalReference 190*ba677afaSXin Li var err error 191*ba677afaSXin Li var parser *rdfParser2_2 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_2.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_2.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_2.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_2_getPackageFromNode(t *testing.T) { 307*ba677afaSXin Li var parser *rdfParser2_2 308*ba677afaSXin Li var node *gordfParser.Node 309*ba677afaSXin Li var err error 310*ba677afaSXin Li 311*ba677afaSXin Li // TestCase 1: invalid elementId 312*ba677afaSXin Li parser, _ = parserFromBodyContent(` 313*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#upload2"> 314*ba677afaSXin Li <spdx:name>time-1.9.tar.gz</spdx:name> 315*ba677afaSXin Li </spdx:Package> 316*ba677afaSXin Li `) 317*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 318*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 319*ba677afaSXin Li if err == nil { 320*ba677afaSXin Li t.Errorf("expected an error(missing SPDXRef- prefix), found %v", err) 321*ba677afaSXin Li } 322*ba677afaSXin Li 323*ba677afaSXin Li // TestCase 2: Invalid License Concluded must raise an error: 324*ba677afaSXin Li parser, _ = parserFromBodyContent(` 325*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 326*ba677afaSXin Li <spdx:licenseConcluded rdf:resource="http://spdx.org/licenses/IPL-3.0"/> 327*ba677afaSXin Li </spdx:Package> 328*ba677afaSXin Li `) 329*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 330*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 331*ba677afaSXin Li if err == nil { 332*ba677afaSXin Li t.Errorf("expected an error(invalid license), found %v", err) 333*ba677afaSXin Li } 334*ba677afaSXin Li 335*ba677afaSXin Li // TestCase 2: Invalid License Declared must raise an error: 336*ba677afaSXin Li parser, _ = parserFromBodyContent(` 337*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 338*ba677afaSXin Li <spdx:licenseDeclared rdf:resource="http://spdx.org/licenses/IPL-3.0"/> 339*ba677afaSXin Li </spdx:Package> 340*ba677afaSXin Li `) 341*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 342*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 343*ba677afaSXin Li if err == nil { 344*ba677afaSXin Li t.Errorf("expected an error(invalid license), found %v", err) 345*ba677afaSXin Li } 346*ba677afaSXin Li 347*ba677afaSXin Li // TestCase 3: Invalid ExternalRef 348*ba677afaSXin Li parser, _ = parserFromBodyContent(` 349*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 350*ba677afaSXin Li <spdx:externalRef> 351*ba677afaSXin Li <spdx:ExternalRef> 352*ba677afaSXin Li <spdx:referenceLocator>cpe:2.3:a:pivotal_software:spring_framework:4.1.0:*:*:*:*:*:*:*</spdx:referenceLocator> 353*ba677afaSXin Li <spdx:referenceType> 354*ba677afaSXin Li <spdx:ReferenceType rdf:about="http://spdx.org/rdf/references/cpe23Type"/> 355*ba677afaSXin Li </spdx:referenceType> 356*ba677afaSXin Li <spdx:referenceCategory rdf:resource="http://spdx.org/rdf/terms#referenceCategory_invalid"/> 357*ba677afaSXin Li </spdx:ExternalRef> 358*ba677afaSXin Li </spdx:externalRef> 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 externalRef), found %v", err) 365*ba677afaSXin Li } 366*ba677afaSXin Li 367*ba677afaSXin Li // TestCase 4: invalid file must raise an error 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:hasFile> 371*ba677afaSXin Li <spdx:File rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9.tar.gz_1535120734-spdx.rdf#item8"/> 372*ba677afaSXin Li </spdx:hasFile> 373*ba677afaSXin Li </spdx:Package> 374*ba677afaSXin Li `) 375*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 376*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 377*ba677afaSXin Li if err == nil { 378*ba677afaSXin Li t.Errorf("expected an error(invalid file), found %v", err) 379*ba677afaSXin Li } 380*ba677afaSXin Li 381*ba677afaSXin Li // TestCase 5: invalid predicate must raise an error 382*ba677afaSXin Li parser, _ = parserFromBodyContent(` 383*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 384*ba677afaSXin Li <spdx:hasFiles> 385*ba677afaSXin Li <spdx:File rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9.tar.gz_1535120734-spdx.rdf#item8"/> 386*ba677afaSXin Li </spdx:hasFiles> 387*ba677afaSXin Li </spdx:Package> 388*ba677afaSXin Li `) 389*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 390*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 391*ba677afaSXin Li if err == nil { 392*ba677afaSXin Li t.Errorf("expected an error(invalid predicate), found %v", err) 393*ba677afaSXin Li } 394*ba677afaSXin Li 395*ba677afaSXin Li // TestCase 6: invalid annotation must raise an error 396*ba677afaSXin Li parser, _ = parserFromBodyContent(` 397*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 398*ba677afaSXin Li <spdx:annotation> 399*ba677afaSXin Li <spdx:Annotation> 400*ba677afaSXin Li <spdx:unknownAttribute /> 401*ba677afaSXin Li </spdx:Annotation> 402*ba677afaSXin Li </spdx:annotation> 403*ba677afaSXin Li </spdx:Package> 404*ba677afaSXin Li `) 405*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 406*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 407*ba677afaSXin Li if err == nil { 408*ba677afaSXin Li t.Errorf("expected an error(invalid annotation), found %v", err) 409*ba677afaSXin Li } 410*ba677afaSXin Li 411*ba677afaSXin Li // TestCase 6: invalid homepage must raise an error 412*ba677afaSXin Li parser, _ = parserFromBodyContent(` 413*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 414*ba677afaSXin Li <doap:homepage>u r i</doap:homepage> 415*ba677afaSXin Li </spdx:Package> 416*ba677afaSXin Li `) 417*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 418*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 419*ba677afaSXin Li if err == nil { 420*ba677afaSXin Li t.Errorf("expected an error(invalid homepage uri), found %v", err) 421*ba677afaSXin Li } 422*ba677afaSXin Li 423*ba677afaSXin Li // TestCase 7: Package tag declared more than once should be parsed into a single object's definition 424*ba677afaSXin Li parser, _ = parserFromBodyContent(` 425*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 426*ba677afaSXin Li <spdx:name>Test Package</spdx:name> 427*ba677afaSXin Li </spdx:Package> 428*ba677afaSXin Li `) 429*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 430*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 431*ba677afaSXin Li if err != nil { 432*ba677afaSXin Li t.Errorf("error parsing a valid package: %v", err) 433*ba677afaSXin Li } 434*ba677afaSXin Li yetAnotherPkgTriple := gordfParser.Triple{ 435*ba677afaSXin Li Subject: node, 436*ba677afaSXin Li Predicate: &gordfParser.Node{ 437*ba677afaSXin Li NodeType: gordfParser.IRI, 438*ba677afaSXin Li ID: SPDX_PACKAGE_FILE_NAME, 439*ba677afaSXin Li }, 440*ba677afaSXin Li Object: &gordfParser.Node{ 441*ba677afaSXin Li NodeType: gordfParser.LITERAL, 442*ba677afaSXin Li ID: "packageFileName", 443*ba677afaSXin Li }, 444*ba677afaSXin Li } 445*ba677afaSXin Li parser.nodeStringToTriples[node.String()] = append(parser.nodeStringToTriples[node.String()], &yetAnotherPkgTriple) 446*ba677afaSXin Li pkg, err := parser.getPackageFromNode(node) 447*ba677afaSXin Li if err != nil { 448*ba677afaSXin Li t.Errorf("error parsing a valid package: %v", err) 449*ba677afaSXin Li } 450*ba677afaSXin Li // validating if all the attributes that spanned over two tags are included in the parsed package. 451*ba677afaSXin Li expectedID := "upload2" 452*ba677afaSXin Li if string(pkg.PackageSPDXIdentifier) != expectedID { 453*ba677afaSXin Li t.Errorf("expected package id: %s, got %s", expectedID, pkg.PackageSPDXIdentifier) 454*ba677afaSXin Li } 455*ba677afaSXin Li expectedPkgFileName := "packageFileName" 456*ba677afaSXin Li if expectedPkgFileName != pkg.PackageFileName { 457*ba677afaSXin Li t.Errorf("expected package file name: %s, got %s", expectedPkgFileName, pkg.PackageFileName) 458*ba677afaSXin Li } 459*ba677afaSXin Li expectedName := "Test Package" 460*ba677afaSXin Li if pkg.PackageName != expectedName { 461*ba677afaSXin Li t.Errorf("expected package name: %s, got %s", expectedPkgFileName, pkg.PackageName) 462*ba677afaSXin Li } 463*ba677afaSXin Li 464*ba677afaSXin Li // TestCase 8: Checking if packages can handle cyclic dependencies: 465*ba677afaSXin Li // Simulating a smallest possible cycle: package related to itself. 466*ba677afaSXin Li parser, _ = parserFromBodyContent(` 467*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 468*ba677afaSXin Li <spdx:name>Test Package</spdx:name> 469*ba677afaSXin Li <spdx:relationship> 470*ba677afaSXin Li <spdx:Relationship> 471*ba677afaSXin Li <spdx:relationshipType rdf:resource="http://spdx.org/rdf/terms#relationshipType_describes" /> 472*ba677afaSXin Li <spdx:relatedSpdxElement> 473*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 474*ba677afaSXin Li <spdx:versionInfo>1.1.1</spdx:versionInfo> 475*ba677afaSXin Li </spdx:Package> 476*ba677afaSXin Li </spdx:relatedSpdxElement> 477*ba677afaSXin Li </spdx:Relationship> 478*ba677afaSXin Li </spdx:relationship> 479*ba677afaSXin Li </spdx:Package> 480*ba677afaSXin Li `) 481*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 482*ba677afaSXin Li pkg, err = parser.getPackageFromNode(node) 483*ba677afaSXin Li if err != nil { 484*ba677afaSXin Li t.Errorf("error parsing a valid package: %v", err) 485*ba677afaSXin Li } 486*ba677afaSXin Li // checking if both the attributes of the packages are set. 487*ba677afaSXin Li expectedVersionInfo := "1.1.1" 488*ba677afaSXin Li expectedPackageName := "Test Package" 489*ba677afaSXin Li if pkg.PackageVersion != expectedVersionInfo { 490*ba677afaSXin Li t.Errorf("Expected %s, found %s", expectedVersionInfo, pkg.PackageVersion) 491*ba677afaSXin Li } 492*ba677afaSXin Li if pkg.PackageName != expectedPackageName { 493*ba677afaSXin Li t.Errorf("Expected %s, found %s", expectedPackageName, pkg.PackageName) 494*ba677afaSXin Li } 495*ba677afaSXin Li 496*ba677afaSXin Li // TestCase 9: everything valid 497*ba677afaSXin Li parser, _ = parserFromBodyContent(` 498*ba677afaSXin Li <spdx:Package rdf:about="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2"> 499*ba677afaSXin Li <spdx:name>Test Package</spdx:name> 500*ba677afaSXin Li <spdx:versionInfo>1.1.1</spdx:versionInfo> 501*ba677afaSXin Li <spdx:packageFileName>time-1.9.tar.gz</spdx:packageFileName> 502*ba677afaSXin Li <spdx:supplier>Person: Jane Doe (jane.doe@example.com)</spdx:supplier> 503*ba677afaSXin Li <spdx:originator>Organization: SPDX</spdx:originator> 504*ba677afaSXin Li <spdx:downloadLocation rdf:resource="http://spdx.org/rdf/terms#noassertion" /> 505*ba677afaSXin Li <spdx:filesAnalyzed>true</spdx:filesAnalyzed> 506*ba677afaSXin Li <spdx:packageVerificationCode> 507*ba677afaSXin Li <spdx.PackageVerificationCode> 508*ba677afaSXin Li <spdx:packageVerificationCodeValue>cbceb8b5689b75a584efe35587b5d41bd48820ce</spdx:packageVerificationCodeValue> 509*ba677afaSXin Li <spdx:packageVerificationCodeExcludedFile>./package.spdx</spdx:packageVerificationCodeExcludedFile> 510*ba677afaSXin Li </spdx.PackageVerificationCode> 511*ba677afaSXin Li </spdx:packageVerificationCode> 512*ba677afaSXin Li <spdx:checksum> 513*ba677afaSXin Li <spdx:Checksum> 514*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha1" /> 515*ba677afaSXin Li <spdx:checksumValue>75068c26abbed3ad3980685bae21d7202d288317</spdx:checksumValue> 516*ba677afaSXin Li </spdx:Checksum> 517*ba677afaSXin Li </spdx:checksum> 518*ba677afaSXin Li <doap:homepage>http://www.openjena.org/</doap:homepage> 519*ba677afaSXin Li <spdx:sourceInfo>uses glibc-2_11-branch from git://sourceware.org/git/glibc.git.</spdx:sourceInfo> 520*ba677afaSXin Li <spdx:licenseConcluded> 521*ba677afaSXin Li <spdx:DisjunctiveLicenseSet> 522*ba677afaSXin Li <spdx:member rdf:resource="http://spdx.org/licenses/Nokia"/> 523*ba677afaSXin Li <spdx:member rdf:resource="http://spdx.org/licenses/LGPL-2.0"/> 524*ba677afaSXin Li </spdx:DisjunctiveLicenseSet> 525*ba677afaSXin Li </spdx:licenseConcluded> 526*ba677afaSXin Li <spdx:licenseInfoFromFiles rdf:resource="http://spdx.org/rdf/terms#noassertion" /> 527*ba677afaSXin Li <spdx:licenseDeclared rdf:resource="http://spdx.org/rdf/terms#noassertion" /> 528*ba677afaSXin Li <spdx:licenseComments>Other versions available for a commercial license</spdx:licenseComments> 529*ba677afaSXin Li <spdx:copyrightText rdf:resource="http://spdx.org/rdf/terms#noassertion" /> 530*ba677afaSXin Li <spdx:summary> Package for Testing </spdx:summary> 531*ba677afaSXin Li <spdx:description> Some tags are taken from other spdx autogenerated files </spdx:description> 532*ba677afaSXin Li <rdfs:comment>no comments</rdfs:comment> 533*ba677afaSXin Li <spdx:externalRef> 534*ba677afaSXin Li <spdx:ExternalRef> 535*ba677afaSXin Li <spdx:referenceLocator>cpe:2.3:a:pivotal_software:spring_framework:4.1.0:*:*:*:*:*:*:*</spdx:referenceLocator> 536*ba677afaSXin Li <spdx:referenceType> 537*ba677afaSXin Li <spdx:ReferenceType rdf:about="http://spdx.org/rdf/references/cpe23Type"/> 538*ba677afaSXin Li </spdx:referenceType> 539*ba677afaSXin Li <spdx:referenceCategory rdf:resource="http://spdx.org/rdf/terms#referenceCategory_security"/> 540*ba677afaSXin Li </spdx:ExternalRef> 541*ba677afaSXin Li </spdx:externalRef> 542*ba677afaSXin Li <spdx:hasFile rdf:resource="http://spdx.org/documents/spdx-toolsv2.1.7-SNAPSHOT#SPDXRef-129" /> 543*ba677afaSXin Li <spdx:relationship> 544*ba677afaSXin Li <spdx:Relationship> 545*ba677afaSXin Li <spdx:relationshipType rdf:resource="http://spdx.org/rdf/terms#relationshipType_describes" /> 546*ba677afaSXin Li <spdx:relatedSpdxElement rdf:resource="http://anupam-VirtualBox/repo/SPDX2_time-1.9#SPDXRef-upload2" /> 547*ba677afaSXin Li </spdx:Relationship> 548*ba677afaSXin Li </spdx:relationship> 549*ba677afaSXin Li <spdx:attributionText>attribution text</spdx:attributionText> 550*ba677afaSXin Li <spdx:annotation> 551*ba677afaSXin Li <spdx:Annotation> 552*ba677afaSXin Li <spdx:annotationDate>2011-01-29T18:30:22Z</spdx:annotationDate> 553*ba677afaSXin Li <rdfs:comment>Package level annotation</rdfs:comment> 554*ba677afaSXin Li <spdx:annotator>Person: Package Commenter</spdx:annotator> 555*ba677afaSXin Li <spdx:annotationType rdf:resource="http://spdx.org/rdf/terms#annotationType_other"/> 556*ba677afaSXin Li </spdx:Annotation> 557*ba677afaSXin Li </spdx:annotation> 558*ba677afaSXin Li </spdx:Package> 559*ba677afaSXin Li `) 560*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 561*ba677afaSXin Li _, err = parser.getPackageFromNode(node) 562*ba677afaSXin Li if err != nil { 563*ba677afaSXin Li t.Errorf("error parsing a valid package: %v", err) 564*ba677afaSXin Li } 565*ba677afaSXin Li} 566*ba677afaSXin Li 567*ba677afaSXin Lifunc Test_rdfParser2_2_setFileToPackage(t *testing.T) { 568*ba677afaSXin Li var pkg *v2_2.Package 569*ba677afaSXin Li var file *v2_2.File 570*ba677afaSXin Li var parser *rdfParser2_2 571*ba677afaSXin Li 572*ba677afaSXin Li // TestCase 1: setting to a nil files attribute shouldn't panic. 573*ba677afaSXin Li parser, _ = parserFromBodyContent(``) 574*ba677afaSXin Li pkg = &v2_2.Package{} 575*ba677afaSXin Li file = &v2_2.File{} 576*ba677afaSXin Li parser.setFileToPackage(pkg, file) 577*ba677afaSXin Li if len(pkg.Files) != 1 { 578*ba677afaSXin Li t.Errorf("expected given package to have one file after setting, got %d", len(pkg.Files)) 579*ba677afaSXin Li } 580*ba677afaSXin Li if parser.assocWithPackage[file.FileSPDXIdentifier] != true { 581*ba677afaSXin Li t.Errorf("given file should've been associated with a package, assocWithPackage is false") 582*ba677afaSXin Li } 583*ba677afaSXin Li} 584*ba677afaSXin Li 585*ba677afaSXin Lifunc Test_rdfParser2_2_setPackageChecksum(t *testing.T) { 586*ba677afaSXin Li var parser *rdfParser2_2 587*ba677afaSXin Li var node *gordfParser.Node 588*ba677afaSXin Li var pkg *v2_2.Package 589*ba677afaSXin Li var expectedChecksumValue string 590*ba677afaSXin Li var err error 591*ba677afaSXin Li 592*ba677afaSXin Li // TestCase 1: invalid checksum algorithm 593*ba677afaSXin Li parser, _ = parserFromBodyContent(` 594*ba677afaSXin Li <spdx:Checksum> 595*ba677afaSXin Li <spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue> 596*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha999"/> 597*ba677afaSXin Li </spdx:Checksum> 598*ba677afaSXin Li `) 599*ba677afaSXin Li pkg = &v2_2.Package{} 600*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 601*ba677afaSXin Li err = parser.setPackageChecksum(pkg, node) 602*ba677afaSXin Li if err == nil { 603*ba677afaSXin Li t.Error("expected an error due to invalid checksum node, got <nil>") 604*ba677afaSXin Li } 605*ba677afaSXin Li 606*ba677afaSXin Li // TestCase 1: valid checksum algorithm which is invalid for package 607*ba677afaSXin Li parser, _ = parserFromBodyContent(` 608*ba677afaSXin Li <spdx:Checksum> 609*ba677afaSXin Li <spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue> 610*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha2000"/> 611*ba677afaSXin Li </spdx:Checksum> 612*ba677afaSXin Li `) 613*ba677afaSXin Li pkg = &v2_2.Package{} 614*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 615*ba677afaSXin Li err = parser.setPackageChecksum(pkg, node) 616*ba677afaSXin Li if err == nil { 617*ba677afaSXin Li t.Error("expected an error due to invalid checksum for package, got <nil>") 618*ba677afaSXin Li } 619*ba677afaSXin Li 620*ba677afaSXin Li // TestCase 2: valid checksum (sha1) 621*ba677afaSXin Li parser, _ = parserFromBodyContent(` 622*ba677afaSXin Li <spdx:Checksum> 623*ba677afaSXin Li <spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue> 624*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha1"/> 625*ba677afaSXin Li </spdx:Checksum> 626*ba677afaSXin Li `) 627*ba677afaSXin Li pkg = &v2_2.Package{} 628*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 629*ba677afaSXin Li err = parser.setPackageChecksum(pkg, node) 630*ba677afaSXin Li if err != nil { 631*ba677afaSXin Li t.Errorf("unexpected error: %v", err) 632*ba677afaSXin Li } 633*ba677afaSXin Li expectedChecksumValue = "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12" 634*ba677afaSXin Li 635*ba677afaSXin Li for _, checksum := range pkg.PackageChecksums { 636*ba677afaSXin Li switch checksum.Algorithm { 637*ba677afaSXin Li case common.SHA1: 638*ba677afaSXin Li if checksum.Value != expectedChecksumValue { 639*ba677afaSXin Li t.Errorf("expected %v, got: %v", expectedChecksumValue, checksum.Value) 640*ba677afaSXin Li } 641*ba677afaSXin Li } 642*ba677afaSXin Li } 643*ba677afaSXin Li 644*ba677afaSXin Li // TestCase 3: valid checksum (sha256) 645*ba677afaSXin Li parser, _ = parserFromBodyContent(` 646*ba677afaSXin Li <spdx:Checksum> 647*ba677afaSXin Li <spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue> 648*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha256"/> 649*ba677afaSXin Li </spdx:Checksum> 650*ba677afaSXin Li `) 651*ba677afaSXin Li pkg = &v2_2.Package{} 652*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 653*ba677afaSXin Li err = parser.setPackageChecksum(pkg, node) 654*ba677afaSXin Li if err != nil { 655*ba677afaSXin Li t.Errorf("unexpected error: %v", err) 656*ba677afaSXin Li } 657*ba677afaSXin Li expectedChecksumValue = "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12" 658*ba677afaSXin Li for _, checksum := range pkg.PackageChecksums { 659*ba677afaSXin Li switch checksum.Algorithm { 660*ba677afaSXin Li case common.SHA256: 661*ba677afaSXin Li if checksum.Value != expectedChecksumValue { 662*ba677afaSXin Li t.Errorf("expected %v, got: %v", expectedChecksumValue, checksum.Value) 663*ba677afaSXin Li } 664*ba677afaSXin Li } 665*ba677afaSXin Li } 666*ba677afaSXin Li 667*ba677afaSXin Li // TestCase 4: valid checksum (md5) 668*ba677afaSXin Li parser, _ = parserFromBodyContent(` 669*ba677afaSXin Li <spdx:Checksum> 670*ba677afaSXin Li <spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue> 671*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_md5"/> 672*ba677afaSXin Li </spdx:Checksum> 673*ba677afaSXin Li `) 674*ba677afaSXin Li pkg = &v2_2.Package{} 675*ba677afaSXin Li node = parser.gordfParserObj.Triples[0].Subject 676*ba677afaSXin Li err = parser.setPackageChecksum(pkg, node) 677*ba677afaSXin Li if err != nil { 678*ba677afaSXin Li t.Errorf("unexpected error: %v", err) 679*ba677afaSXin Li } 680*ba677afaSXin Li expectedChecksumValue = "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12" 681*ba677afaSXin Li for _, checksum := range pkg.PackageChecksums { 682*ba677afaSXin Li switch checksum.Algorithm { 683*ba677afaSXin Li case common.MD5: 684*ba677afaSXin Li if checksum.Value != expectedChecksumValue { 685*ba677afaSXin Li t.Errorf("expected %v, got: %v", expectedChecksumValue, checksum.Value) 686*ba677afaSXin Li } 687*ba677afaSXin Li } 688*ba677afaSXin Li } 689*ba677afaSXin Li} 690*ba677afaSXin Li 691*ba677afaSXin Lifunc Test_setDocumentLocationFromURI(t *testing.T) { 692*ba677afaSXin Li var pkg *v2_2.Package 693*ba677afaSXin Li var expectedDocumentLocation, gotDocumentLocation string 694*ba677afaSXin Li var inputURI string 695*ba677afaSXin Li var err error 696*ba677afaSXin Li 697*ba677afaSXin Li // TestCase 1: NOASSERTION 698*ba677afaSXin Li inputURI = SPDX_NOASSERTION_SMALL 699*ba677afaSXin Li pkg = &v2_2.Package{} 700*ba677afaSXin Li err = setDocumentLocationFromURI(pkg, inputURI) 701*ba677afaSXin Li if err != nil { 702*ba677afaSXin Li t.Fatalf("unexpected error: %v", err) 703*ba677afaSXin Li } 704*ba677afaSXin Li expectedDocumentLocation = "NOASSERTION" 705*ba677afaSXin Li gotDocumentLocation = pkg.PackageDownloadLocation 706*ba677afaSXin Li if expectedDocumentLocation != gotDocumentLocation { 707*ba677afaSXin Li t.Errorf("expected: %v, got: %v", expectedDocumentLocation, gotDocumentLocation) 708*ba677afaSXin Li } 709*ba677afaSXin Li 710*ba677afaSXin Li // TestCase 2: NONE 711*ba677afaSXin Li inputURI = SPDX_NONE_CAPS 712*ba677afaSXin Li pkg = &v2_2.Package{} 713*ba677afaSXin Li err = setDocumentLocationFromURI(pkg, inputURI) 714*ba677afaSXin Li if err != nil { 715*ba677afaSXin Li t.Fatalf("unexpected error: %v", err) 716*ba677afaSXin Li } 717*ba677afaSXin Li expectedDocumentLocation = "NONE" 718*ba677afaSXin Li gotDocumentLocation = pkg.PackageDownloadLocation 719*ba677afaSXin Li if expectedDocumentLocation != gotDocumentLocation { 720*ba677afaSXin Li t.Errorf("expected: %v, got: %v", expectedDocumentLocation, gotDocumentLocation) 721*ba677afaSXin Li } 722*ba677afaSXin Li 723*ba677afaSXin Li // TestCase 3: valid uri 724*ba677afaSXin Li inputURI = "https://www.gnu.org/software/texinfo/" 725*ba677afaSXin Li pkg = &v2_2.Package{} 726*ba677afaSXin Li err = setDocumentLocationFromURI(pkg, inputURI) 727*ba677afaSXin Li if err != nil { 728*ba677afaSXin Li t.Fatalf("unexpected error: %v", err) 729*ba677afaSXin Li } 730*ba677afaSXin Li expectedDocumentLocation = "https://www.gnu.org/software/texinfo/" 731*ba677afaSXin Li gotDocumentLocation = pkg.PackageDownloadLocation 732*ba677afaSXin Li if expectedDocumentLocation != gotDocumentLocation { 733*ba677afaSXin Li t.Errorf("expected: %v, got: %v", expectedDocumentLocation, gotDocumentLocation) 734*ba677afaSXin Li } 735*ba677afaSXin Li 736*ba677afaSXin Li // TestCase 3: invalid uri 737*ba677afaSXin Li inputURI = " " 738*ba677afaSXin Li pkg = &v2_2.Package{} 739*ba677afaSXin Li err = setDocumentLocationFromURI(pkg, inputURI) 740*ba677afaSXin Li if err == nil { 741*ba677afaSXin Li t.Fatalf("expected an error due to invalid uri, got %v", err) 742*ba677afaSXin Li } 743*ba677afaSXin Li} 744*ba677afaSXin Li 745*ba677afaSXin Lifunc Test_setFilesAnalyzed(t *testing.T) { 746*ba677afaSXin Li var pkg *v2_2.Package 747*ba677afaSXin Li var err error 748*ba677afaSXin Li 749*ba677afaSXin Li // TestCase 1: not a valid bool value: 750*ba677afaSXin Li pkg = &v2_2.Package{} 751*ba677afaSXin Li err = setFilesAnalyzed(pkg, "no") 752*ba677afaSXin Li if err == nil { 753*ba677afaSXin Li t.Errorf("expected an error due to invalid bool input, got %v", err) 754*ba677afaSXin Li } 755*ba677afaSXin Li 756*ba677afaSXin Li // TestCase 2: valid input 757*ba677afaSXin Li pkg = &v2_2.Package{} 758*ba677afaSXin Li err = setFilesAnalyzed(pkg, "true") 759*ba677afaSXin Li if err != nil { 760*ba677afaSXin Li t.Fatalf("unexpected error: %v", err) 761*ba677afaSXin Li } 762*ba677afaSXin Li if !pkg.IsFilesAnalyzedTagPresent { 763*ba677afaSXin Li t.Errorf("should've set IsFilesAnalyzedTagPresent, got: %t", pkg.IsFilesAnalyzedTagPresent) 764*ba677afaSXin Li } 765*ba677afaSXin Li if !pkg.FilesAnalyzed { 766*ba677afaSXin Li t.Errorf("expected: %t, got: %t", true, pkg.FilesAnalyzed) 767*ba677afaSXin Li } 768*ba677afaSXin Li} 769