Skip to content

Commit 285336f

Browse files
authored
chore: tests for os-release (#700)
Added some tests to improve the test coverage for snyk-docker-plugin. os-release specifically for this PR. Our test coverage isnt' great, so this is part of an effort to improve that
1 parent a651756 commit 285336f

1 file changed

Lines changed: 110 additions & 0 deletions

File tree

test/lib/analyzer/os-release-detector.spec.ts

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,3 +231,113 @@ describe("os release parsing", () => {
231231
}
232232
});
233233
});
234+
235+
describe("OS Release Analyzer - Error Cases", () => {
236+
const releaseAnalyzer = require("../../../lib/analyzer/os-release/release-analyzer");
237+
238+
// Test all parsers for null/empty text handling
239+
describe("All parsers null/empty handling", () => {
240+
const parsers = [
241+
{ name: "tryOSRelease", func: releaseAnalyzer.tryOSRelease },
242+
{ name: "tryLsbRelease", func: releaseAnalyzer.tryLsbRelease },
243+
{ name: "tryDebianVersion", func: releaseAnalyzer.tryDebianVersion },
244+
{ name: "tryAlpineRelease", func: releaseAnalyzer.tryAlpineRelease },
245+
{ name: "tryRedHatRelease", func: releaseAnalyzer.tryRedHatRelease },
246+
{ name: "tryCentosRelease", func: releaseAnalyzer.tryCentosRelease },
247+
{ name: "tryOracleRelease", func: releaseAnalyzer.tryOracleRelease },
248+
];
249+
250+
test.each(parsers)(
251+
"$name should return null for empty/null text",
252+
async ({ func }) => {
253+
expect(await func("")).toBeNull();
254+
expect(await func(null)).toBeNull();
255+
},
256+
);
257+
});
258+
259+
describe("tryOSRelease", () => {
260+
it("should throw error when ID is missing", async () => {
261+
const text = "VERSION_ID=20.04\nPRETTY_NAME=Ubuntu";
262+
await expect(releaseAnalyzer.tryOSRelease(text)).rejects.toThrow(
263+
"Failed to parse /etc/os-release",
264+
);
265+
});
266+
});
267+
268+
describe("tryLsbRelease", () => {
269+
it("should throw error when required fields are missing", async () => {
270+
// Missing DISTRIB_ID
271+
await expect(
272+
releaseAnalyzer.tryLsbRelease("DISTRIB_RELEASE=20.04"),
273+
).rejects.toThrow("Failed to parse /etc/lsb-release");
274+
275+
// Missing DISTRIB_RELEASE
276+
await expect(
277+
releaseAnalyzer.tryLsbRelease("DISTRIB_ID=Ubuntu"),
278+
).rejects.toThrow("Failed to parse /etc/lsb-release");
279+
});
280+
});
281+
282+
describe("tryDebianVersion and tryAlpineRelease - short text handling", () => {
283+
const shortTextParsers = [
284+
{
285+
name: "tryDebianVersion",
286+
func: releaseAnalyzer.tryDebianVersion,
287+
file: "/etc/debian_version",
288+
},
289+
{
290+
name: "tryAlpineRelease",
291+
func: releaseAnalyzer.tryAlpineRelease,
292+
file: "/etc/alpine-release",
293+
},
294+
];
295+
296+
test.each(shortTextParsers)(
297+
"$name should throw error for text shorter than 2 chars after trim",
298+
async ({ func, file }) => {
299+
// Test single character
300+
await expect(func("9")).rejects.toThrow(`Failed to parse ${file}`);
301+
// Test whitespace only
302+
await expect(func(" ")).rejects.toThrow(`Failed to parse ${file}`);
303+
// Test single char with whitespace
304+
await expect(func(" a ")).rejects.toThrow(`Failed to parse ${file}`);
305+
},
306+
);
307+
});
308+
309+
describe("RedHat-based release parsers", () => {
310+
const rhParsers = [
311+
{
312+
name: "tryRedHatRelease",
313+
func: releaseAnalyzer.tryRedHatRelease,
314+
file: "/etc/redhat-release",
315+
},
316+
{
317+
name: "tryCentosRelease",
318+
func: releaseAnalyzer.tryCentosRelease,
319+
file: "/etc/centos-release",
320+
},
321+
{
322+
name: "tryOracleRelease",
323+
func: releaseAnalyzer.tryOracleRelease,
324+
file: "/etc/oracle-release",
325+
},
326+
];
327+
328+
test.each(rhParsers)(
329+
"$name should throw error for missing ID/version patterns",
330+
async ({ func, file }) => {
331+
// No ID pattern found (whitespace only)
332+
await expect(func(" \n ")).rejects.toThrow(
333+
`Failed to parse ${file}`,
334+
);
335+
336+
// ID found but no version number
337+
await expect(func("OS Linux release")).rejects.toThrow(
338+
`Failed to parse ${file}`,
339+
);
340+
},
341+
);
342+
});
343+
});

0 commit comments

Comments
 (0)