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