import { describe, it } from 'node:test'; import assert from 'node:assert/strict'; import { once } from 'node:events'; import { createServer as createNetServer } from 'node:net'; import { request } from 'node:https'; import { readFileSync } from 'node:fs'; import { workers, assign } from 'moroutine'; import { serverThreads } from 'moroutine/serve'; import { runTlsServer } from './fixtures/tls-server.ts'; function httpsGet(port: number): Promise { return new Promise((resolve, reject) => { const req = request( { host: '127.0.0.1', port, path: '/', ca: readFileSync('test/serve/fixtures/cert.pem'), }, (res) => { const chunks: Buffer[] = []; res.on('data', (c) => chunks.push(Buffer.isBuffer(c) ? c : Buffer.from(c))); res.on('end', () => resolve(Buffer.concat(chunks).toString('utf8'))); }, ); req.on('error', reject); req.end(); }); } describe('TLS on worker', () => { it('worker terminates TLS; main stays raw TCP', { timeout: 15_000 }, async () => { const server = createNetServer(); server.listen(0); await once(server, 'listening'); const port = (server.address() as any).port; { using run = workers(1); using threads = serverThreads(run.workers, server); const serving = run(threads.map(([w, args]) => assign(w, runTlsServer(...args)))); const body = await httpsGet(port); assert.equal(body, 'tls-ok'); server.close(); await serving; } }); });