Path: blob/master/src/packages/backend/process-stats.test.ts
6569 views
/*1* This file is part of CoCalc: Copyright © 2026 Sagemath, Inc.2* License: MS-RSL – see LICENSE.md for details3*/45import { delay } from "awaiting";67import { ProcessStats } from "./process-stats";89describe("process-stats", () => {10it("collects sane process information", async () => {11const stats = ProcessStats.getInstance();12await stats.init();1314const result = await stats.processes("process-stats-test");15const now = Date.now();1617expect(result.uptime).toBeGreaterThan(0);18expect(result.boottime.getTime()).toBeGreaterThan(0);19expect(result.boottime.getTime()).toBeLessThan(now);2021const pids = Object.keys(result.procs);22expect(pids.length).toBeGreaterThan(0);2324const sample = result.procs[pids[0]];25expect(Number.isFinite(sample.stat.mem.rss)).toBeTruthy();26expect(sample.stat.mem.rss).toBeGreaterThanOrEqual(0);27expect(Number.isFinite(sample.cpu.secs)).toBeTruthy();28expect(sample.cpu.secs).toBeGreaterThanOrEqual(0);29expect(Number.isFinite(sample.cpu.pct)).toBeTruthy();30expect(sample.cpu.pct).toBeGreaterThanOrEqual(0);31});3233it("returns sane values across repeated scans", async () => {34const stats = ProcessStats.getInstance();35await stats.init();3637const first = await stats.processes("process-stats-repeat");38await delay(100);39const second = await stats.processes("process-stats-repeat");4041expect(second.uptime).toBeGreaterThan(0);42expect(second.boottime.getTime()).toBeGreaterThan(0);43expect(Object.keys(second.procs).length).toBeGreaterThan(0);4445const sample = second.procs[Object.keys(second.procs)[0]];46expect(Number.isFinite(sample.cpu.pct)).toBeTruthy();47expect(sample.cpu.pct).toBeGreaterThanOrEqual(0);48expect(Number.isFinite(sample.cpu.secs)).toBeTruthy();49expect(sample.cpu.secs).toBeGreaterThanOrEqual(0);50expect(second.uptime).toBeGreaterThanOrEqual(first.uptime - 1);51});52});535455