numberOfWorkers,
'./tests/worker-files/thread/testWorker.js',
{
- enableTasksQueue: true,
- tasksQueueOptions: { concurrency: 0 }
+ workerChoiceStrategy: 'invalidStrategy'
}
)
- ).toThrowError("Invalid worker tasks concurrency '0'")
+ ).toThrowError("Invalid worker choice strategy 'invalidStrategy'")
expect(
() =>
new FixedThreadPool(
numberOfWorkers,
'./tests/worker-files/thread/testWorker.js',
{
- workerChoiceStrategy: 'invalidStrategy'
+ workerChoiceStrategyOptions: 'invalidOptions'
}
)
- ).toThrowError("Invalid worker choice strategy 'invalidStrategy'")
+ ).toThrowError(
+ 'Invalid worker choice strategy options: must be a plain object'
+ )
expect(
() =>
new FixedThreadPool(
).toThrowError(
'Invalid worker choice strategy options: must have a weight for each worker node'
)
+ expect(
+ () =>
+ new FixedThreadPool(
+ numberOfWorkers,
+ './tests/worker-files/thread/testWorker.js',
+ {
+ workerChoiceStrategyOptions: { measurement: 'invalidMeasurement' }
+ }
+ )
+ ).toThrowError(
+ "Invalid worker choice strategy options: invalid measurement 'invalidMeasurement'"
+ )
+ expect(
+ () =>
+ new FixedThreadPool(
+ numberOfWorkers,
+ './tests/worker-files/thread/testWorker.js',
+ {
+ enableTasksQueue: true,
+ tasksQueueOptions: { concurrency: 0 }
+ }
+ )
+ ).toThrowError("Invalid worker tasks concurrency '0'")
+ expect(
+ () =>
+ new FixedThreadPool(
+ numberOfWorkers,
+ './tests/worker-files/thread/testWorker.js',
+ {
+ enableTasksQueue: true,
+ tasksQueueOptions: 'invalidTasksQueueOptions'
+ }
+ )
+ ).toThrowError('Invalid tasks queue options: must be a plain object')
+ expect(
+ () =>
+ new FixedThreadPool(
+ numberOfWorkers,
+ './tests/worker-files/thread/testWorker.js',
+ {
+ enableTasksQueue: true,
+ tasksQueueOptions: { concurrency: 0.2 }
+ }
+ )
+ ).toThrowError('Invalid worker tasks concurrency: must be an integer')
})
it('Verify that worker choice strategy options can be set', async () => {
median: false
},
elu: {
- aggregate: false,
- average: false,
+ aggregate: true,
+ average: true,
median: false
}
})
- pool.setWorkerChoiceStrategyOptions({ runTime: { median: true } })
+ pool.setWorkerChoiceStrategyOptions({
+ runTime: { median: true },
+ elu: { median: true }
+ })
expect(pool.opts.workerChoiceStrategyOptions).toStrictEqual({
- runTime: { median: true }
+ runTime: { median: true },
+ elu: { median: true }
})
for (const [, workerChoiceStrategy] of pool.workerChoiceStrategyContext
.workerChoiceStrategies) {
expect(workerChoiceStrategy.opts).toStrictEqual({
- runTime: { median: true }
+ runTime: { median: true },
+ elu: { median: true }
})
}
expect(
median: false
},
elu: {
- aggregate: false,
+ aggregate: true,
average: false,
- median: false
+ median: true
}
})
- pool.setWorkerChoiceStrategyOptions({ runTime: { median: false } })
+ pool.setWorkerChoiceStrategyOptions({
+ runTime: { median: false },
+ elu: { median: false }
+ })
expect(pool.opts.workerChoiceStrategyOptions).toStrictEqual({
- runTime: { median: false }
+ runTime: { median: false },
+ elu: { median: false }
})
for (const [, workerChoiceStrategy] of pool.workerChoiceStrategyContext
.workerChoiceStrategies) {
expect(workerChoiceStrategy.opts).toStrictEqual({
- runTime: { median: false }
+ runTime: { median: false },
+ elu: { median: false }
})
}
expect(
median: false
},
elu: {
- aggregate: false,
- average: false,
+ aggregate: true,
+ average: true,
median: false
}
})
+ expect(() =>
+ pool.setWorkerChoiceStrategyOptions('invalidWorkerChoiceStrategyOptions')
+ ).toThrowError(
+ 'Invalid worker choice strategy options: must be a plain object'
+ )
+ expect(() =>
+ pool.setWorkerChoiceStrategyOptions({ weights: {} })
+ ).toThrowError(
+ 'Invalid worker choice strategy options: must have a weight for each worker node'
+ )
+ expect(() =>
+ pool.setWorkerChoiceStrategyOptions({ measurement: 'invalidMeasurement' })
+ ).toThrowError(
+ "Invalid worker choice strategy options: invalid measurement 'invalidMeasurement'"
+ )
await pool.destroy()
})
expect(pool.opts.tasksQueueOptions).toStrictEqual({ concurrency: 1 })
pool.setTasksQueueOptions({ concurrency: 2 })
expect(pool.opts.tasksQueueOptions).toStrictEqual({ concurrency: 2 })
+ expect(() =>
+ pool.setTasksQueueOptions('invalidTasksQueueOptions')
+ ).toThrowError('Invalid tasks queue options: must be a plain object')
expect(() => pool.setTasksQueueOptions({ concurrency: 0 })).toThrowError(
"Invalid worker tasks concurrency '0'"
)
+ expect(() => pool.setTasksQueueOptions({ concurrency: 0.2 })).toThrowError(
+ 'Invalid worker tasks concurrency: must be an integer'
+ )
await pool.destroy()
})