Refactor VPN proxy client implementation
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
|
||||
import { finishRollback } from '../../dist/server/services/rollback.js';
|
||||
|
||||
test('shared rollback rethrows the original error after successful ordered restores', async () => {
|
||||
const original = new Error('original');
|
||||
const events = [];
|
||||
await assert.rejects(
|
||||
finishRollback(original, [
|
||||
{ run: () => { events.push('first'); } },
|
||||
{ run: async () => { events.push('second'); } },
|
||||
], 'Rollback failed'),
|
||||
(error) => error === original,
|
||||
);
|
||||
assert.deepEqual(events, ['first', 'second']);
|
||||
});
|
||||
|
||||
test('shared rollback continues, preserves aggregate order and message', async () => {
|
||||
const original = new Error('original');
|
||||
const first = new Error('first restore');
|
||||
const second = new Error('second restore');
|
||||
const events = [];
|
||||
await assert.rejects(
|
||||
finishRollback(original, [
|
||||
{ run: () => { events.push('first'); throw first; } },
|
||||
{ run: () => { events.push('middle'); } },
|
||||
{ run: () => { events.push('second'); throw second; } },
|
||||
], 'Expected rollback message'),
|
||||
(error) => {
|
||||
assert.ok(error instanceof AggregateError);
|
||||
assert.equal(error.message, 'Expected rollback message');
|
||||
assert.deepEqual(error.errors, [original, first, second]);
|
||||
return true;
|
||||
},
|
||||
);
|
||||
assert.deepEqual(events, ['first', 'middle', 'second']);
|
||||
});
|
||||
|
||||
test('shared rollback maps a runtime restore failure to PROCESS_START_FAILED', async () => {
|
||||
const original = new Error('original');
|
||||
const config = new Error('config restore');
|
||||
const runtime = new Error('runtime restore');
|
||||
await assert.rejects(
|
||||
finishRollback(original, [
|
||||
{ run: () => { throw config; } },
|
||||
{ run: () => { throw runtime; }, runtime: true },
|
||||
], 'Runtime rollback failed'),
|
||||
(error) => {
|
||||
assert.equal(error.code, 'PROCESS_START_FAILED');
|
||||
assert.equal(error.cause.message, 'Runtime rollback failed');
|
||||
assert.deepEqual(error.cause.errors, [original, config, runtime]);
|
||||
return true;
|
||||
},
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user