Skip to content

Commit 892282d

Browse files
richardlautargos
authored andcommitted
test: whitelist the expected modules in test-bootstrap-modules.js
Be explicit on the modules that are expected to be loaded and add an appropriate assertion failure message to help debug when the list changes. Fixes: #23884 PR-URL: #26531 Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
1 parent 9092e12 commit 892282d

File tree

1 file changed

+123
-7
lines changed

1 file changed

+123
-7
lines changed

test/parallel/test-bootstrap-modules.js

+123-7
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,131 @@
33

44
// This list must be computed before we require any modules to
55
// to eliminate the noise.
6-
const list = process.moduleLoadList.slice();
6+
const actualModules = new Set(process.moduleLoadList.slice());
77

88
const common = require('../common');
99
const assert = require('assert');
1010

11-
const isMainThread = common.isMainThread;
12-
const kCoverageModuleCount = process.env.NODE_V8_COVERAGE ? 1 : 0;
13-
const kMaxModuleCount = (isMainThread ? 65 : 88) + kCoverageModuleCount;
11+
const expectedModules = new Set([
12+
'Internal Binding async_wrap',
13+
'Internal Binding buffer',
14+
'Internal Binding config',
15+
'Internal Binding constants',
16+
'Internal Binding contextify',
17+
'Internal Binding credentials',
18+
'Internal Binding fs',
19+
'Internal Binding inspector',
20+
'Internal Binding messaging',
21+
'Internal Binding module_wrap',
22+
'Internal Binding native_module',
23+
'Internal Binding options',
24+
'Internal Binding process_methods',
25+
'Internal Binding task_queue',
26+
'Internal Binding timers',
27+
'Internal Binding trace_events',
28+
'Internal Binding types',
29+
'Internal Binding url',
30+
'Internal Binding util',
31+
'NativeModule buffer',
32+
'NativeModule events',
33+
'NativeModule fs',
34+
'NativeModule internal/assert',
35+
'NativeModule internal/async_hooks',
36+
'NativeModule internal/bootstrap/pre_execution',
37+
'NativeModule internal/buffer',
38+
'NativeModule internal/console/constructor',
39+
'NativeModule internal/console/global',
40+
'NativeModule internal/constants',
41+
'NativeModule internal/domexception',
42+
'NativeModule internal/encoding',
43+
'NativeModule internal/errors',
44+
'NativeModule internal/fixed_queue',
45+
'NativeModule internal/fs/utils',
46+
'NativeModule internal/idna',
47+
'NativeModule internal/linkedlist',
48+
'NativeModule internal/modules/cjs/helpers',
49+
'NativeModule internal/modules/cjs/loader',
50+
'NativeModule internal/options',
51+
'NativeModule internal/priority_queue',
52+
'NativeModule internal/process/execution',
53+
'NativeModule internal/process/next_tick',
54+
'NativeModule internal/process/per_thread',
55+
'NativeModule internal/process/promises',
56+
'NativeModule internal/process/warning',
57+
'NativeModule internal/querystring',
58+
'NativeModule internal/timers',
59+
'NativeModule internal/url',
60+
'NativeModule internal/util',
61+
'NativeModule internal/util/debuglog',
62+
'NativeModule internal/util/inspect',
63+
'NativeModule internal/util/types',
64+
'NativeModule internal/validators',
65+
'NativeModule path',
66+
'NativeModule timers',
67+
'NativeModule url',
68+
'NativeModule util',
69+
'NativeModule vm',
70+
]);
1471

15-
assert(list.length <= kMaxModuleCount,
16-
`Total length: ${list.length}\n` + list.join('\n')
17-
);
72+
if (common.isMainThread) {
73+
expectedModules.add('NativeModule internal/process/main_thread_only');
74+
expectedModules.add('NativeModule internal/process/stdio');
75+
} else {
76+
expectedModules.add('Internal Binding heap_utils');
77+
expectedModules.add('Internal Binding serdes');
78+
expectedModules.add('Internal Binding stream_wrap');
79+
expectedModules.add('Internal Binding symbols');
80+
expectedModules.add('Internal Binding uv');
81+
expectedModules.add('Internal Binding v8');
82+
expectedModules.add('Internal Binding worker');
83+
expectedModules.add('NativeModule _stream_duplex');
84+
expectedModules.add('NativeModule _stream_passthrough');
85+
expectedModules.add('NativeModule _stream_readable');
86+
expectedModules.add('NativeModule _stream_transform');
87+
expectedModules.add('NativeModule _stream_writable');
88+
expectedModules.add('NativeModule internal/error-serdes');
89+
expectedModules.add('NativeModule internal/process/worker_thread_only');
90+
expectedModules.add('NativeModule internal/stream_base_commons');
91+
expectedModules.add('NativeModule internal/streams/buffer_list');
92+
expectedModules.add('NativeModule internal/streams/destroy');
93+
expectedModules.add('NativeModule internal/streams/end-of-stream');
94+
expectedModules.add('NativeModule internal/streams/legacy');
95+
expectedModules.add('NativeModule internal/streams/pipeline');
96+
expectedModules.add('NativeModule internal/streams/state');
97+
expectedModules.add('NativeModule internal/worker');
98+
expectedModules.add('NativeModule internal/worker/io');
99+
expectedModules.add('NativeModule module');
100+
expectedModules.add('NativeModule stream');
101+
expectedModules.add('NativeModule v8');
102+
expectedModules.add('NativeModule worker_threads');
103+
}
104+
105+
if (common.hasIntl) {
106+
expectedModules.add('Internal Binding icu');
107+
} else {
108+
expectedModules.add('NativeModule punycode');
109+
}
110+
111+
if (process.features.inspector) {
112+
expectedModules.add('NativeModule internal/inspector_async_hook');
113+
expectedModules.add('NativeModule internal/util/inspector');
114+
}
115+
116+
if (process.env.NODE_V8_COVERAGE) {
117+
expectedModules.add('NativeModule internal/profiler');
118+
}
119+
120+
const difference = (setA, setB) => {
121+
return new Set([...setA].filter((x) => !setB.has(x)));
122+
};
123+
const missingModules = difference(expectedModules, actualModules);
124+
const extraModules = difference(actualModules, expectedModules);
125+
const printSet = (s) => { return `${[...s].sort().join(',\n ')}\n`; };
126+
127+
assert.deepStrictEqual(actualModules, expectedModules,
128+
(missingModules.size > 0 ?
129+
'These modules were not loaded:\n ' +
130+
printSet(missingModules) : '') +
131+
(extraModules.size > 0 ?
132+
'These modules were unexpectedly loaded:\n ' +
133+
printSet(extraModules) : ''));

0 commit comments

Comments
 (0)