fix: harden repository refresh and server pull
ForgeFlow quality gate / quality (push) Canceled after 0s
ForgeFlow quality gate / quality (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { EventEmitter } from 'node:events';
|
||||
import policyModule from '../src/main/process-error-policy.cjs';
|
||||
|
||||
const { installOutputPipeGuards, isBrokenPipeError } = policyModule;
|
||||
|
||||
test('broken output pipes are recognized without treating unrelated failures as EPIPE', () => {
|
||||
assert.equal(isBrokenPipeError(Object.assign(new Error('closed'), { code: 'EPIPE' })), true);
|
||||
assert.equal(isBrokenPipeError(Object.assign(new Error('denied'), { code: 'EACCES' })), false);
|
||||
assert.equal(isBrokenPipeError(null), false);
|
||||
});
|
||||
|
||||
test('output pipe guard absorbs EPIPE and can be cleanly removed', () => {
|
||||
const stdout = new EventEmitter();
|
||||
const stderr = new EventEmitter();
|
||||
const observed = [];
|
||||
const remove = installOutputPipeGuards({ stdout, stderr, onBrokenPipe: (error) => observed.push(error.code) });
|
||||
|
||||
stdout.emit('error', Object.assign(new Error('closed'), { code: 'EPIPE' }));
|
||||
stderr.emit('error', Object.assign(new Error('closed'), { code: 'EPIPE' }));
|
||||
assert.deepEqual(observed, ['EPIPE', 'EPIPE']);
|
||||
remove();
|
||||
assert.equal(stdout.listenerCount('error'), 0);
|
||||
assert.equal(stderr.listenerCount('error'), 0);
|
||||
});
|
||||
Reference in New Issue
Block a user