xref: /aosp_15_r20/external/spdx-tools/rdfloader/parser2v3/parse_package_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	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