undici-thread-interceptor
Advanced tools
Comparing version 0.11.1 to 0.11.2
16
index.js
@@ -202,2 +202,6 @@ 'use strict' | ||
port.postMessage({ type: 'route', url: key, port: port1, threadId: otherPort.threadId }, [port1]) | ||
// If we have a real address for the other port, we need to forward it | ||
if (otherPort[kAddress]) { | ||
port.postMessage({ type: 'address', url: key, address: otherPort[kAddress], threadId: otherPort.threadId }) | ||
} | ||
} | ||
@@ -221,5 +225,12 @@ } | ||
roundRobin.remove(port) | ||
for (const f of forwarded.get(port)) { | ||
f.close() | ||
if (forwarded.has(port)) { | ||
for (const f of forwarded.get(port)) { | ||
f.close() | ||
} | ||
// delete all the array of forwarded ports, | ||
// to avoid a memory leak | ||
forwarded.delete(port) | ||
} | ||
for (const cb of portInflights.get(port).values()) { | ||
@@ -363,3 +374,2 @@ cb(new Error('Worker exited')) | ||
const body = await collectBody(res.stream()) | ||
newRes = { | ||
@@ -366,0 +376,0 @@ headers: res.headers, |
{ | ||
"name": "undici-thread-interceptor", | ||
"version": "0.11.1", | ||
"version": "0.11.2", | ||
"description": "An Undici interceptor that routes requests over a worker thread", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -155,1 +155,69 @@ 'use strict' | ||
}) | ||
test('service restart with network / 3', async (t) => { | ||
const worker1 = new Worker(join(__dirname, 'fixtures', 'network-crash.js'), { | ||
workerData: { name: 'worker1' }, | ||
}) | ||
t.after(() => worker1.terminate()) | ||
const worker2 = new Worker(join(__dirname, 'fixtures', 'network-crash.js'), { | ||
workerData: { name: 'worker2' }, | ||
}) | ||
t.after(() => worker2.terminate()) | ||
const interceptor = createThreadInterceptor({ | ||
domain: '.local', | ||
}) | ||
interceptor.route('myserver', worker1) | ||
interceptor.route('myserver2', worker2) | ||
const agent = new Agent().compose(interceptor) | ||
await sleep(1000) | ||
{ | ||
const res = await request('http://myserver2.local/example', { | ||
dispatcher: agent, | ||
}) | ||
strictEqual(res.statusCode, 200) | ||
await res.body.dump() | ||
} | ||
await rejects(request('http://myserver2.local/crash', { | ||
dispatcher: agent, | ||
})) | ||
const worker2bis = new Worker(join(__dirname, 'fixtures', 'network-crash.js'), { | ||
workerData: { name: 'worker2bis' }, | ||
}) | ||
t.after(() => worker2bis.terminate()) | ||
interceptor.route('myserver2', worker2bis) | ||
const composer = new Worker(join(__dirname, 'fixtures', 'composer.js'), { | ||
workerData: { name: 'composer' }, | ||
}) | ||
t.after(() => composer.terminate()) | ||
interceptor.route('composer', composer) | ||
await sleep(2000) | ||
{ | ||
const res = await request('http://composer.local/s1/example', { | ||
dispatcher: agent, | ||
}) | ||
strictEqual(res.statusCode, 200) | ||
await res.body.dump() | ||
} | ||
{ | ||
const res = await request('http://composer.local/s2/example', { | ||
dispatcher: agent, | ||
}) | ||
strictEqual(res.statusCode, 200) | ||
await res.body.dump() | ||
} | ||
}) |
92530
2578