import test from 'brittle' import { AnomalyEngine } from '../server/services/anomaly.js' import { silenceAlert } from '../server/services/alerts.js' test('silence TTL auto-reenables alert', (t) => { const engine = new AnomalyEngine({ cpuCount: 2 }) // Use singleton path via silenceAlert — it mutates getAnomalyEngine(). // Drive a local engine for isolation instead: const cfg = { id: 'cpu_user_high', chart: 'system.cpu', dimension: 'user', warn: 10, crit: 50, comparator: '>', enabled: true, info: 'test', } engine.setConfig(cfg) engine.setConfig({ ...cfg, enabled: false, _silencedUntil: Date.now() - 1000, }) const fired = engine.evaluate([ { chart: 'system.cpu', context: 'system.cpu', ts: Date.now(), values: { user: 80, system: 0, nice: 0, iowait: 0, irq: 0, softirq: 0, idle: 20, steal: 0, guest: 0, guest_nice: 0, }, }, ]) t.ok(engine.configs.get('cpu_user_high').enabled === true) t.ok(fired.length >= 1) t.ok(silenceAlert) // keep import used / API present }) test('silence still active before TTL', (t) => { const engine = new AnomalyEngine({ cpuCount: 2 }) engine.setConfig({ id: 'cpu_user_high', chart: 'system.cpu', dimension: 'user', warn: 10, crit: 50, comparator: '>', enabled: false, _silencedUntil: Date.now() + 60_000, info: 'test', }) const fired = engine.evaluate([ { chart: 'system.cpu', context: 'system.cpu', ts: Date.now(), values: { user: 90, idle: 10 }, }, ]) t.is(fired.length, 0) t.is(engine.configs.get('cpu_user_high').enabled, false) })