repositories
/
poolifier.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
feat: restart worker in case of uncaught error
[poolifier.git]
/
tests
/
pools
/
abstract
/
abstract-pool.test.js
diff --git
a/tests/pools/abstract/abstract-pool.test.js
b/tests/pools/abstract/abstract-pool.test.js
index db45fa077620d225d4a8367ebd3d37c9d7cc9da7..91c942f646b65b9de10ec6f40dba2f70aa333730 100644
(file)
--- a/
tests/pools/abstract/abstract-pool.test.js
+++ b/
tests/pools/abstract/abstract-pool.test.js
@@
-11,7
+11,7
@@
const { CircularArray } = require('../../../lib/circular-array')
const { Queue } = require('../../../lib/queue')
describe('Abstract pool test suite', () => {
const { Queue } = require('../../../lib/queue')
describe('Abstract pool test suite', () => {
- const numberOfWorkers =
1
+ const numberOfWorkers =
2
class StubPoolWithRemoveAllWorker extends FixedThreadPool {
removeAllWorker () {
this.workerNodes = []
class StubPoolWithRemoveAllWorker extends FixedThreadPool {
removeAllWorker () {
this.workerNodes = []
@@
-82,8
+82,9
@@
describe('Abstract pool test suite', () => {
numberOfWorkers,
'./tests/worker-files/thread/testWorker.js'
)
numberOfWorkers,
'./tests/worker-files/thread/testWorker.js'
)
- expect(pool.opts.enableEvents).toBe(true)
expect(pool.emitter).toBeDefined()
expect(pool.emitter).toBeDefined()
+ expect(pool.opts.enableEvents).toBe(true)
+ expect(pool.opts.restartWorkerOnError).toBe(true)
expect(pool.opts.enableTasksQueue).toBe(false)
expect(pool.opts.tasksQueueOptions).toBeUndefined()
expect(pool.opts.workerChoiceStrategy).toBe(
expect(pool.opts.enableTasksQueue).toBe(false)
expect(pool.opts.tasksQueueOptions).toBeUndefined()
expect(pool.opts.workerChoiceStrategy).toBe(
@@
-106,9
+107,10
@@
describe('Abstract pool test suite', () => {
workerChoiceStrategy: WorkerChoiceStrategies.LEAST_USED,
workerChoiceStrategyOptions: {
medRunTime: true,
workerChoiceStrategy: WorkerChoiceStrategies.LEAST_USED,
workerChoiceStrategyOptions: {
medRunTime: true,
- weights: { 0: 300 }
+ weights: { 0: 300
, 1: 200
}
},
enableEvents: false,
},
enableEvents: false,
+ restartWorkerOnError: false,
enableTasksQueue: true,
tasksQueueOptions: { concurrency: 2 },
messageHandler: testHandler,
enableTasksQueue: true,
tasksQueueOptions: { concurrency: 2 },
messageHandler: testHandler,
@@
-117,8
+119,9
@@
describe('Abstract pool test suite', () => {
exitHandler: testHandler
}
)
exitHandler: testHandler
}
)
- expect(pool.opts.enableEvents).toBe(false)
expect(pool.emitter).toBeUndefined()
expect(pool.emitter).toBeUndefined()
+ expect(pool.opts.enableEvents).toBe(false)
+ expect(pool.opts.restartWorkerOnError).toBe(false)
expect(pool.opts.enableTasksQueue).toBe(true)
expect(pool.opts.tasksQueueOptions).toStrictEqual({ concurrency: 2 })
expect(pool.opts.workerChoiceStrategy).toBe(
expect(pool.opts.enableTasksQueue).toBe(true)
expect(pool.opts.tasksQueueOptions).toStrictEqual({ concurrency: 2 })
expect(pool.opts.workerChoiceStrategy).toBe(
@@
-126,7
+129,7
@@
describe('Abstract pool test suite', () => {
)
expect(pool.opts.workerChoiceStrategyOptions).toStrictEqual({
medRunTime: true,
)
expect(pool.opts.workerChoiceStrategyOptions).toStrictEqual({
medRunTime: true,
- weights: { 0: 300 }
+ weights: { 0: 300
, 1: 200
}
})
expect(pool.opts.messageHandler).toStrictEqual(testHandler)
expect(pool.opts.errorHandler).toStrictEqual(testHandler)
})
expect(pool.opts.messageHandler).toStrictEqual(testHandler)
expect(pool.opts.errorHandler).toStrictEqual(testHandler)
@@
-327,14
+330,15
@@
describe('Abstract pool test suite', () => {
numberOfWorkers,
'./tests/worker-files/cluster/testWorker.js'
)
numberOfWorkers,
'./tests/worker-files/cluster/testWorker.js'
)
- const promises = []
- for (let i = 0; i < numberOfWorkers * 2; i++) {
- promises.push(pool.execute())
+ const promises = new Set()
+ const maxMultiplier = 2
+ for (let i = 0; i < numberOfWorkers * maxMultiplier; i++) {
+ promises.add(pool.execute())
}
for (const workerNode of pool.workerNodes) {
expect(workerNode.tasksUsage).toStrictEqual({
run: 0,
}
for (const workerNode of pool.workerNodes) {
expect(workerNode.tasksUsage).toStrictEqual({
run: 0,
- running:
numberOfWorkers * 2
,
+ running:
maxMultiplier
,
runTime: 0,
runTimeHistory: expect.any(CircularArray),
avgRunTime: 0,
runTime: 0,
runTimeHistory: expect.any(CircularArray),
avgRunTime: 0,
@@
-349,7
+353,7
@@
describe('Abstract pool test suite', () => {
await Promise.all(promises)
for (const workerNode of pool.workerNodes) {
expect(workerNode.tasksUsage).toStrictEqual({
await Promise.all(promises)
for (const workerNode of pool.workerNodes) {
expect(workerNode.tasksUsage).toStrictEqual({
- run:
numberOfWorkers * 2
,
+ run:
maxMultiplier
,
running: 0,
runTime: 0,
runTimeHistory: expect.any(CircularArray),
running: 0,
runTime: 0,
runTimeHistory: expect.any(CircularArray),
@@
-371,16
+375,17
@@
describe('Abstract pool test suite', () => {
numberOfWorkers,
'./tests/worker-files/thread/testWorker.js'
)
numberOfWorkers,
'./tests/worker-files/thread/testWorker.js'
)
- const promises = []
- for (let i = 0; i < numberOfWorkers * 2; i++) {
- promises.push(pool.execute())
+ const promises = new Set()
+ const maxMultiplier = 2
+ for (let i = 0; i < numberOfWorkers * maxMultiplier; i++) {
+ promises.add(pool.execute())
}
await Promise.all(promises)
for (const workerNode of pool.workerNodes) {
expect(workerNode.tasksUsage).toStrictEqual({
}
await Promise.all(promises)
for (const workerNode of pool.workerNodes) {
expect(workerNode.tasksUsage).toStrictEqual({
- run:
numberOfWorkers * 2
,
+ run:
expect.any(Number)
,
running: 0,
running: 0,
- runTime:
expect.any(Number)
,
+ runTime:
0
,
runTimeHistory: expect.any(CircularArray),
avgRunTime: 0,
medRunTime: 0,
runTimeHistory: expect.any(CircularArray),
avgRunTime: 0,
medRunTime: 0,
@@
-390,12
+395,11
@@
describe('Abstract pool test suite', () => {
medWaitTime: 0,
error: 0
})
medWaitTime: 0,
error: 0
})
- expect(workerNode.tasksUsage.run
Time).toBeGreaterThanOrEqual
(0)
- expect(workerNode.tasksUsage.
avgRunTime).toBeGreaterThanOrEqual(0
)
+ expect(workerNode.tasksUsage.run
).toBeGreaterThan
(0)
+ expect(workerNode.tasksUsage.
run).toBeLessThanOrEqual(maxMultiplier
)
}
pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.FAIR_SHARE)
for (const workerNode of pool.workerNodes) {
}
pool.setWorkerChoiceStrategy(WorkerChoiceStrategies.FAIR_SHARE)
for (const workerNode of pool.workerNodes) {
- expect(workerNode.tasksUsage).toBeDefined()
expect(workerNode.tasksUsage).toStrictEqual({
run: 0,
running: 0,
expect(workerNode.tasksUsage).toStrictEqual({
run: 0,
running: 0,
@@
-410,6
+414,7
@@
describe('Abstract pool test suite', () => {
error: 0
})
expect(workerNode.tasksUsage.runTimeHistory.length).toBe(0)
error: 0
})
expect(workerNode.tasksUsage.runTimeHistory.length).toBe(0)
+ expect(workerNode.tasksUsage.waitTimeHistory.length).toBe(0)
}
await pool.destroy()
})
}
await pool.destroy()
})
@@
-420,16
+425,16
@@
describe('Abstract pool test suite', () => {
numberOfWorkers,
'./tests/worker-files/thread/testWorker.js'
)
numberOfWorkers,
'./tests/worker-files/thread/testWorker.js'
)
- const promises =
[]
+ const promises =
new Set()
let poolFull = 0
pool.emitter.on(PoolEvents.full, () => ++poolFull)
for (let i = 0; i < numberOfWorkers * 2; i++) {
let poolFull = 0
pool.emitter.on(PoolEvents.full, () => ++poolFull)
for (let i = 0; i < numberOfWorkers * 2; i++) {
- promises.
push
(pool.execute())
+ promises.
add
(pool.execute())
}
await Promise.all(promises)
// The `full` event is triggered when the number of submitted tasks at once reach the max number of workers in the dynamic pool.
}
await Promise.all(promises)
// The `full` event is triggered when the number of submitted tasks at once reach the max number of workers in the dynamic pool.
- // So in total numberOfWorkers
+ 1 times for a loop submitting up to numberOfWorkers * 2 tasks to the dynamic pool
.
- expect(poolFull).toBe(numberOfWorkers
+ 1
)
+ // So in total numberOfWorkers
* 2 times for a loop submitting up to numberOfWorkers * 2 tasks to the dynamic pool with min = max = numberOfWorkers
.
+ expect(poolFull).toBe(numberOfWorkers
* 2
)
await pool.destroy()
})
await pool.destroy()
})
@@
-438,11
+443,11
@@
describe('Abstract pool test suite', () => {
numberOfWorkers,
'./tests/worker-files/thread/testWorker.js'
)
numberOfWorkers,
'./tests/worker-files/thread/testWorker.js'
)
- const promises =
[]
+ const promises =
new Set()
let poolBusy = 0
pool.emitter.on(PoolEvents.busy, () => ++poolBusy)
for (let i = 0; i < numberOfWorkers * 2; i++) {
let poolBusy = 0
pool.emitter.on(PoolEvents.busy, () => ++poolBusy)
for (let i = 0; i < numberOfWorkers * 2; i++) {
- promises.
push
(pool.execute())
+ 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.
}
await Promise.all(promises)
// The `busy` event is triggered when the number of submitted tasks at once reach the number of fixed pool workers.