diff --git a/test/isolation.test.ts b/test/isolation.test.ts new file mode 100644 index 0000000..f4a6aa1 --- /dev/null +++ b/test/isolation.test.ts @@ -0,0 +1,38 @@ +import { dirname, resolve } from 'path' +import { Tinypool } from 'tinypool' +import { fileURLToPath } from 'url' + +const __dirname = dirname(fileURLToPath(import.meta.url)) + +test('workers can be isolated between tasks', async () => { + const pool = new Tinypool({ + filename: resolve(__dirname, 'fixtures/sleep.js'), + minThreads: 1, + maxThreads: 1, + isolateWorkers: false, + }) + + function getThreadId() { + expect(pool.threads).toHaveLength(1) + return pool.threads[0]!.threadId + } + + const initialThreadId = getThreadId() + + await pool.run({}) + expect(getThreadId()).toBe(initialThreadId) + + await pool.run({}) + await pool.run({}) + await pool.run({}) + expect(getThreadId()).toBe(initialThreadId) + + // TODO: pool.flushWorkers() + const newThreadId = getThreadId() + expect(newThreadId).not.toBe(initialThreadId) + + await pool.run({}) + await pool.run({}) + await pool.run({}) + expect(getThreadId()).toBe(newThreadId) +})