test: whitelist the expected modules in test-bootstrap-modules.js · nodejs/node@892282d (original) (raw)
`@@ -3,15 +3,131 @@
`
3
3
``
4
4
`// This list must be computed before we require any modules to
`
5
5
`// to eliminate the noise.
`
6
``
`-
const list = process.moduleLoadList.slice();
`
``
6
`+
const actualModules = new Set(process.moduleLoadList.slice());
`
7
7
``
8
8
`const common = require('../common');
`
9
9
`const assert = require('assert');
`
10
10
``
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
`+
]);
`
14
71
``
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) : ''));
`