Skip to content

Commit 3d33ed5

Browse files
committed
lib: validate metrics batch/buffer config inputs
Require positive finite numbers when metricsBatchSize/metricsBufferSize are set via nsolid.start() or live reconfigure so odd JS values (true, objects, NaN, etc.) are ignored Add test-nsolid-start-metrics-buffer.js test to cover for this.
1 parent 29d1b20 commit 3d33ed5

2 files changed

Lines changed: 54 additions & 0 deletions

File tree

lib/nsolid.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ const {
66
DateNow,
77
JSONParse,
88
JSONStringify,
9+
Number,
10+
NumberIsFinite,
911
NumberParseInt,
1012
ObjectAssign,
1113
ObjectDefineProperty,
@@ -769,6 +771,14 @@ function updateConfig(config = {}) {
769771
if (normalized !== undefined) {
770772
nsolidConfig.assetsEnabled = normalized;
771773
}
774+
} else if (key === 'metricsBatchSize' || key === 'metricsBufferSize') {
775+
const raw = config[key];
776+
if (typeof raw === 'number' || (typeof raw === 'string' && raw.trim() !== '')) {
777+
const value = Number(raw);
778+
if (NumberIsFinite(value) && value > 0) {
779+
nsolidConfig[key] = value;
780+
}
781+
}
772782
} else {
773783
nsolidConfig[key] = config[key];
774784
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
'use strict';
2+
3+
require('../common');
4+
const assert = require('assert');
5+
const nsolid = require('nsolid');
6+
7+
const defaultBatchSize = nsolid.config.metricsBatchSize;
8+
const defaultBufferSize = nsolid.config.metricsBufferSize;
9+
10+
nsolid.start({
11+
metricsBatchSize: defaultBatchSize + 1,
12+
metricsBufferSize: defaultBufferSize + 50
13+
});
14+
assert.strictEqual(nsolid.config.metricsBatchSize, defaultBatchSize + 1);
15+
assert.strictEqual(nsolid.config.metricsBufferSize, defaultBufferSize + 50);
16+
17+
nsolid.start({
18+
metricsBatchSize: `${defaultBatchSize + 2}`,
19+
metricsBufferSize: `${defaultBufferSize + 100}`
20+
});
21+
assert.strictEqual(nsolid.config.metricsBatchSize, defaultBatchSize + 2);
22+
assert.strictEqual(nsolid.config.metricsBufferSize, defaultBufferSize + 100);
23+
24+
// Invalid inputs should be ignored
25+
const invalidValues = [0, -1, NaN, undefined, null, true, false, {}, [], () => {}];
26+
for (const value of invalidValues) {
27+
nsolid.start({
28+
metricsBatchSize: value,
29+
metricsBufferSize: value
30+
});
31+
assert.strictEqual(nsolid.config.metricsBatchSize,
32+
defaultBatchSize + 2,
33+
`metricsBatchSize changed unexpectedly for value: ${String(value)}`);
34+
assert.strictEqual(nsolid.config.metricsBufferSize,
35+
defaultBufferSize + 100,
36+
`metricsBufferSize changed unexpectedly for value: ${String(value)}`);
37+
}
38+
39+
nsolid.start({
40+
metricsBatchSize: defaultBatchSize,
41+
metricsBufferSize: defaultBufferSize
42+
});
43+
assert.strictEqual(nsolid.config.metricsBatchSize, defaultBatchSize);
44+
assert.strictEqual(nsolid.config.metricsBufferSize, defaultBufferSize);

0 commit comments

Comments
 (0)