xref: /aosp_15_r20/external/spdx-tools/rdfloader/parser2v2/parse_spdx_document_test.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
1// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2
3package parser2v2
4
5import (
6	"testing"
7
8	gordfParser "github.com/spdx/gordf/rdfloader/parser"
9)
10
11func Test_rdfParser2_2_getExternalDocumentRefFromNode(t *testing.T) {
12	var parser *rdfParser2_2
13	var node *gordfParser.Node
14	var err error
15
16	// TestCase 1: invalid checksum
17	parser, _ = parserFromBodyContent(`
18		<spdx:ExternalDocumentRef>
19			<spdx:externalDocumentId>DocumentRef-spdx-tool-1.2</spdx:externalDocumentId>
20			<spdx:checksum>
21				<spdx:Checksum>
22					<spdx:checksumValue>d6a770ba38583ed4bb4525bd96e50461655d2759</spdx:checksumValue>
23					<spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha999"/>
24				</spdx:Checksum>
25			</spdx:checksum>
26			<spdx:spdxDocument rdf:resource="http://spdx.org/spdxdocs/spdx-tools-v1.2-3F2504E0-4F89-41D3-9A0C-0305E82C3301"/>
27		</spdx:ExternalDocumentRef>
28	`)
29	node = parser.gordfParserObj.Triples[0].Subject
30	_, err = parser.getExternalDocumentRefFromNode(node)
31	if err == nil {
32		t.Errorf("expected an error due to invalid checksum, found %v", err)
33	}
34
35	// TestCase 2: unknown predicate
36	parser, _ = parserFromBodyContent(`
37		<spdx:ExternalDocumentRef>
38			<spdx:unknownTag />
39		</spdx:ExternalDocumentRef>
40	`)
41	node = parser.gordfParserObj.Triples[0].Subject
42	_, err = parser.getExternalDocumentRefFromNode(node)
43	if err == nil {
44		t.Errorf("expected an error due to invalid predicate, found %v", err)
45	}
46
47	// TestCase 3: valid example
48	parser, _ = parserFromBodyContent(`
49		<spdx:ExternalDocumentRef>
50			<spdx:externalDocumentId>DocumentRef-spdx-tool-1.2</spdx:externalDocumentId>
51			<spdx:checksum>
52				<spdx:Checksum>
53					<spdx:checksumValue>d6a770ba38583ed4bb4525bd96e50461655d2759</spdx:checksumValue>
54					<spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha256"/>
55				</spdx:Checksum>
56			</spdx:checksum>
57			<spdx:spdxDocument rdf:resource="http://spdx.org/spdxdocs/spdx-tools-v1.2-3F2504E0-4F89-41D3-9A0C-0305E82C3301"/>
58		</spdx:ExternalDocumentRef>
59	`)
60	node = parser.gordfParserObj.Triples[0].Subject
61	_, err = parser.getExternalDocumentRefFromNode(node)
62	if err != nil {
63		t.Errorf("unexpected error: %v", err)
64	}
65}
66
67func Test_rdfParser2_2_parseSpdxDocumentNode(t *testing.T) {
68	var parser *rdfParser2_2
69	var node *gordfParser.Node
70	var err error
71
72	// TestCase 1: invalid spdx id of the document
73	parser, _ = parserFromBodyContent(`
74		<spdx:SpdxDocument rdf:about="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301/Document"/>
75	`)
76	node = parser.gordfParserObj.Triples[0].Subject
77	err = parser.parseSpdxDocumentNode(node)
78	if err == nil {
79		t.Errorf("expected an error due to invalid document id, got %v", err)
80	}
81
82	// TestCase 2: erroneous dataLicense
83	parser, _ = parserFromBodyContent(`
84		<spdx:SpdxDocument rdf:about="#SPDXRef-Document">
85			<spdx:dataLicense rdf:resource="http://spdx.org/rdf/terms#Unknown" />
86		</spdx:SpdxDocument>
87	`)
88	node = parser.gordfParserObj.Triples[0].Subject
89	err = parser.parseSpdxDocumentNode(node)
90	if err == nil {
91		t.Errorf("expected an error due to invalid dataLicense, got %v", err)
92	}
93
94	// TestCase 3: invalid external document ref
95	parser, _ = parserFromBodyContent(`
96		<spdx:SpdxDocument rdf:about="#SPDXRef-Document">
97			<spdx:externalDocumentRef>
98				<spdx:ExternalDocumentRef>
99					<spdx:externalDocumentId>DocumentRef-spdx-tool-1.2</spdx:externalDocumentId>
100					<spdx:checksum>
101						<spdx:Checksum>
102							<spdx:checksumValue>d6a770ba38583ed4bb4525bd96e50461655d2759</spdx:checksumValue>
103							<spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha999"/>
104						</spdx:Checksum>
105					</spdx:checksum>
106					<spdx:spdxDocument rdf:resource="http://spdx.org/spdxdocs/spdx-tools-v1.2-3F2504E0-4F89-41D3-9A0C-0305E82C3301"/>
107				</spdx:ExternalDocumentRef>
108        </spdx:externalDocumentRef>
109		</spdx:SpdxDocument>
110	`)
111	node = parser.gordfParserObj.Triples[0].Subject
112	err = parser.parseSpdxDocumentNode(node)
113	if err == nil {
114		t.Errorf("expected an error due to invalid externalDocumentRef, got %v", err)
115	}
116
117	// TestCase 4: invalid package
118	parser, _ = parserFromBodyContent(`
119		<spdx:SpdxDocument rdf:about="#SPDXRef-Document">
120			<spdx:describesPackage>
121				<spdx:Package rdf:about="http://www.spdx.org/spdxdocs/8f141b09-1138-4fc5-aecb-fc10d9ac1eed#SPDX-1"/>
122			</spdx:describesPackage>
123		</spdx:SpdxDocument>
124	`)
125	node = parser.gordfParserObj.Triples[0].Subject
126	err = parser.parseSpdxDocumentNode(node)
127	if err == nil {
128		t.Errorf("expected an error due to invalid externalDocumentRef, got %v", err)
129	}
130
131	// TestCase 5: error in extractedLicensingInfo
132	parser, _ = parserFromBodyContent(`
133		<spdx:SpdxDocument rdf:about="#SPDXRef-Document">
134			<spdx:hasExtractedLicensingInfo>
135				<spdx:ExtractedLicensingInfo rdf:about="#LicenseRef-Freeware">
136					<spdx:invalidTag />
137					<spdx:licenseId>LicenseRef-Freeware</spdx:licenseId>
138					<spdx:name>freeware</spdx:name>
139					<spdx:extractedText>
140<![CDATA[Software classified as freeware is licensed at no cost and is either fully functional for an unlimited time; or has only basic functions enabled with a fully functional version available commercially or as shareware.[8] In contrast to free software, the author usually restricts one or more rights of the user, including the rights to use, copy, distribute, modify and make derivative works of the software or extract the source code.[1][2][9][10] The software license may impose various additional restrictions on the type of use, e.g. only for personal use, private use, individual use, non-profit use, non-commercial use, academic use, educational use, use in charity or humanitarian organizations, non-military use, use by public authorities or various other combinations of these type of restrictions.[11] For instance, the license may be "free for private, non-commercial use". The software license may also impose various other restrictions, such as restricted use over a network, restricted use on a server, restricted use in a combination with some types of other software or with some hardware devices, prohibited distribution over the Internet other than linking to author's website, restricted distribution without author's consent, restricted number of copies, etc.]]>
141					</spdx:extractedText>
142				</spdx:ExtractedLicensingInfo>
143			</spdx:hasExtractedLicensingInfo>
144		</spdx:SpdxDocument>
145	`)
146	node = parser.gordfParserObj.Triples[0].Subject
147	err = parser.parseSpdxDocumentNode(node)
148	if err == nil {
149		t.Errorf("expected an error due to invalid extractedLicensingInfo, got %v", err)
150	}
151
152	// TestCase 6: error in annotation
153	parser, _ = parserFromBodyContent(`
154		<spdx:SpdxDocument rdf:about="#SPDXRef-Document">
155			<spdx:annotation>
156				<spdx:Annotation>
157					<spdx:unknownAttribute />
158				</spdx:Annotation>
159			</spdx:annotation>
160		</spdx:SpdxDocument>
161	`)
162	node = parser.gordfParserObj.Triples[0].Subject
163	err = parser.parseSpdxDocumentNode(node)
164	if err == nil {
165		t.Errorf("expected an error due to invalid extractedLicensingInfo, got %v", err)
166	}
167
168	// TestCase 7: invalid predicate
169	parser, _ = parserFromBodyContent(`
170		<spdx:SpdxDocument rdf:about="#SPDXRef-Document">
171			<spdx:unknownTag />
172		</spdx:SpdxDocument>
173	`)
174	node = parser.gordfParserObj.Triples[0].Subject
175	err = parser.parseSpdxDocumentNode(node)
176	if err == nil {
177		t.Errorf("expected an error due to unknown predicate, got %v", err)
178	}
179
180	// TestCase 7: everything valid
181	parser, _ = parserFromBodyContent(`
182		<spdx:SpdxDocument rdf:about="#SPDXRef-Document">
183			<spdx:specVersion>SPDX-2.1</spdx:specVersion>
184    		<spdx:dataLicense rdf:resource="http://spdx.org/licenses/CC0-1.0" />
185			<spdx:name>/test/example</spdx:name>
186			<spdx:externalDocumentRef>
187				<spdx:ExternalDocumentRef>
188					<spdx:externalDocumentId>DocumentRef-spdx-tool-1.2</spdx:externalDocumentId>
189					<spdx:checksum>
190						<spdx:Checksum>
191							<spdx:checksumValue>d6a770ba38583ed4bb4525bd96e50461655d2759</spdx:checksumValue>
192							<spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha1"/>
193						</spdx:Checksum>
194					</spdx:checksum>
195					<spdx:spdxDocument rdf:resource="http://spdx.org/spdxdocs/spdx-tools-v1.2-3F2504E0-4F89-41D3-9A0C-0305E82C3301"/>
196				</spdx:ExternalDocumentRef>
197			</spdx:externalDocumentRef>
198			<spdx:creationInfo>
199			    <spdx:CreationInfo>
200					<spdx:licenseListVersion>2.6</spdx:licenseListVersion>
201					<spdx:creator>Person: spdx (y)</spdx:creator>
202					<spdx:creator>Organization: </spdx:creator>
203					<spdx:creator>Tool: spdx2</spdx:creator>
204					<spdx:created>2018-08-24T19:55:34Z</spdx:created>
205			    </spdx:CreationInfo>
206			</spdx:creationInfo>
207    		<rdfs:comment>test</rdfs:comment>
208			<spdx:reviewed>
209				<spdx:Review>
210					<rdfs:comment>Another example reviewer.</rdfs:comment>
211					<spdx:reviewDate>2011-03-13T00:00:00Z</spdx:reviewDate>
212					<spdx:reviewer>Person: Suzanne Reviewer</spdx:reviewer>
213				</spdx:Review>
214	        </spdx:reviewed>
215			<spdx:describesPackage>
216				<spdx:Package rdf:about="#SPDXRef-1"/>
217			</spdx:describesPackage>
218			<spdx:hasExtractedLicensingInfo rdf:resource="http://spdx.org/licenses/CC0-1.0"/>
219			<spdx:relationship>
220				<spdx:Relationship>
221					<spdx:relationshipType rdf:resource="http://spdx.org/rdf/terms#relationshipType_containedBy"/>
222					<spdx:relatedSpdxElement rdf:resource="http://spdx.org/documents/spdx-toolsv2.1.7-SNAPSHOT#SPDXRef-1"/>
223					<rdfs:comment></rdfs:comment>
224				</spdx:Relationship>
225			</spdx:relationship>
226			<spdx:annotation>
227				<spdx:Annotation>
228					<spdx:annotationDate>2011-01-29T18:30:22Z</spdx:annotationDate>
229					<rdfs:comment>test annotation</rdfs:comment>
230					<spdx:annotator>Person: Rishabh Bhatnagar</spdx:annotator>
231					<spdx:annotationType rdf:resource="http://spdx.org/rdf/terms#annotationType_other"/>
232				</spdx:Annotation>
233			</spdx:annotation>
234		</spdx:SpdxDocument>
235	`)
236	node = parser.gordfParserObj.Triples[0].Subject
237	err = parser.parseSpdxDocumentNode(node)
238	if err != nil {
239		t.Errorf("unexpected error: %v", err)
240	}
241}
242