← Code-Übersicht

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 });
    });
});