mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-19 05:50:47 +00:00
test: merge pid alive linux stat cases
This commit is contained in:
@@ -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();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user