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 10*ba677afaSXin Lifunc Test_getLicenseStringFromURI(t *testing.T) { 11*ba677afaSXin Li // TestCase 1: NONE license 12*ba677afaSXin Li input := SPDX_NONE_CAPS 13*ba677afaSXin Li output := getLicenseStringFromURI(input) 14*ba677afaSXin Li expectedOutput := "NONE" 15*ba677afaSXin Li if output != expectedOutput { 16*ba677afaSXin Li t.Errorf("expected: %s, found %s", expectedOutput, output) 17*ba677afaSXin Li } 18*ba677afaSXin Li 19*ba677afaSXin Li // TestCase 2: NOASSERTION license 20*ba677afaSXin Li input = SPDX_NOASSERTION_SMALL 21*ba677afaSXin Li output = getLicenseStringFromURI(input) 22*ba677afaSXin Li expectedOutput = "NOASSERTION" 23*ba677afaSXin Li if output != expectedOutput { 24*ba677afaSXin Li t.Errorf("expected: %s, found %s", expectedOutput, output) 25*ba677afaSXin Li } 26*ba677afaSXin Li 27*ba677afaSXin Li // TestCase 3: Other license 28*ba677afaSXin Li input = NS_SPDX + "LicenseRef-1" 29*ba677afaSXin Li output = getLicenseStringFromURI(input) 30*ba677afaSXin Li expectedOutput = "LicenseRef-1" 31*ba677afaSXin Li if output != expectedOutput { 32*ba677afaSXin Li t.Errorf("expected: %s, found %s", expectedOutput, output) 33*ba677afaSXin Li } 34*ba677afaSXin Li} 35*ba677afaSXin Li 36*ba677afaSXin Lifunc Test_rdfParser2_3_getChecksumFromNode(t *testing.T) { 37*ba677afaSXin Li var parser *rdfParser2_3 38*ba677afaSXin Li var err error 39*ba677afaSXin Li // TestCase 1: invalid checksum algorithm 40*ba677afaSXin Li parser, _ = parserFromBodyContent(` 41*ba677afaSXin Li <spdx:Checksum> 42*ba677afaSXin Li <spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue> 43*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha999"/> 44*ba677afaSXin Li </spdx:Checksum> 45*ba677afaSXin Li `) 46*ba677afaSXin Li checksumNode := parser.gordfParserObj.Triples[0].Subject 47*ba677afaSXin Li _, _, err = parser.getChecksumFromNode(checksumNode) 48*ba677afaSXin Li if err == nil { 49*ba677afaSXin Li t.Errorf("expected an error saying invalid checksum algorithm") 50*ba677afaSXin Li } 51*ba677afaSXin Li 52*ba677afaSXin Li // TestCase 2: invalid predicate 53*ba677afaSXin Li parser, _ = parserFromBodyContent(` 54*ba677afaSXin Li <spdx:Checksum> 55*ba677afaSXin Li <spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue> 56*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha1"/> 57*ba677afaSXin Li <spdx:invalidPredicate /> 58*ba677afaSXin Li </spdx:Checksum> 59*ba677afaSXin Li `) 60*ba677afaSXin Li checksumNode = parser.gordfParserObj.Triples[0].Subject 61*ba677afaSXin Li _, _, err = parser.getChecksumFromNode(checksumNode) 62*ba677afaSXin Li if err == nil { 63*ba677afaSXin Li t.Errorf("expected an error saying invalid predicate") 64*ba677afaSXin Li } 65*ba677afaSXin Li 66*ba677afaSXin Li // TestCase 3: valid input 67*ba677afaSXin Li parser, _ = parserFromBodyContent(` 68*ba677afaSXin Li <spdx:Checksum> 69*ba677afaSXin Li <spdx:checksumValue>2fd4e1c67a2d28fced849ee1bb76e7391b93eb12</spdx:checksumValue> 70*ba677afaSXin Li <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha1"/> 71*ba677afaSXin Li </spdx:Checksum> 72*ba677afaSXin Li `) 73*ba677afaSXin Li checksumNode = parser.gordfParserObj.Triples[0].Subject 74*ba677afaSXin Li algorithm, value, err := parser.getChecksumFromNode(checksumNode) 75*ba677afaSXin Li if err != nil { 76*ba677afaSXin Li t.Errorf("unexpected error: %v", err) 77*ba677afaSXin Li } 78*ba677afaSXin Li if algorithm != "SHA1" { 79*ba677afaSXin Li t.Errorf("expected checksum algorithm to be sha1, found %s", algorithm) 80*ba677afaSXin Li } 81*ba677afaSXin Li expectedValue := "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12" 82*ba677afaSXin Li if value != expectedValue { 83*ba677afaSXin Li t.Errorf("expected checksumValue to be %s, found %s", expectedValue, value) 84*ba677afaSXin Li } 85*ba677afaSXin Li} 86*ba677afaSXin Li 87*ba677afaSXin Lifunc Test_rdfParser2_3_getAlgorithmFromURI(t *testing.T) { 88*ba677afaSXin Li var algorithmURI string 89*ba677afaSXin Li var err error 90*ba677afaSXin Li 91*ba677afaSXin Li // TestCase 1: checksumAlgorithm uri doesn't start with checksumAlgorithm_ 92*ba677afaSXin Li algorithmURI = NS_SPDX + "sha1" 93*ba677afaSXin Li _, err = getAlgorithmFromURI(algorithmURI) 94*ba677afaSXin Li if err == nil { 95*ba677afaSXin Li t.Errorf("should've raised an error for algorithmURI that doesn't start with checksumAlgorithm_") 96*ba677afaSXin Li } 97*ba677afaSXin Li 98*ba677afaSXin Li // TestCase 2: unknown checksum algorithm 99*ba677afaSXin Li algorithmURI = NS_SPDX + "checksumAlgorithm_sha999" 100*ba677afaSXin Li _, err = getAlgorithmFromURI(algorithmURI) 101*ba677afaSXin Li if err == nil { 102*ba677afaSXin Li t.Errorf("should've raised an error for invalid algorithm") 103*ba677afaSXin Li } 104*ba677afaSXin Li 105*ba677afaSXin Li // TestCase 3: valid input 106*ba677afaSXin Li algorithmURI = NS_SPDX + "checksumAlgorithm_sha256" 107*ba677afaSXin Li algorithm, err := getAlgorithmFromURI(algorithmURI) 108*ba677afaSXin Li if err != nil { 109*ba677afaSXin Li t.Errorf("unexpected error: %v", err) 110*ba677afaSXin Li } 111*ba677afaSXin Li if algorithm != "SHA256" { 112*ba677afaSXin Li t.Errorf("expected: SHA256, found: %s", algorithm) 113*ba677afaSXin Li } 114*ba677afaSXin Li} 115*ba677afaSXin Li 116*ba677afaSXin Lifunc Test_mapLicensesToStrings(t *testing.T) { 117*ba677afaSXin Li // nothing much to test here. 118*ba677afaSXin Li // just a dummy dry run. 119*ba677afaSXin Li licenses := []AnyLicenseInfo{ 120*ba677afaSXin Li SpecialLicense{ 121*ba677afaSXin Li value: NONE, 122*ba677afaSXin Li }, 123*ba677afaSXin Li SpecialLicense{ 124*ba677afaSXin Li value: NOASSERTION, 125*ba677afaSXin Li }, 126*ba677afaSXin Li } 127*ba677afaSXin Li licenseStrings := mapLicensesToStrings(licenses) 128*ba677afaSXin Li expectedLicenseStrings := []string{"NONE", "NOASSERTION"} 129*ba677afaSXin Li if !reflect.DeepEqual(licenseStrings, expectedLicenseStrings) { 130*ba677afaSXin Li t.Errorf("expected: %+v\nfound %+v", expectedLicenseStrings, licenseStrings) 131*ba677afaSXin Li } 132*ba677afaSXin Li} 133*ba677afaSXin Li 134*ba677afaSXin Lifunc TestConjunctiveLicenseSet_ToLicenseString(t *testing.T) { 135*ba677afaSXin Li var lic ConjunctiveLicenseSet 136*ba677afaSXin Li var output, expectedOutput string 137*ba677afaSXin Li 138*ba677afaSXin Li // TestCase 1: no license in the set 139*ba677afaSXin Li lic = ConjunctiveLicenseSet{ 140*ba677afaSXin Li members: nil, 141*ba677afaSXin Li } 142*ba677afaSXin Li output = lic.ToLicenseString() 143*ba677afaSXin Li expectedOutput = "" 144*ba677afaSXin Li if output != expectedOutput { 145*ba677afaSXin Li t.Errorf("expected: %s, found %s", output, expectedOutput) 146*ba677afaSXin Li } 147*ba677afaSXin Li 148*ba677afaSXin Li // TestCase 2: single license in the set 149*ba677afaSXin Li lic = ConjunctiveLicenseSet{ 150*ba677afaSXin Li members: []AnyLicenseInfo{ 151*ba677afaSXin Li SpecialLicense{value: NOASSERTION}, 152*ba677afaSXin Li }, 153*ba677afaSXin Li } 154*ba677afaSXin Li output = lic.ToLicenseString() 155*ba677afaSXin Li expectedOutput = "NOASSERTION" 156*ba677afaSXin Li if output != expectedOutput { 157*ba677afaSXin Li t.Errorf("expected: %s, found %s", output, expectedOutput) 158*ba677afaSXin Li } 159*ba677afaSXin Li 160*ba677afaSXin Li // TestCase 3: more than one license in the set. 161*ba677afaSXin Li lic = ConjunctiveLicenseSet{ 162*ba677afaSXin Li members: []AnyLicenseInfo{ 163*ba677afaSXin Li SpecialLicense{value: NOASSERTION}, 164*ba677afaSXin Li SpecialLicense{value: NONE}, 165*ba677afaSXin Li }, 166*ba677afaSXin Li } 167*ba677afaSXin Li output = lic.ToLicenseString() 168*ba677afaSXin Li expectedOutput = "NOASSERTION AND NONE" 169*ba677afaSXin Li if output != expectedOutput { 170*ba677afaSXin Li t.Errorf("expected: %s, found %s", output, expectedOutput) 171*ba677afaSXin Li } 172*ba677afaSXin Li 173*ba677afaSXin Li // TestCase 4: nested conjunctive license. 174*ba677afaSXin Li lic = ConjunctiveLicenseSet{ 175*ba677afaSXin Li members: []AnyLicenseInfo{ 176*ba677afaSXin Li SpecialLicense{value: NOASSERTION}, 177*ba677afaSXin Li ConjunctiveLicenseSet{ 178*ba677afaSXin Li members: []AnyLicenseInfo{ 179*ba677afaSXin Li SpecialLicense{value: "LicenseRef-1"}, 180*ba677afaSXin Li SpecialLicense{value: NONE}, 181*ba677afaSXin Li }, 182*ba677afaSXin Li }, 183*ba677afaSXin Li }, 184*ba677afaSXin Li } 185*ba677afaSXin Li output = lic.ToLicenseString() 186*ba677afaSXin Li expectedOutput = "NOASSERTION AND LicenseRef-1 AND NONE" 187*ba677afaSXin Li if output != expectedOutput { 188*ba677afaSXin Li t.Errorf("expected: %s, found %s", output, expectedOutput) 189*ba677afaSXin Li } 190*ba677afaSXin Li} 191*ba677afaSXin Li 192*ba677afaSXin Lifunc TestDisjunctiveLicenseSet_ToLicenseString(t *testing.T) { 193*ba677afaSXin Li var lic DisjunctiveLicenseSet 194*ba677afaSXin Li var output, expectedOutput string 195*ba677afaSXin Li 196*ba677afaSXin Li // TestCase 1: no license in the set 197*ba677afaSXin Li lic = DisjunctiveLicenseSet{ 198*ba677afaSXin Li members: nil, 199*ba677afaSXin Li } 200*ba677afaSXin Li output = lic.ToLicenseString() 201*ba677afaSXin Li expectedOutput = "" 202*ba677afaSXin Li if output != expectedOutput { 203*ba677afaSXin Li t.Errorf("expected: %s, found %s", output, expectedOutput) 204*ba677afaSXin Li } 205*ba677afaSXin Li 206*ba677afaSXin Li // TestCase 2: single license in the set 207*ba677afaSXin Li lic = DisjunctiveLicenseSet{ 208*ba677afaSXin Li members: []AnyLicenseInfo{ 209*ba677afaSXin Li SpecialLicense{value: NOASSERTION}, 210*ba677afaSXin Li }, 211*ba677afaSXin Li } 212*ba677afaSXin Li output = lic.ToLicenseString() 213*ba677afaSXin Li expectedOutput = "NOASSERTION" 214*ba677afaSXin Li if output != expectedOutput { 215*ba677afaSXin Li t.Errorf("expected: %s, found %s", output, expectedOutput) 216*ba677afaSXin Li } 217*ba677afaSXin Li 218*ba677afaSXin Li // TestCase 3: more than one license in the set. 219*ba677afaSXin Li lic = DisjunctiveLicenseSet{ 220*ba677afaSXin Li members: []AnyLicenseInfo{ 221*ba677afaSXin Li SpecialLicense{value: NOASSERTION}, 222*ba677afaSXin Li SpecialLicense{value: NONE}, 223*ba677afaSXin Li }, 224*ba677afaSXin Li } 225*ba677afaSXin Li output = lic.ToLicenseString() 226*ba677afaSXin Li expectedOutput = "NOASSERTION OR NONE" 227*ba677afaSXin Li if output != expectedOutput { 228*ba677afaSXin Li t.Errorf("expected: %s, found %s", output, expectedOutput) 229*ba677afaSXin Li } 230*ba677afaSXin Li 231*ba677afaSXin Li // TestCase 4: nested conjunctive license. 232*ba677afaSXin Li lic = DisjunctiveLicenseSet{ 233*ba677afaSXin Li members: []AnyLicenseInfo{ 234*ba677afaSXin Li SpecialLicense{value: NOASSERTION}, 235*ba677afaSXin Li DisjunctiveLicenseSet{ 236*ba677afaSXin Li members: []AnyLicenseInfo{ 237*ba677afaSXin Li SpecialLicense{value: "LicenseRef-1"}, 238*ba677afaSXin Li SpecialLicense{value: NONE}, 239*ba677afaSXin Li }, 240*ba677afaSXin Li }, 241*ba677afaSXin Li }, 242*ba677afaSXin Li } 243*ba677afaSXin Li output = lic.ToLicenseString() 244*ba677afaSXin Li expectedOutput = "NOASSERTION OR LicenseRef-1 OR NONE" 245*ba677afaSXin Li if output != expectedOutput { 246*ba677afaSXin Li t.Errorf("expected: %s, found %s", output, expectedOutput) 247*ba677afaSXin Li } 248*ba677afaSXin Li} 249*ba677afaSXin Li 250*ba677afaSXin Lifunc TestExtractedLicensingInfo_ToLicenseString(t *testing.T) { 251*ba677afaSXin Li // nothing to test (just a dry run) 252*ba677afaSXin Li extractedLicense := ExtractedLicensingInfo{ 253*ba677afaSXin Li SimpleLicensingInfo: SimpleLicensingInfo{ 254*ba677afaSXin Li licenseID: "license", 255*ba677afaSXin Li }, 256*ba677afaSXin Li extractedText: "extracted Text", 257*ba677afaSXin Li } 258*ba677afaSXin Li expectedOutput := "license" 259*ba677afaSXin Li output := extractedLicense.ToLicenseString() 260*ba677afaSXin Li if output != expectedOutput { 261*ba677afaSXin Li t.Errorf("expected: %s, found: %s", expectedOutput, output) 262*ba677afaSXin Li } 263*ba677afaSXin Li} 264*ba677afaSXin Li 265*ba677afaSXin Lifunc TestOrLaterOperator_ToLicenseString(t *testing.T) { 266*ba677afaSXin Li // nothing to test (just a dry run) 267*ba677afaSXin Li orLater := OrLaterOperator{ 268*ba677afaSXin Li member: SimpleLicensingInfo{ 269*ba677afaSXin Li licenseID: "license", 270*ba677afaSXin Li }, 271*ba677afaSXin Li } 272*ba677afaSXin Li expectedOutput := "license" 273*ba677afaSXin Li output := orLater.ToLicenseString() 274*ba677afaSXin Li if output != expectedOutput { 275*ba677afaSXin Li t.Errorf("expected: %s, found: %s", expectedOutput, output) 276*ba677afaSXin Li } 277*ba677afaSXin Li} 278*ba677afaSXin Li 279*ba677afaSXin Lifunc TestLicense_ToLicenseString(t *testing.T) { 280*ba677afaSXin Li // nothing to test (just a dry run) 281*ba677afaSXin Li license := License{ 282*ba677afaSXin Li SimpleLicensingInfo: SimpleLicensingInfo{ 283*ba677afaSXin Li licenseID: "license", 284*ba677afaSXin Li }, 285*ba677afaSXin Li } 286*ba677afaSXin Li expectedOutput := "license" 287*ba677afaSXin Li output := license.ToLicenseString() 288*ba677afaSXin Li if output != expectedOutput { 289*ba677afaSXin Li t.Errorf("expected: %s, found: %s", expectedOutput, output) 290*ba677afaSXin Li } 291*ba677afaSXin Li} 292*ba677afaSXin Li 293*ba677afaSXin Lifunc TestListedLicense_ToLicenseString(t *testing.T) { 294*ba677afaSXin Li // nothing to test (just a dry run) 295*ba677afaSXin Li ll := ListedLicense{License{ 296*ba677afaSXin Li SimpleLicensingInfo: SimpleLicensingInfo{ 297*ba677afaSXin Li licenseID: "license", 298*ba677afaSXin Li }, 299*ba677afaSXin Li }, 300*ba677afaSXin Li } 301*ba677afaSXin Li expectedOutput := "license" 302*ba677afaSXin Li output := ll.ToLicenseString() 303*ba677afaSXin Li if output != expectedOutput { 304*ba677afaSXin Li t.Errorf("expected: %s, found: %s", expectedOutput, output) 305*ba677afaSXin Li } 306*ba677afaSXin Li} 307*ba677afaSXin Li 308*ba677afaSXin Lifunc TestWithExceptionOperator_ToLicenseString(t *testing.T) { 309*ba677afaSXin Li // nothing to test (just a dry run) 310*ba677afaSXin Li withException := WithExceptionOperator{ 311*ba677afaSXin Li member: SimpleLicensingInfo{ 312*ba677afaSXin Li licenseID: "license", 313*ba677afaSXin Li }, 314*ba677afaSXin Li licenseException: LicenseException{}, 315*ba677afaSXin Li } 316*ba677afaSXin Li expectedOutput := "license" 317*ba677afaSXin Li output := withException.ToLicenseString() 318*ba677afaSXin Li if output != expectedOutput { 319*ba677afaSXin Li t.Errorf("expected: %s, found: %s", expectedOutput, output) 320*ba677afaSXin Li } 321*ba677afaSXin Li} 322*ba677afaSXin Li 323*ba677afaSXin Lifunc TestSpecialLicense_ToLicenseString(t *testing.T) { 324*ba677afaSXin Li // nothing to test (just a dry run) 325*ba677afaSXin Li specialLicense := SpecialLicense{ 326*ba677afaSXin Li value: "license", 327*ba677afaSXin Li } 328*ba677afaSXin Li expectedOutput := "license" 329*ba677afaSXin Li output := specialLicense.ToLicenseString() 330*ba677afaSXin Li if output != expectedOutput { 331*ba677afaSXin Li t.Errorf("expected: %s, found: %s", expectedOutput, output) 332*ba677afaSXin Li } 333*ba677afaSXin Li} 334*ba677afaSXin Li 335*ba677afaSXin Lifunc TestSimpleLicensingInfo_ToLicenseString(t *testing.T) { 336*ba677afaSXin Li // nothing to test (just a dry run) 337*ba677afaSXin Li sli := SimpleLicensingInfo{ 338*ba677afaSXin Li licenseID: "license", 339*ba677afaSXin Li } 340*ba677afaSXin Li expectedOutput := "license" 341*ba677afaSXin Li output := sli.ToLicenseString() 342*ba677afaSXin Li if output != expectedOutput { 343*ba677afaSXin Li t.Errorf("expected: %s, found: %s", expectedOutput, output) 344*ba677afaSXin Li } 345*ba677afaSXin Li} 346