xref: /aosp_15_r20/external/spdx-tools/rdfloader/parser2v3/license_utils_test.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
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