Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemathinc
GitHub Repository: sagemathinc/cocalc
Path: blob/master/src/packages/backend/process-stats.test.ts
6569 views
1
/*
2
* This file is part of CoCalc: Copyright © 2026 Sagemath, Inc.
3
* License: MS-RSL – see LICENSE.md for details
4
*/
5
6
import { delay } from "awaiting";
7
8
import { ProcessStats } from "./process-stats";
9
10
describe("process-stats", () => {
11
it("collects sane process information", async () => {
12
const stats = ProcessStats.getInstance();
13
await stats.init();
14
15
const result = await stats.processes("process-stats-test");
16
const now = Date.now();
17
18
expect(result.uptime).toBeGreaterThan(0);
19
expect(result.boottime.getTime()).toBeGreaterThan(0);
20
expect(result.boottime.getTime()).toBeLessThan(now);
21
22
const pids = Object.keys(result.procs);
23
expect(pids.length).toBeGreaterThan(0);
24
25
const sample = result.procs[pids[0]];
26
expect(Number.isFinite(sample.stat.mem.rss)).toBeTruthy();
27
expect(sample.stat.mem.rss).toBeGreaterThanOrEqual(0);
28
expect(Number.isFinite(sample.cpu.secs)).toBeTruthy();
29
expect(sample.cpu.secs).toBeGreaterThanOrEqual(0);
30
expect(Number.isFinite(sample.cpu.pct)).toBeTruthy();
31
expect(sample.cpu.pct).toBeGreaterThanOrEqual(0);
32
});
33
34
it("returns sane values across repeated scans", async () => {
35
const stats = ProcessStats.getInstance();
36
await stats.init();
37
38
const first = await stats.processes("process-stats-repeat");
39
await delay(100);
40
const second = await stats.processes("process-stats-repeat");
41
42
expect(second.uptime).toBeGreaterThan(0);
43
expect(second.boottime.getTime()).toBeGreaterThan(0);
44
expect(Object.keys(second.procs).length).toBeGreaterThan(0);
45
46
const sample = second.procs[Object.keys(second.procs)[0]];
47
expect(Number.isFinite(sample.cpu.pct)).toBeTruthy();
48
expect(sample.cpu.pct).toBeGreaterThanOrEqual(0);
49
expect(Number.isFinite(sample.cpu.secs)).toBeTruthy();
50
expect(sample.cpu.secs).toBeGreaterThanOrEqual(0);
51
expect(second.uptime).toBeGreaterThanOrEqual(first.uptime - 1);
52
});
53
});
54
55