xref: /aosp_15_r20/external/spdx-tools/rdfloader/parser2v2/parser_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	"testing"
7*ba677afaSXin Li)
8*ba677afaSXin Li
9*ba677afaSXin Lifunc TestNewParser2_2(t *testing.T) {
10*ba677afaSXin Li	// testing if the attributes are initialised well and no top-level is left uninitialized.
11*ba677afaSXin Li	// primarily, checking if all the maps are initialized because
12*ba677afaSXin Li	// uninitialized slices are by default slices of length 0
13*ba677afaSXin Li	p, _ := parserFromBodyContent(``)
14*ba677afaSXin Li	parser := NewParser2_2(p.gordfParserObj, p.nodeStringToTriples)
15*ba677afaSXin Li	if parser.files == nil {
16*ba677afaSXin Li		t.Errorf("files should've been initialised, got %v", parser.files)
17*ba677afaSXin Li	}
18*ba677afaSXin Li	if parser.assocWithPackage == nil {
19*ba677afaSXin Li		t.Errorf("assocWithPackage should've been initialised, got %v", parser.assocWithPackage)
20*ba677afaSXin Li	}
21*ba677afaSXin Li	if parser.doc.CreationInfo == nil {
22*ba677afaSXin Li		t.Errorf("doc.CreationInfo should've been initialised, got %v", parser.doc.CreationInfo)
23*ba677afaSXin Li	}
24*ba677afaSXin Li	if parser.doc.Packages == nil {
25*ba677afaSXin Li		t.Errorf("doc.Packages should've been initialised, got %v", parser.doc.Packages)
26*ba677afaSXin Li	}
27*ba677afaSXin Li	if parser.doc.Files == nil {
28*ba677afaSXin Li		t.Errorf("doc.Files should've been initialised, got %v", parser.doc.Files)
29*ba677afaSXin Li	}
30*ba677afaSXin Li}
31*ba677afaSXin Li
32*ba677afaSXin Lifunc TestLoadFromGoRDFParser(t *testing.T) {
33*ba677afaSXin Li	var parser *rdfParser2_2
34*ba677afaSXin Li	var err error
35*ba677afaSXin Li
36*ba677afaSXin Li	// TestCase 1: gordfparser without a SpdxDocument node triple:
37*ba677afaSXin Li	parser, _ = parserFromBodyContent("")
38*ba677afaSXin Li	_, err = LoadFromGoRDFParser(parser.gordfParserObj)
39*ba677afaSXin Li	if err == nil {
40*ba677afaSXin Li		t.Errorf("expected an error because of absence of SpdxDocument node, got %v", err)
41*ba677afaSXin Li	}
42*ba677afaSXin Li
43*ba677afaSXin Li	// TestCase 2: invalid SpdxDocumentNode
44*ba677afaSXin Li	parser, _ = parserFromBodyContent(`
45*ba677afaSXin Li		<spdx:SpdxDocument rdf:about="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301/Document">
46*ba677afaSXin Li			<spdx:invalidTag />
47*ba677afaSXin Li		</spdx:SpdxDocument>
48*ba677afaSXin Li	`)
49*ba677afaSXin Li	_, err = LoadFromGoRDFParser(parser.gordfParserObj)
50*ba677afaSXin Li	if err == nil {
51*ba677afaSXin Li		t.Errorf("expected an error because of absence of SpdxDocument node, got %v", err)
52*ba677afaSXin Li	}
53*ba677afaSXin Li
54*ba677afaSXin Li	// TestCase 3: >1 type triples for subnode of a SpdxDocument:
55*ba677afaSXin Li	parser, _ = parserFromBodyContent(`
56*ba677afaSXin Li		<spdx:SpdxDocument rdf:about="#SPDXRef-Document"/>
57*ba677afaSXin Li		<spdx:Snippet rdf:about="#Snippet"/>
58*ba677afaSXin Li		<spdx:CreationInfo rdf:about="#Snippet"/>
59*ba677afaSXin Li	`)
60*ba677afaSXin Li	_, err = LoadFromGoRDFParser(parser.gordfParserObj)
61*ba677afaSXin Li	if err == nil {
62*ba677afaSXin Li		t.Errorf("expected an error due to more than one type triples, got %v", err)
63*ba677afaSXin Li	}
64*ba677afaSXin Li
65*ba677afaSXin Li	// TestCase 4: invalid snippet must raise an error.
66*ba677afaSXin Li	parser, _ = parserFromBodyContent(`
67*ba677afaSXin Li		<spdx:SpdxDocument rdf:about="#SPDXRef-Document"/>
68*ba677afaSXin Li		<spdx:Snippet rdf:about="#Snippet"/>
69*ba677afaSXin Li	`)
70*ba677afaSXin Li	_, err = LoadFromGoRDFParser(parser.gordfParserObj)
71*ba677afaSXin Li	if err == nil {
72*ba677afaSXin Li		t.Errorf("expected an error due to invalid Snippet, got %v", err)
73*ba677afaSXin Li	}
74*ba677afaSXin Li
75*ba677afaSXin Li	// TestCase 5: invalid snippet not associated with any File must raise an error.
76*ba677afaSXin Li	parser, _ = parserFromBodyContent(`
77*ba677afaSXin Li		<spdx:SpdxDocument rdf:about="#SPDXRef-Document"/>
78*ba677afaSXin Li		<spdx:Snippet rdf:about="#SPDXRef-Snippet"/>
79*ba677afaSXin Li	`)
80*ba677afaSXin Li	_, err = LoadFromGoRDFParser(parser.gordfParserObj)
81*ba677afaSXin Li	if err == nil {
82*ba677afaSXin Li		t.Errorf("expected an error due to invalid Snippet File, got %v", err)
83*ba677afaSXin Li	}
84*ba677afaSXin Li
85*ba677afaSXin Li	// TestCase 6: other Tag alongwith the SpdxDocument node mustn't raise any error.
86*ba677afaSXin Li	parser, _ = parserFromBodyContent(`
87*ba677afaSXin Li		<spdx:SpdxDocument rdf:about="#SPDXRef-Document"/>
88*ba677afaSXin Li		<spdx:review/>
89*ba677afaSXin Li	`)
90*ba677afaSXin Li	_, err = LoadFromGoRDFParser(parser.gordfParserObj)
91*ba677afaSXin Li	if err != nil {
92*ba677afaSXin Li		t.Errorf("unexpected error: %v", err)
93*ba677afaSXin Li	}
94*ba677afaSXin Li
95*ba677afaSXin Li	// TestCase 5: everything valid:
96*ba677afaSXin Li	parser, _ = parserFromBodyContent(`
97*ba677afaSXin Li		<spdx:SpdxDocument rdf:about="#SPDXRef-Document"/>
98*ba677afaSXin Li		<spdx:Snippet rdf:about="#SPDXRef-Snippet">
99*ba677afaSXin Li			<spdx:name>from linux kernel</spdx:name>
100*ba677afaSXin Li			<spdx:copyrightText>Copyright 2008-2010 John Smith</spdx:copyrightText>
101*ba677afaSXin Li			<spdx:licenseComments>The concluded license was taken from package xyz, from which the snippet was copied into the current file. The concluded license information was found in the COPYING.txt file in package xyz.</spdx:licenseComments>
102*ba677afaSXin Li			<spdx:snippetFromFile>
103*ba677afaSXin Li				<spdx:File rdf:about="#SPDXRef-DoapSource">
104*ba677afaSXin Li					<spdx:copyrightText>Copyright 2010, 2011 Source Auditor Inc.</spdx:copyrightText>
105*ba677afaSXin Li					<spdx:fileContributor>Open Logic Inc.</spdx:fileContributor>
106*ba677afaSXin Li					<spdx:fileName>./src/org/spdx/parser/DOAPProject.java</spdx:fileName>
107*ba677afaSXin Li					<spdx:fileContributor>Black Duck Software In.c</spdx:fileContributor>
108*ba677afaSXin Li					<spdx:fileType rdf:resource="http://spdx.org/rdf/terms#fileType_source"/>
109*ba677afaSXin Li					<spdx:licenseInfoInFile rdf:resource="http://spdx.org/licenses/Apache-2.0"/>
110*ba677afaSXin Li				</spdx:File>
111*ba677afaSXin Li			</spdx:snippetFromFile>
112*ba677afaSXin Li		</spdx:Snippet>
113*ba677afaSXin Li	`)
114*ba677afaSXin Li	_, err = LoadFromGoRDFParser(parser.gordfParserObj)
115*ba677afaSXin Li	if err != nil {
116*ba677afaSXin Li		t.Errorf("error parsing a valid example: %v", err)
117*ba677afaSXin Li	}
118*ba677afaSXin Li}
119*ba677afaSXin Li
120*ba677afaSXin Lifunc Test_rdfParser2_2_getSpdxDocNode(t *testing.T) {
121*ba677afaSXin Li	var parser *rdfParser2_2
122*ba677afaSXin Li	var err error
123*ba677afaSXin Li
124*ba677afaSXin Li	// TestCase 1: more than one association type for a single node.
125*ba677afaSXin Li	parser, _ = parserFromBodyContent(`
126*ba677afaSXin Li		<spdx:SpdxDocument rdf:about="#SPDXRef-Document"/>
127*ba677afaSXin Li		<spdx:Snippet rdf:about="#SPDXRef-Document"/>
128*ba677afaSXin Li	`)
129*ba677afaSXin Li	_, err = parser.getSpdxDocNode()
130*ba677afaSXin Li	t.Log(err)
131*ba677afaSXin Li	if err == nil {
132*ba677afaSXin Li		t.Errorf("expected and error due to more than one type triples for the SpdxDocument Node, got %v", err)
133*ba677afaSXin Li	}
134*ba677afaSXin Li
135*ba677afaSXin Li	// TestCase 2: must be associated with exactly one rdf:type.
136*ba677afaSXin Li	parser, _ = parserFromBodyContent(`
137*ba677afaSXin Li		<spdx:SpdxDocument rdf:about="#SPDXRef-Document"/>
138*ba677afaSXin Li		<spdx:Snippet rdf:about="#SPDXRef-Document"/>
139*ba677afaSXin Li		<spdx:File rdf:about="#SPDXRef-DoapSource"/>
140*ba677afaSXin Li	`)
141*ba677afaSXin Li	_, err = parser.getSpdxDocNode()
142*ba677afaSXin Li	t.Log(err)
143*ba677afaSXin Li	if err == nil {
144*ba677afaSXin Li		t.Errorf("rootNode  must be associated with exactly one triple of predicate rdf:type, got %v", err)
145*ba677afaSXin Li	}
146*ba677afaSXin Li
147*ba677afaSXin Li	// TestCase 3: two different spdx nodes found in a single document.
148*ba677afaSXin Li	parser, _ = parserFromBodyContent(`
149*ba677afaSXin Li		<spdx:SpdxDocument rdf:about="#SPDXRef-Document-1"/>
150*ba677afaSXin Li		<spdx:SpdxDocument rdf:about="#SPDXRef-Document-2"/>
151*ba677afaSXin Li	`)
152*ba677afaSXin Li	_, err = parser.getSpdxDocNode()
153*ba677afaSXin Li	if err == nil {
154*ba677afaSXin Li		t.Errorf("expected and error due to more than one type SpdxDocument Node, got %v", err)
155*ba677afaSXin Li	}
156*ba677afaSXin Li
157*ba677afaSXin Li	// TestCase 4: no spdx document
158*ba677afaSXin Li	parser, _ = parserFromBodyContent(``)
159*ba677afaSXin Li	_, err = parser.getSpdxDocNode()
160*ba677afaSXin Li	if err == nil {
161*ba677afaSXin Li		t.Errorf("expected and error due to no SpdxDocument Node, got %v", err)
162*ba677afaSXin Li	}
163*ba677afaSXin Li
164*ba677afaSXin Li	// TestCase 5: valid spdxDocument node
165*ba677afaSXin Li	parser, _ = parserFromBodyContent(`
166*ba677afaSXin Li		<spdx:SpdxDocument rdf:about="#SPDXRef-Document-1"/>
167*ba677afaSXin Li	`)
168*ba677afaSXin Li	_, err = parser.getSpdxDocNode()
169*ba677afaSXin Li	if err != nil {
170*ba677afaSXin Li		t.Errorf("unexpected error: %v", err)
171*ba677afaSXin Li	}
172*ba677afaSXin Li}
173