Files
harbor-net/test/server/failover-route.test.js
T
dokril daec12e013
Build and Deploy Gateway / build-and-push (push) Failing after 14s
Build and Deploy Gateway / deploy (push) Has been skipped
Update Harbor client and gateway integration workflows
2026-08-19 18:16:10 +03:00

55 lines
2.4 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { createFailoverRoute } from '../../dist/server/http/routes/failoverRoute.js';
function request(method, url = '/api/failover') {
return { method, url };
}
test('Gateway failover route serializes save, pause, checks and manual switch mutations', async () => {
const calls = [];
let body = { policy: { enabled: true }, expectedRevision: 7 };
const route = createFailoverRoute({
appMode: 'gateway',
failover: {
save: async (value) => calls.push(['save', value]),
pause: async (value) => calls.push(['pause', value]),
manualSwitch: async (value) => calls.push(['switch', value]),
checkNow: async () => calls.push(['check']),
},
readBody: async () => body,
withOperation: async (kind, operation, options) => {
calls.push(['operation', kind, options]);
return operation();
},
sendState: async () => calls.push(['state']),
});
assert.equal(await route.handle(request('PUT'), {}), true);
body = { paused: true, expectedRevision: 8 };
assert.equal(await route.handle(request('POST', '/api/failover/pause'), {}), true);
body = { role: 'reserve', expectedRevision: 9 };
assert.equal(await route.handle(request('POST', '/api/failover/switch'), {}), true);
body = { expectedRevision: 10 };
assert.equal(await route.handle(request('POST', '/api/failover/check'), {}), true);
assert.deepEqual(calls, [
['operation', 'failover-save', { expectedRevision: 7 }], ['save', { enabled: true }], ['state'],
['operation', 'failover-pause', { expectedRevision: 8 }], ['pause', true], ['state'],
['operation', 'failover-switch', { expectedRevision: 9 }], ['switch', 'reserve'], ['state'],
['check'], ['state'],
]);
});
test('failover mutations stay Gateway-only and reject unknown roles', async () => {
const connectRoute = createFailoverRoute({
appMode: 'client', failover: {}, readBody: async () => ({}), withOperation: async () => {}, sendState: async () => {},
});
await assert.rejects(connectRoute.handle(request('PUT'), {}), { code: 'ENDPOINT_NOT_FOUND' });
const gatewayRoute = createFailoverRoute({
appMode: 'gateway', failover: {}, readBody: async () => ({ role: 'other' }), withOperation: async () => {}, sendState: async () => {},
});
await assert.rejects(gatewayRoute.handle(request('POST', '/api/failover/switch'), {}), { code: 'REQUEST_INVALID' });
});