test: merge pid alive linux stat cases

This commit is contained in:
Peter Steinberger
2026-03-17 08:31:45 +00:00
parent 604c2636b9
commit 74cc748ff7

View File

@@ -77,17 +77,27 @@ describe("isPidAlive", () => {
});
describe("getProcessStartTime", () => {
it("returns a number on Linux for the current process", async () => {
// Simulate a realistic /proc/<pid>/stat line
const fakeStat = `${process.pid} (node) S 1 ${process.pid} ${process.pid} 0 -1 4194304 12345 0 0 0 100 50 0 0 20 0 8 0 98765 123456789 5000 18446744073709551615 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0`;
it("parses linux /proc stat start times and rejects malformed variants", async () => {
const fakeStatPrefix = "42 (node) S 1 42 42 0 -1 4194304 12345 0 0 0 100 50 0 0 20 0 8 0 ";
const fakeStatSuffix =
" 123456789 5000 18446744073709551615 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0";
mockProcReads({
[`/proc/${process.pid}/stat`]: fakeStat,
[`/proc/${process.pid}/stat`]: `${process.pid} (node) S 1 ${process.pid} ${process.pid} 0 -1 4194304 12345 0 0 0 100 50 0 0 20 0 8 0 98765 123456789 5000 18446744073709551615 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0`,
"/proc/42/stat": `${fakeStatPrefix}55555${fakeStatSuffix}`,
"/proc/43/stat": "43 node S malformed",
"/proc/44/stat": `44 (My App (v2)) S 1 44 44 0 -1 4194304 0 0 0 0 0 0 0 0 20 0 1 0 66666 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0`,
"/proc/45/stat": `${fakeStatPrefix}-1${fakeStatSuffix}`,
"/proc/46/stat": `${fakeStatPrefix}1.5${fakeStatSuffix}`,
});
await withLinuxProcessPlatform(async () => {
const { getProcessStartTime: fresh } = await import("./pid-alive.js");
const starttime = fresh(process.pid);
expect(starttime).toBe(98765);
expect(fresh(process.pid)).toBe(98765);
expect(fresh(42)).toBe(55555);
expect(fresh(43)).toBeNull();
expect(fresh(44)).toBe(66666);
expect(fresh(45)).toBeNull();
expect(fresh(46)).toBeNull();
});
});
@@ -107,41 +117,4 @@ describe("getProcessStartTime", () => {
expect(getProcessStartTime(Number.NaN)).toBeNull();
expect(getProcessStartTime(Number.POSITIVE_INFINITY)).toBeNull();
});
it("returns null for malformed /proc stat content", async () => {
mockProcReads({
"/proc/42/stat": "42 node S malformed",
});
await withLinuxProcessPlatform(async () => {
const { getProcessStartTime: fresh } = await import("./pid-alive.js");
expect(fresh(42)).toBeNull();
});
});
it("handles comm fields containing spaces and parentheses", async () => {
// comm field with spaces and nested parens: "(My App (v2))"
const fakeStat = `42 (My App (v2)) S 1 42 42 0 -1 4194304 0 0 0 0 0 0 0 0 20 0 1 0 55555 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0`;
mockProcReads({
"/proc/42/stat": fakeStat,
});
await withLinuxProcessPlatform(async () => {
const { getProcessStartTime: fresh } = await import("./pid-alive.js");
expect(fresh(42)).toBe(55555);
});
});
it("returns null for negative or non-integer start times", async () => {
const fakeStatPrefix = "42 (node) S 1 42 42 0 -1 4194304 12345 0 0 0 100 50 0 0 20 0 8 0 ";
const fakeStatSuffix =
" 123456789 5000 18446744073709551615 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0";
mockProcReads({
"/proc/42/stat": `${fakeStatPrefix}-1${fakeStatSuffix}`,
"/proc/43/stat": `${fakeStatPrefix}1.5${fakeStatSuffix}`,
});
await withLinuxProcessPlatform(async () => {
const { getProcessStartTime: fresh } = await import("./pid-alive.js");
expect(fresh(42)).toBeNull();
expect(fresh(43)).toBeNull();
});
});
});