server-core.test.js
Pfad: wetell-headless/server-core.test.js
Ext: js
Größe: 1757 Bytes
Geändert: 2026-07-16 17:51:21+02
'use strict';
const http = require('node:http');
const test = require('node:test');
const assert = require('node:assert/strict');
const { createRequestHandler, validSecret } = require('./server-core');
async function withServer(handler, operation) {
const server = http.createServer(handler);
await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
const address = server.address();
try { await operation(`http://127.0.0.1:${address.port}`); }
finally { await new Promise((resolve) => server.close(resolve)); }
}
test('uses constant-time compatible secret contract', () => {
assert.equal(validSecret('secret', 'secret'), true);
assert.equal(validSecret('wrong', 'secret'), false);
assert.equal(validSecret(null, 'secret'), false);
});
test('rejects unauthenticated and oversized requests', async () => {
const browser = { browser: {}, execute: async () => ({ ok: true }) };
await withServer(createRequestHandler(browser, 'secret'), async (url) => {
const forbidden = await fetch(url, { method: 'POST', body: JSON.stringify({ secret: 'wrong' }) });
assert.equal(forbidden.status, 403);
const oversized = await fetch(url, { method: 'POST', body: JSON.stringify({ value: 'x'.repeat(66000) }) });
assert.equal(oversized.status, 413);
});
});
test('reports readiness without exposing configuration', async () => {
const browser = { browser: {}, execute: async () => ({ ok: true }) };
await withServer(createRequestHandler(browser, 'secret'), async (url) => {
const response = await fetch(`${url}/health`);
assert.equal(response.status, 200);
assert.deepEqual(await response.json(), { ok: true, ready: true, active: 0 });
});
});