Skip to content

Commit 6001aa2

Browse files
committed
Add tests for purl validation
Signed-off-by: Tushar Goel <[email protected]>
1 parent 4f6afc2 commit 6001aa2

12 files changed

+878
-32
lines changed

tests/types/composer-test.json

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,80 @@
116116
"expected_output": "pkg:composer/laravel/[email protected]",
117117
"expected_failure": false,
118118
"expected_failure_reason": null
119+
},
120+
{
121+
"description": "Valid Composer package with vendor, name, and version",
122+
"test_group": "base",
123+
"test_type": "validation",
124+
"input": {
125+
"type": "composer",
126+
"namespace": "laravel",
127+
"name": "laravel",
128+
"version": "5.5.0",
129+
"qualifiers": null,
130+
"subpath": null
131+
},
132+
"expected_messages": null
133+
},
134+
{
135+
"description": "Composer package without version",
136+
"test_group": "base",
137+
"test_type": "validation",
138+
"input": {
139+
"type": "composer",
140+
"namespace": "symfony",
141+
"name": "console",
142+
"version": null,
143+
"qualifiers": null,
144+
"subpath": null
145+
},
146+
"expected_messages": null
147+
},
148+
{
149+
"description": "Composer package with uppercase namespace (should normalize to lowercase)",
150+
"test_group": "base",
151+
"test_type": "validation",
152+
"input": {
153+
"type": "composer",
154+
"namespace": "Laravel",
155+
"name": "Framework",
156+
"version": "10.0.0",
157+
"qualifiers": null,
158+
"subpath": null
159+
},
160+
"expected_messages": null
161+
},
162+
{
163+
"description": "Composer package missing namespace (invalid)",
164+
"test_group": "base",
165+
"test_type": "validation",
166+
"input": {
167+
"type": "composer",
168+
"namespace": null,
169+
"name": "console",
170+
"version": "5.0.0",
171+
"qualifiers": null,
172+
"subpath": null
173+
},
174+
"expected_messages": [
175+
"Namespace is required for purl type: 'composer'"
176+
]
177+
},
178+
{
179+
"description": "Composer package with qualifiers",
180+
"test_group": "base",
181+
"test_type": "validation",
182+
"input": {
183+
"type": "composer",
184+
"namespace": "laravel",
185+
"name": "laravel",
186+
"version": "5.5.0",
187+
"qualifiers": {
188+
"repository_url": "https://packagist.org"
189+
},
190+
"subpath": null
191+
},
192+
"expected_messages": null
119193
}
120194
]
121195
}

tests/types/docker-test.json

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,84 @@
181181
"expected_output": "pkg:docker/customer/dockerimage@sha256:244fd47e07d10?repository_url=gcr.io",
182182
"expected_failure": false,
183183
"expected_failure_reason": null
184+
},
185+
{
186+
"description": "Valid Docker image with tag only",
187+
"test_group": "base",
188+
"test_type": "validation",
189+
"input": {
190+
"type": "docker",
191+
"namespace": null,
192+
"name": "cassandra",
193+
"version": "latest",
194+
"qualifiers": null,
195+
"subpath": null
196+
},
197+
"expected_messages": null
198+
},
199+
{
200+
"description": "Valid Docker image with namespace and sha256 digest",
201+
"test_group": "base",
202+
"test_type": "validation",
203+
"input": {
204+
"type": "docker",
205+
"namespace": "smartentry",
206+
"name": "debian",
207+
"version": "dc437cc87d10",
208+
"qualifiers": null,
209+
"subpath": null
210+
},
211+
"expected_messages": null
212+
},
213+
{
214+
"description": "Valid Docker image with repository_url qualifier",
215+
"test_group": "advanced",
216+
"test_type": "validation",
217+
"input": {
218+
"type": "docker",
219+
"namespace": "customer",
220+
"name": "dockerimage",
221+
"version": "sha256:244fd47e07d10",
222+
"qualifiers": {
223+
"repository_url": "gcr.io"
224+
},
225+
"subpath": null
226+
},
227+
"expected_messages": null
228+
},
229+
{
230+
"description": "Invalid Docker image with unsupported qualifier",
231+
"test_group": "advanced",
232+
"test_type": "validation",
233+
"input": {
234+
"type": "docker",
235+
"namespace": null,
236+
"name": "ubuntu",
237+
"version": "20.04",
238+
"qualifiers": {
239+
"bad": "value"
240+
},
241+
"subpath": null
242+
},
243+
"expected_messages": null
244+
},
245+
{
246+
"description": "Invalid Docker image with unsupported qualifier",
247+
"test_group": "basic",
248+
"test_type": "validation",
249+
"input": {
250+
"type": "docker",
251+
"namespace": null,
252+
"name": "ubuntu",
253+
"version": "20.04",
254+
"qualifiers": {
255+
"bad": "value"
256+
},
257+
"subpath": null
258+
},
259+
"expected_messages": [
260+
"Invalid qualifiers found: bad. Allowed qualifiers are: repository_url"
261+
]
184262
}
185263
]
186264
}

tests/types/golang-test.json

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,80 @@
223223
"expected_output": "pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c#api",
224224
"expected_failure": false,
225225
"expected_failure_reason": null
226-
}
226+
},
227+
{
228+
"description": "Valid golang package with namespace, name, and version",
229+
"test_group": "base",
230+
"test_type": "validation",
231+
"input": {
232+
"type": "golang",
233+
"namespace": "github.com/gorilla",
234+
"name": "context",
235+
"version": "234fd47e07d1004f0aed9c",
236+
"qualifiers": null,
237+
"subpath": null
238+
},
239+
"expected_messages": []
240+
},
241+
{
242+
"description": "Valid golang package with namespace and name only (no version)",
243+
"test_group": "base",
244+
"test_type": "validation",
245+
"input": {
246+
"type": "golang",
247+
"namespace": "golang.org/x",
248+
"name": "crypto",
249+
"version": null,
250+
"qualifiers": null,
251+
"subpath": null
252+
},
253+
"expected_messages": []
254+
},
255+
{
256+
"description": "Valid golang package with subpath",
257+
"test_group": "advanced",
258+
"test_type": "validation",
259+
"input": {
260+
"type": "golang",
261+
"namespace": "google.golang.org",
262+
"name": "genproto",
263+
"version": null,
264+
"qualifiers": null,
265+
"subpath": "googleapis/api/annotations"
266+
},
267+
"expected_messages": []
268+
},
269+
{
270+
"description": "Invalid golang package with uppercase namespace",
271+
"test_group": "base",
272+
"test_type": "validation",
273+
"input": {
274+
"type": "golang",
275+
"namespace": "GitHub.com/Gorilla",
276+
"name": "context",
277+
"version": "234fd47e07d1004f0aed9c",
278+
"qualifiers": null,
279+
"subpath": null
280+
},
281+
"expected_messages": [
282+
"Namespace is not lowercased for purl type: 'golang'"
283+
]
284+
},
285+
{
286+
"description": "Invalid golang package with missing namespace",
287+
"test_group": "base",
288+
"test_type": "validation",
289+
"input": {
290+
"type": "golang",
291+
"namespace": null,
292+
"name": "context",
293+
"version": "234fd47e07d1004f0aed9c",
294+
"qualifiers": null,
295+
"subpath": null
296+
},
297+
"expected_messages": [
298+
"Namespace is required for purl type: 'golang'"
299+
]
300+
}
227301
]
228302
}

tests/types/luarocks-test.json

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -189,35 +189,7 @@
189189
"expected_messages": ["Invalid qualifiers found: channel. Allowed qualifiers are: repository_url"]
190190
},
191191
{
192-
"description": "Invalid because namespace contains uppercase letters (should normalize)",
193-
"test_group": "base",
194-
"test_type": "validation",
195-
"input": {
196-
"type": "luarocks",
197-
"namespace": "UserName",
198-
"name": "packagename",
199-
"version": "0.1.0-1",
200-
"qualifiers": null,
201-
"subpath": null
202-
},
203-
"expected_messages": []
204-
},
205-
{
206-
"description": "Invalid because name contains uppercase letters (should normalize)",
207-
"test_group": "base",
208-
"test_type": "validation",
209-
"input": {
210-
"type": "luarocks",
211-
"namespace": null,
212-
"name": "LuaSocket",
213-
"version": "3.1.0-1",
214-
"qualifiers": null,
215-
"subpath": null
216-
},
217-
"expected_messages": []
218-
},
219-
{
220-
"description": "Invalid because name contains uppercase letters (should normalize)",
192+
"description": "Advanced validation for name with uppercase letters",
221193
"test_group": "advanced",
222194
"test_type": "validation",
223195
"input": {
@@ -230,7 +202,7 @@
230202
},
231203
"subpath": null
232204
},
233-
"expected_messages": []
205+
"expected_messages": null
234206
}
235207
]
236208
}

tests/types/npm-test.json

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,78 @@
254254
"expected_output": "pkg:npm/[email protected]#googleapis/api/annotations",
255255
"expected_failure": false,
256256
"expected_failure_reason": null
257+
},
258+
{
259+
"description": "Valid npm package without scope",
260+
"test_group": "base",
261+
"test_type": "validation",
262+
"input": {
263+
"type": "npm",
264+
"namespace": null,
265+
"name": "foobar",
266+
"version": "12.3.1",
267+
"qualifiers": null,
268+
"subpath": null
269+
},
270+
"expected_messages": null
271+
},
272+
{
273+
"description": "Valid npm package with scope",
274+
"test_group": "base",
275+
"test_type": "validation",
276+
"input": {
277+
"type": "npm",
278+
"namespace": "%40angular",
279+
"name": "animation",
280+
"version": "12.3.1",
281+
"qualifiers": null,
282+
"subpath": null
283+
},
284+
"expected_messages": null
285+
},
286+
{
287+
"description": "Valid npm package with qualifier vcs_url",
288+
"test_group": "advanced",
289+
"test_type": "validation",
290+
"input": {
291+
"type": "npm",
292+
"namespace": null,
293+
"name": "mypackage",
294+
"version": "12.4.5",
295+
"qualifiers": {
296+
"vcs_url": "git://host.com/path/to/repo.git%404345abcd34343"
297+
},
298+
"subpath": null
299+
},
300+
"expected_messages": null
301+
},
302+
{
303+
"description": "Invalid npm package with uppercase name",
304+
"test_group": "base",
305+
"test_type": "validation",
306+
"input": {
307+
"type": "npm",
308+
"namespace": null,
309+
"name": "MyPackage",
310+
"version": "1.0.0",
311+
"qualifiers": null,
312+
"subpath": null
313+
},
314+
"expected_messages": null
315+
},
316+
{
317+
"description": "Invalid npm package missing version",
318+
"test_group": "base",
319+
"test_type": "validation",
320+
"input": {
321+
"type": "npm",
322+
"namespace": null,
323+
"name": "leftpad",
324+
"version": null,
325+
"qualifiers": null,
326+
"subpath": null
327+
},
328+
"expected_messages": null
257329
}
258330
]
259331
}

0 commit comments

Comments
 (0)