xref: /aosp_15_r20/external/spdx-tools/rdfloader/rdfloader_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 rdfloader
4*ba677afaSXin Li
5*ba677afaSXin Liimport (
6*ba677afaSXin Li	"io"
7*ba677afaSXin Li	"strings"
8*ba677afaSXin Li	"testing"
9*ba677afaSXin Li)
10*ba677afaSXin Li
11*ba677afaSXin Lifunc TestLoad2_2(t *testing.T) {
12*ba677afaSXin Li	var reader io.Reader
13*ba677afaSXin Li	var err error
14*ba677afaSXin Li
15*ba677afaSXin Li	// TestCase 1: invalid rdf/xml must raise an error
16*ba677afaSXin Li	reader = strings.NewReader("")
17*ba677afaSXin Li	_, err = Load2_2(reader)
18*ba677afaSXin Li	if err == nil {
19*ba677afaSXin Li		t.Errorf("expected an EOF error reading an empty file, got %v", err)
20*ba677afaSXin Li	}
21*ba677afaSXin Li
22*ba677afaSXin Li	// TestCase 2: Valid rdf/xml but invalid spdx document must raise an error
23*ba677afaSXin Li	reader = strings.NewReader(`
24*ba677afaSXin Li		<rdf:RDF
25*ba677afaSXin Li			xmlns:spdx="http://spdx.org/rdf/terms#"
26*ba677afaSXin Li			xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
27*ba677afaSXin Li			xmlns="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#">
28*ba677afaSXin Li		</rdf:RDF>
29*ba677afaSXin Li	`)
30*ba677afaSXin Li	_, err = Load2_2(reader)
31*ba677afaSXin Li	if err == nil {
32*ba677afaSXin Li		t.Errorf("expected an error due to no SpdxDocument Node in the document")
33*ba677afaSXin Li	}
34*ba677afaSXin Li}
35*ba677afaSXin Li
36*ba677afaSXin Lifunc TestLoad2_3(t *testing.T) {
37*ba677afaSXin Li	var reader io.Reader
38*ba677afaSXin Li	var err error
39*ba677afaSXin Li
40*ba677afaSXin Li	// TestCase 1: invalid rdf/xml must raise an error
41*ba677afaSXin Li	reader = strings.NewReader("")
42*ba677afaSXin Li	_, err = Load2_3(reader)
43*ba677afaSXin Li	if err == nil {
44*ba677afaSXin Li		t.Errorf("expected an EOF error reading an empty file, got %v", err)
45*ba677afaSXin Li	}
46*ba677afaSXin Li
47*ba677afaSXin Li	// TestCase 2: Valid rdf/xml but invalid spdx document must raise an error
48*ba677afaSXin Li	reader = strings.NewReader(`
49*ba677afaSXin Li		<rdf:RDF
50*ba677afaSXin Li			xmlns:spdx="http://spdx.org/rdf/terms#"
51*ba677afaSXin Li			xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
52*ba677afaSXin Li			xmlns="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#">
53*ba677afaSXin Li		</rdf:RDF>
54*ba677afaSXin Li	`)
55*ba677afaSXin Li	_, err = Load2_3(reader)
56*ba677afaSXin Li	if err == nil {
57*ba677afaSXin Li		t.Errorf("expected an error due to no SpdxDocument Node in the document")
58*ba677afaSXin Li	}
59*ba677afaSXin Li
60*ba677afaSXin Li	// TestCase 3: New SPDX package elements
61*ba677afaSXin Li	reader = strings.NewReader(`
62*ba677afaSXin Li		<rdf:RDF
63*ba677afaSXin Li			xmlns:spdx="http://spdx.org/rdf/terms#"
64*ba677afaSXin Li			xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
65*ba677afaSXin Li			xmlns="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#"
66*ba677afaSXin Li			xmlns:doap="http://usefulinc.com/ns/doap#"
67*ba677afaSXin Li			xmlns:j.0="http://www.w3.org/2009/pointers#"
68*ba677afaSXin Li			xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
69*ba677afaSXin Li			<spdx:SpdxDocument rdf:about="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DOCUMENT">
70*ba677afaSXin Li				<spdx:specVersion>SPDX-2.0</spdx:specVersion>
71*ba677afaSXin Li				<spdx:relationship>
72*ba677afaSXin Li					<spdx:Relationship>
73*ba677afaSXin Li						<spdx:relationshipType rdf:resource="http://spdx.org/rdf/terms#relationshipType_describes"/>
74*ba677afaSXin Li						<spdx:relatedSpdxElement>
75*ba677afaSXin Li							<spdx:Package rdf:about="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-Saxon">
76*ba677afaSXin Li								<spdx:name>Some-Package</spdx:name>
77*ba677afaSXin Li								<spdx:primaryPackagePurpose rdf:resource="packagePurpose_container" />
78*ba677afaSXin Li								<spdx:releaseDate>2021-10-15T02:38:00Z</spdx:releaseDate>
79*ba677afaSXin Li								<spdx:builtDate>2021-09-15T02:38:00Z</spdx:builtDate>
80*ba677afaSXin Li								<spdx:validUntilDate>2022-10-15T02:38:00Z</spdx:validUntilDate>
81*ba677afaSXin Li							</spdx:Package>
82*ba677afaSXin Li						</spdx:relatedSpdxElement>
83*ba677afaSXin Li					</spdx:Relationship>
84*ba677afaSXin Li				</spdx:relationship>
85*ba677afaSXin Li			</spdx:SpdxDocument>
86*ba677afaSXin Li		</rdf:RDF>
87*ba677afaSXin Li	`)
88*ba677afaSXin Li
89*ba677afaSXin Li	doc, err := Load2_3(reader)
90*ba677afaSXin Li	if err != nil {
91*ba677afaSXin Li		t.Errorf("expected valid SPDX document: %v", err)
92*ba677afaSXin Li	}
93*ba677afaSXin Li
94*ba677afaSXin Li	if doc == nil {
95*ba677afaSXin Li		t.Fatalf("expected valid SPDX document but got nil")
96*ba677afaSXin Li	}
97*ba677afaSXin Li
98*ba677afaSXin Li	if len(doc.Packages) == 0 {
99*ba677afaSXin Li		t.Errorf("expected packages but got none")
100*ba677afaSXin Li	}
101*ba677afaSXin Li
102*ba677afaSXin Li	pkg := doc.Packages[0]
103*ba677afaSXin Li	if pkg.PackageName != "Some-Package" {
104*ba677afaSXin Li		t.Errorf("expected package nameof Some-Package but got: %s", pkg.PackageName)
105*ba677afaSXin Li	}
106*ba677afaSXin Li	if pkg.PrimaryPackagePurpose != "CONTAINER" {
107*ba677afaSXin Li		t.Errorf("expected package primary purpose of CONTAINER but got: %s", pkg.PrimaryPackagePurpose)
108*ba677afaSXin Li	}
109*ba677afaSXin Li	if pkg.ReleaseDate != "2021-10-15T02:38:00Z" {
110*ba677afaSXin Li		t.Errorf("expected release date of 2021-10-15T02:38:00Z but got: %s", pkg.ReleaseDate)
111*ba677afaSXin Li	}
112*ba677afaSXin Li	if pkg.BuiltDate != "2021-09-15T02:38:00Z" {
113*ba677afaSXin Li		t.Errorf("expected built date of 2021-09-15T02:38:00Z but got: %s", pkg.BuiltDate)
114*ba677afaSXin Li	}
115*ba677afaSXin Li	if pkg.ValidUntilDate != "2022-10-15T02:38:00Z" {
116*ba677afaSXin Li		t.Errorf("expected valid until date of 2022-10-15T02:38:00Z but got: %s", pkg.ValidUntilDate)
117*ba677afaSXin Li	}
118*ba677afaSXin Li}
119