xref: /aosp_15_r20/external/spdx-tools/spdxlib/documents_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 spdxlib
4*ba677afaSXin Li
5*ba677afaSXin Liimport (
6*ba677afaSXin Li	"testing"
7*ba677afaSXin Li
8*ba677afaSXin Li	"github.com/spdx/tools-golang/spdx/common"
9*ba677afaSXin Li	"github.com/spdx/tools-golang/spdx/v2_1"
10*ba677afaSXin Li	"github.com/spdx/tools-golang/spdx/v2_2"
11*ba677afaSXin Li	"github.com/spdx/tools-golang/spdx/v2_3"
12*ba677afaSXin Li)
13*ba677afaSXin Li
14*ba677afaSXin Li// ===== 2.1 tests =====
15*ba677afaSXin Li
16*ba677afaSXin Lifunc Test2_1ValidDocumentPassesValidation(t *testing.T) {
17*ba677afaSXin Li	// set up document and some packages and relationships
18*ba677afaSXin Li	doc := &v2_1.Document{
19*ba677afaSXin Li		SPDXVersion:    "SPDX-2.1",
20*ba677afaSXin Li		DataLicense:    "CC0-1.0",
21*ba677afaSXin Li		SPDXIdentifier: common.ElementID("DOCUMENT"),
22*ba677afaSXin Li		CreationInfo:   &v2_1.CreationInfo{},
23*ba677afaSXin Li		Packages: []*v2_1.Package{
24*ba677afaSXin Li			{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
25*ba677afaSXin Li			{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
26*ba677afaSXin Li			{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
27*ba677afaSXin Li			{PackageName: "pkg4", PackageSPDXIdentifier: "p4"},
28*ba677afaSXin Li			{PackageName: "pkg5", PackageSPDXIdentifier: "p5"},
29*ba677afaSXin Li		},
30*ba677afaSXin Li		Relationships: []*v2_1.Relationship{
31*ba677afaSXin Li			{
32*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "DOCUMENT"),
33*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p1"),
34*ba677afaSXin Li				Relationship: "DESCRIBES",
35*ba677afaSXin Li			},
36*ba677afaSXin Li			{
37*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "DOCUMENT"),
38*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p5"),
39*ba677afaSXin Li				Relationship: "DESCRIBES",
40*ba677afaSXin Li			},
41*ba677afaSXin Li			// inverse relationship -- should also get detected
42*ba677afaSXin Li			{
43*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "p4"),
44*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "DOCUMENT"),
45*ba677afaSXin Li				Relationship: "DESCRIBED_BY",
46*ba677afaSXin Li			},
47*ba677afaSXin Li			// different relationship
48*ba677afaSXin Li			{
49*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "p1"),
50*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p2"),
51*ba677afaSXin Li				Relationship: "DEPENDS_ON",
52*ba677afaSXin Li			},
53*ba677afaSXin Li		},
54*ba677afaSXin Li	}
55*ba677afaSXin Li
56*ba677afaSXin Li	err := ValidateDocument2_1(doc)
57*ba677afaSXin Li	if err != nil {
58*ba677afaSXin Li		t.Fatalf("expected nil error, got: %s", err.Error())
59*ba677afaSXin Li	}
60*ba677afaSXin Li}
61*ba677afaSXin Li
62*ba677afaSXin Lifunc Test2_1InvalidDocumentFailsValidation(t *testing.T) {
63*ba677afaSXin Li	// set up document and some packages and relationships
64*ba677afaSXin Li	doc := &v2_1.Document{
65*ba677afaSXin Li		SPDXVersion:    "SPDX-2.1",
66*ba677afaSXin Li		DataLicense:    "CC0-1.0",
67*ba677afaSXin Li		SPDXIdentifier: common.ElementID("DOCUMENT"),
68*ba677afaSXin Li		CreationInfo:   &v2_1.CreationInfo{},
69*ba677afaSXin Li		Packages: []*v2_1.Package{
70*ba677afaSXin Li			{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
71*ba677afaSXin Li			{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
72*ba677afaSXin Li			{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
73*ba677afaSXin Li		},
74*ba677afaSXin Li		Relationships: []*v2_1.Relationship{
75*ba677afaSXin Li			{
76*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "DOCUMENT"),
77*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p1"),
78*ba677afaSXin Li				Relationship: "DESCRIBES",
79*ba677afaSXin Li			},
80*ba677afaSXin Li			{
81*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "DOCUMENT"),
82*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p2"),
83*ba677afaSXin Li				Relationship: "DESCRIBES",
84*ba677afaSXin Li			},
85*ba677afaSXin Li			// invalid ID p99
86*ba677afaSXin Li			{
87*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "p1"),
88*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p99"),
89*ba677afaSXin Li				Relationship: "DEPENDS_ON",
90*ba677afaSXin Li			},
91*ba677afaSXin Li		},
92*ba677afaSXin Li	}
93*ba677afaSXin Li
94*ba677afaSXin Li	err := ValidateDocument2_1(doc)
95*ba677afaSXin Li	if err == nil {
96*ba677afaSXin Li		t.Fatalf("expected non-nil error, got nil")
97*ba677afaSXin Li	}
98*ba677afaSXin Li}
99*ba677afaSXin Li
100*ba677afaSXin Li// ===== 2.2 tests =====
101*ba677afaSXin Li
102*ba677afaSXin Lifunc Test2_2ValidDocumentPassesValidation(t *testing.T) {
103*ba677afaSXin Li	// set up document and some packages and relationships
104*ba677afaSXin Li	doc := &v2_2.Document{
105*ba677afaSXin Li		SPDXVersion:    "SPDX-2.1",
106*ba677afaSXin Li		DataLicense:    "CC0-1.0",
107*ba677afaSXin Li		SPDXIdentifier: common.ElementID("DOCUMENT"),
108*ba677afaSXin Li		CreationInfo:   &v2_2.CreationInfo{},
109*ba677afaSXin Li		Packages: []*v2_2.Package{
110*ba677afaSXin Li			{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
111*ba677afaSXin Li			{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
112*ba677afaSXin Li			{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
113*ba677afaSXin Li			{PackageName: "pkg4", PackageSPDXIdentifier: "p4"},
114*ba677afaSXin Li			{PackageName: "pkg5", PackageSPDXIdentifier: "p5"},
115*ba677afaSXin Li		},
116*ba677afaSXin Li		Relationships: []*v2_2.Relationship{
117*ba677afaSXin Li			{
118*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "DOCUMENT"),
119*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p1"),
120*ba677afaSXin Li				Relationship: "DESCRIBES",
121*ba677afaSXin Li			},
122*ba677afaSXin Li			{
123*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "DOCUMENT"),
124*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p5"),
125*ba677afaSXin Li				Relationship: "DESCRIBES",
126*ba677afaSXin Li			},
127*ba677afaSXin Li			// inverse relationship -- should also get detected
128*ba677afaSXin Li			{
129*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "p4"),
130*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "DOCUMENT"),
131*ba677afaSXin Li				Relationship: "DESCRIBED_BY",
132*ba677afaSXin Li			},
133*ba677afaSXin Li			// different relationship
134*ba677afaSXin Li			{
135*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "p1"),
136*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p2"),
137*ba677afaSXin Li				Relationship: "DEPENDS_ON",
138*ba677afaSXin Li			},
139*ba677afaSXin Li		},
140*ba677afaSXin Li	}
141*ba677afaSXin Li
142*ba677afaSXin Li	err := ValidateDocument2_2(doc)
143*ba677afaSXin Li	if err != nil {
144*ba677afaSXin Li		t.Fatalf("expected nil error, got: %s", err.Error())
145*ba677afaSXin Li	}
146*ba677afaSXin Li}
147*ba677afaSXin Li
148*ba677afaSXin Lifunc Test2_2InvalidDocumentFailsValidation(t *testing.T) {
149*ba677afaSXin Li	// set up document and some packages and relationships
150*ba677afaSXin Li	doc := &v2_2.Document{
151*ba677afaSXin Li		SPDXVersion:    "SPDX-2.1",
152*ba677afaSXin Li		DataLicense:    "CC0-1.0",
153*ba677afaSXin Li		SPDXIdentifier: common.ElementID("DOCUMENT"),
154*ba677afaSXin Li		CreationInfo:   &v2_2.CreationInfo{},
155*ba677afaSXin Li		Packages: []*v2_2.Package{
156*ba677afaSXin Li			{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
157*ba677afaSXin Li			{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
158*ba677afaSXin Li			{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
159*ba677afaSXin Li		},
160*ba677afaSXin Li		Relationships: []*v2_2.Relationship{
161*ba677afaSXin Li			{
162*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "DOCUMENT"),
163*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p1"),
164*ba677afaSXin Li				Relationship: "DESCRIBES",
165*ba677afaSXin Li			},
166*ba677afaSXin Li			{
167*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "DOCUMENT"),
168*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p5"),
169*ba677afaSXin Li				Relationship: "DESCRIBES",
170*ba677afaSXin Li			},
171*ba677afaSXin Li			// invalid ID p99
172*ba677afaSXin Li			{
173*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "p1"),
174*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p99"),
175*ba677afaSXin Li				Relationship: "DEPENDS_ON",
176*ba677afaSXin Li			},
177*ba677afaSXin Li		},
178*ba677afaSXin Li	}
179*ba677afaSXin Li
180*ba677afaSXin Li	err := ValidateDocument2_2(doc)
181*ba677afaSXin Li	if err == nil {
182*ba677afaSXin Li		t.Fatalf("expected non-nil error, got nil")
183*ba677afaSXin Li	}
184*ba677afaSXin Li}
185*ba677afaSXin Li
186*ba677afaSXin Li// ===== 2.3 tests =====
187*ba677afaSXin Li
188*ba677afaSXin Lifunc Test2_3ValidDocumentPassesValidation(t *testing.T) {
189*ba677afaSXin Li	// set up document and some packages and relationships
190*ba677afaSXin Li	doc := &v2_3.Document{
191*ba677afaSXin Li		SPDXVersion:    "SPDX-2.3",
192*ba677afaSXin Li		DataLicense:    "CC0-1.0",
193*ba677afaSXin Li		SPDXIdentifier: common.ElementID("DOCUMENT"),
194*ba677afaSXin Li		CreationInfo:   &v2_3.CreationInfo{},
195*ba677afaSXin Li		Packages: []*v2_3.Package{
196*ba677afaSXin Li			{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
197*ba677afaSXin Li			{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
198*ba677afaSXin Li			{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
199*ba677afaSXin Li			{PackageName: "pkg4", PackageSPDXIdentifier: "p4"},
200*ba677afaSXin Li			{PackageName: "pkg5", PackageSPDXIdentifier: "p5"},
201*ba677afaSXin Li		},
202*ba677afaSXin Li		Relationships: []*v2_3.Relationship{
203*ba677afaSXin Li			{
204*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "DOCUMENT"),
205*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p1"),
206*ba677afaSXin Li				Relationship: "DESCRIBES",
207*ba677afaSXin Li			},
208*ba677afaSXin Li			{
209*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "DOCUMENT"),
210*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p5"),
211*ba677afaSXin Li				Relationship: "DESCRIBES",
212*ba677afaSXin Li			},
213*ba677afaSXin Li			// inverse relationship -- should also get detected
214*ba677afaSXin Li			{
215*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "p4"),
216*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "DOCUMENT"),
217*ba677afaSXin Li				Relationship: "DESCRIBED_BY",
218*ba677afaSXin Li			},
219*ba677afaSXin Li			// different relationship
220*ba677afaSXin Li			{
221*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "p1"),
222*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p2"),
223*ba677afaSXin Li				Relationship: "DEPENDS_ON",
224*ba677afaSXin Li			},
225*ba677afaSXin Li		},
226*ba677afaSXin Li	}
227*ba677afaSXin Li
228*ba677afaSXin Li	err := ValidateDocument2_3(doc)
229*ba677afaSXin Li	if err != nil {
230*ba677afaSXin Li		t.Fatalf("expected nil error, got: %s", err.Error())
231*ba677afaSXin Li	}
232*ba677afaSXin Li}
233*ba677afaSXin Li
234*ba677afaSXin Lifunc Test2_3InvalidDocumentFailsValidation(t *testing.T) {
235*ba677afaSXin Li	// set up document and some packages and relationships
236*ba677afaSXin Li	doc := &v2_3.Document{
237*ba677afaSXin Li		SPDXVersion:    "SPDX-2.3",
238*ba677afaSXin Li		DataLicense:    "CC0-1.0",
239*ba677afaSXin Li		SPDXIdentifier: common.ElementID("DOCUMENT"),
240*ba677afaSXin Li		CreationInfo:   &v2_3.CreationInfo{},
241*ba677afaSXin Li		Packages: []*v2_3.Package{
242*ba677afaSXin Li			{PackageName: "pkg1", PackageSPDXIdentifier: "p1"},
243*ba677afaSXin Li			{PackageName: "pkg2", PackageSPDXIdentifier: "p2"},
244*ba677afaSXin Li			{PackageName: "pkg3", PackageSPDXIdentifier: "p3"},
245*ba677afaSXin Li		},
246*ba677afaSXin Li		Relationships: []*v2_3.Relationship{
247*ba677afaSXin Li			{
248*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "DOCUMENT"),
249*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p1"),
250*ba677afaSXin Li				Relationship: "DESCRIBES",
251*ba677afaSXin Li			},
252*ba677afaSXin Li			{
253*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "DOCUMENT"),
254*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p5"),
255*ba677afaSXin Li				Relationship: "DESCRIBES",
256*ba677afaSXin Li			},
257*ba677afaSXin Li			// invalid ID p99
258*ba677afaSXin Li			{
259*ba677afaSXin Li				RefA:         common.MakeDocElementID("", "p1"),
260*ba677afaSXin Li				RefB:         common.MakeDocElementID("", "p99"),
261*ba677afaSXin Li				Relationship: "DEPENDS_ON",
262*ba677afaSXin Li			},
263*ba677afaSXin Li		},
264*ba677afaSXin Li	}
265*ba677afaSXin Li
266*ba677afaSXin Li	err := ValidateDocument2_3(doc)
267*ba677afaSXin Li	if err == nil {
268*ba677afaSXin Li		t.Fatalf("expected non-nil error, got nil")
269*ba677afaSXin Li	}
270*ba677afaSXin Li}
271