Skip to content

Commit

Permalink
test: add pool empty event test
Browse files Browse the repository at this point in the history
Signed-off-by: Jérôme Benoit <[email protected]>
  • Loading branch information
jerome-benoit committed Aug 24, 2024
1 parent 1dc8bf2 commit e353778
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 29 deletions.
39 changes: 39 additions & 0 deletions tests/pools/abstract-pool.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -1286,6 +1286,45 @@ describe({
await pool.destroy()
})

it("Verify that pool event target 'empty' event can register a callback", async () => {
const pool = new DynamicThreadPool(
0,
numberOfWorkers,
new URL('./../worker-files/thread/testWorker.mjs', import.meta.url),
)
const promises = new Set()
let poolEmpty = 0
let poolInfo
pool.eventTarget.addEventListener(PoolEvents.empty, (event) => {
;++poolEmpty
poolInfo = event.detail
})
for (let i = 0; i < numberOfWorkers * 2; i++) {
promises.add(pool.execute())
}
await Promise.all(promises)
await waitPoolEvents(pool, PoolEvents.empty, 1)
expect(poolEmpty).toBe(1)
expect(poolInfo).toStrictEqual({
version,
type: PoolTypes.dynamic,
worker: WorkerTypes.web,
started: true,
ready: true,
defaultStrategy: WorkerChoiceStrategies.ROUND_ROBIN,
strategyRetries: expect.any(Number),
minSize: expect.any(Number),
maxSize: expect.any(Number),
workerNodes: expect.any(Number),
idleWorkerNodes: expect.any(Number),
busyWorkerNodes: expect.any(Number),
executedTasks: expect.any(Number),
executingTasks: expect.any(Number),
failedTasks: expect.any(Number),
})
await pool.destroy()
})

it('Verify that destroy() waits for queued tasks to finish', async () => {
const tasksFinishedTimeout = 2500
const pool = new FixedThreadPool(
Expand Down
30 changes: 1 addition & 29 deletions tests/pools/thread/fixed.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { expect } from 'expect'
import { FixedThreadPool, PoolEvents } from '../../../src/mod.ts'
import { DEFAULT_TASK_NAME } from '../../../src/utils.ts'
import { TaskFunctions } from '../../test-types.mjs'
import { waitPoolEvents, waitWorkerNodeEvents } from '../../test-utils.mjs'
import { waitWorkerNodeEvents } from '../../test-utils.mjs'

describe({
name: 'Fixed thread pool test suite',
Expand Down Expand Up @@ -98,34 +98,6 @@ describe({
expect(result).toStrictEqual({ ok: 1 })
})

it("Verify that 'ready' event is emitted", async () => {
const pool = new FixedThreadPool(
numberOfThreads,
new URL('./../../worker-files/thread/testWorker.mjs', import.meta.url),
{
errorEventHandler: (e) => console.error(e),
},
)
let poolReady = 0
pool.eventTarget.addEventListener(PoolEvents.ready, () => ++poolReady)
await waitPoolEvents(pool, PoolEvents.ready, 1)
expect(poolReady).toBe(1)
await pool.destroy()
})

it("Verify that 'busy' event is emitted", async () => {
const promises = new Set()
let poolBusy = 0
pool.eventTarget.addEventListener(PoolEvents.busy, () => ++poolBusy)
for (let i = 0; i < numberOfThreads * 2; i++) {
promises.add(pool.execute())
}
await Promise.all(promises)
// The `busy` event is triggered when the number of submitted tasks at once reach the number of fixed pool workers.
// So in total numberOfThreads + 1 times for a loop submitting up to numberOfThreads * 2 tasks to the fixed pool.
expect(poolBusy).toBe(numberOfThreads + 1)
})

it('Verify that tasks queuing is working', async () => {
const promises = new Set()
const maxMultiplier = 3 // Must be greater than tasksConcurrency
Expand Down

0 comments on commit e353778

Please sign in to comment.