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