Files
openswarm/electron/memorySensor.test.js
T

28 lines
1.2 KiB
JavaScript

// The leak detector's math, pinned: a flat session reports nothing, a straight climb is caught.
const assert = require('node:assert/strict');
const { test } = require('node:test');
const { slopeMbPerMin, totalMb, GROWTH_MB_PER_MIN } = require('./memorySensor');
test('a flat memory profile has no slope, so nothing is ever reported', () => {
assert.ok(Math.abs(slopeMbPerMin([900, 905, 898, 902, 900, 903, 899, 901, 900, 902])) < 1, 'jitter is not a trend');
});
test('a steady climb is caught above the growth threshold', () => {
const climbing = Array.from({ length: 10 }, (_, i) => 800 + i * 60);
assert.ok(slopeMbPerMin(climbing) >= GROWTH_MB_PER_MIN, 'a 60MB/min climb must exceed the threshold');
});
test('a single spike is not a leak', () => {
const spike = [900, 900, 900, 900, 2000, 900, 900, 900, 900, 900];
assert.ok(slopeMbPerMin(spike) < GROWTH_MB_PER_MIN, 'one spike must not read as a trend');
});
test('too few samples never guesses', () => {
assert.equal(slopeMbPerMin([900, 2000, 3000]), 0);
});
test('totals sum every process in MB', () => {
assert.equal(totalMb([{ memory: { workingSetSize: 1024 * 500 } }, { memory: { workingSetSize: 1024 * 300 } }]), 800);
assert.equal(totalMb([{}, { memory: {} }]), 0);
});