35 lines
1.3 KiB
JavaScript
35 lines
1.3 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
|
|
import { createRendererRecoveryPolicy } from './renderer-recovery.mjs';
|
|
|
|
test('allows a bounded number of reloads for recoverable renderer failures', () => {
|
|
const policy = createRendererRecoveryPolicy(() => 1_000);
|
|
|
|
assert.equal(policy.shouldReload('crashed'), true);
|
|
assert.equal(policy.shouldReload('oom'), true);
|
|
assert.equal(policy.shouldReload('abnormal-exit'), true);
|
|
assert.equal(policy.shouldReload('memory-eviction'), false);
|
|
});
|
|
|
|
test('ignores clean and externally killed renderer exits', () => {
|
|
const policy = createRendererRecoveryPolicy(() => 1_000);
|
|
|
|
assert.equal(policy.shouldReload('clean-exit'), false);
|
|
assert.equal(policy.shouldReload('killed'), false);
|
|
assert.equal(policy.shouldReload('launch-failed'), false);
|
|
});
|
|
|
|
test('resets the recovery budget after the recovery window', () => {
|
|
let currentTime = 1_000;
|
|
const policy = createRendererRecoveryPolicy(() => currentTime);
|
|
|
|
assert.equal(policy.shouldReload('crashed'), true);
|
|
assert.equal(policy.shouldReload('crashed'), true);
|
|
assert.equal(policy.shouldReload('crashed'), true);
|
|
assert.equal(policy.shouldReload('crashed'), false);
|
|
|
|
currentTime += 60_000;
|
|
assert.equal(policy.shouldReload('crashed'), true);
|
|
});
|