• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Flags: --expose-internals
2'use strict';
3
4// This list must be computed before we require any modules to
5// to eliminate the noise.
6const actualModules = new Set(process.moduleLoadList.slice());
7
8const common = require('../common');
9const assert = require('assert');
10
11const expectedModules = new Set([
12  'Internal Binding async_wrap',
13  'Internal Binding block_list',
14  'Internal Binding buffer',
15  'Internal Binding builtins',
16  'Internal Binding config',
17  'Internal Binding constants',
18  'Internal Binding contextify',
19  'Internal Binding credentials',
20  'Internal Binding errors',
21  'Internal Binding fs_dir',
22  'Internal Binding fs_event_wrap',
23  'Internal Binding fs',
24  'Internal Binding heap_utils',
25  'Internal Binding mksnapshot',
26  'Internal Binding messaging',
27  'Internal Binding module_wrap',
28  'Internal Binding options',
29  'Internal Binding performance',
30  'Internal Binding pipe_wrap',
31  'Internal Binding process_methods',
32  'Internal Binding report',
33  'Internal Binding serdes',
34  'Internal Binding stream_wrap',
35  'Internal Binding string_decoder',
36  'Internal Binding symbols',
37  'Internal Binding task_queue',
38  'Internal Binding tcp_wrap',
39  'Internal Binding timers',
40  'Internal Binding trace_events',
41  'Internal Binding types',
42  'Internal Binding url',
43  'Internal Binding util',
44  'Internal Binding uv',
45  'Internal Binding v8',
46  'Internal Binding wasm_web_api',
47  'Internal Binding worker',
48  'NativeModule buffer',
49  'NativeModule events',
50  'NativeModule fs',
51  'NativeModule internal/abort_controller',
52  'NativeModule internal/assert',
53  'NativeModule internal/async_hooks',
54  'NativeModule internal/blocklist',
55  'NativeModule internal/buffer',
56  'NativeModule internal/console/constructor',
57  'NativeModule internal/console/global',
58  'NativeModule internal/constants',
59  'NativeModule internal/dtrace',
60  'NativeModule internal/dns/utils',
61  'NativeModule internal/encoding',
62  'NativeModule internal/errors',
63  'NativeModule internal/event_target',
64  'NativeModule internal/fixed_queue',
65  'NativeModule internal/fs/dir',
66  'NativeModule internal/fs/promises',
67  'NativeModule internal/fs/read_file_context',
68  'NativeModule internal/fs/rimraf',
69  'NativeModule internal/fs/utils',
70  'NativeModule internal/fs/watchers',
71  'NativeModule internal/heap_utils',
72  'NativeModule internal/histogram',
73  'NativeModule internal/idna',
74  'NativeModule internal/linkedlist',
75  'NativeModule internal/mime',
76  'NativeModule internal/modules/cjs/helpers',
77  'NativeModule internal/modules/cjs/loader',
78  'NativeModule internal/modules/esm/assert',
79  'NativeModule internal/modules/esm/create_dynamic_module',
80  'NativeModule internal/modules/esm/fetch_module',
81  'NativeModule internal/modules/esm/formats',
82  'NativeModule internal/modules/esm/get_format',
83  'NativeModule internal/modules/esm/handle_process_exit',
84  'NativeModule internal/modules/esm/initialize_import_meta',
85  'NativeModule internal/modules/esm/load',
86  'NativeModule internal/modules/esm/loader',
87  'NativeModule internal/modules/esm/module_job',
88  'NativeModule internal/modules/esm/module_map',
89  'NativeModule internal/modules/esm/package_config',
90  'NativeModule internal/modules/esm/resolve',
91  'NativeModule internal/modules/esm/translators',
92  'NativeModule internal/modules/package_json_reader',
93  'NativeModule internal/modules/run_main',
94  'NativeModule internal/net',
95  'NativeModule internal/options',
96  'NativeModule internal/perf/event_loop_delay',
97  'NativeModule internal/perf/event_loop_utilization',
98  'NativeModule internal/perf/nodetiming',
99  'NativeModule internal/perf/observe',
100  'NativeModule internal/perf/performance_entry',
101  'NativeModule internal/perf/performance',
102  'NativeModule internal/perf/timerify',
103  'NativeModule internal/perf/usertiming',
104  'NativeModule internal/perf/resource_timing',
105  'NativeModule internal/perf/utils',
106  'NativeModule internal/priority_queue',
107  'NativeModule internal/process/esm_loader',
108  'NativeModule internal/process/execution',
109  'NativeModule internal/process/per_thread',
110  'NativeModule internal/process/pre_execution',
111  'NativeModule internal/process/promises',
112  'NativeModule internal/process/report',
113  'NativeModule internal/process/signal',
114  'NativeModule internal/process/task_queues',
115  'NativeModule internal/process/warning',
116  'NativeModule internal/promise_hooks',
117  'NativeModule internal/querystring',
118  'NativeModule internal/readline/callbacks',
119  'NativeModule internal/readline/interface',
120  'NativeModule internal/readline/utils',
121  'NativeModule internal/socketaddress',
122  'NativeModule internal/source_map/source_map_cache',
123  'NativeModule internal/stream_base_commons',
124  'NativeModule internal/streams/add-abort-signal',
125  'NativeModule internal/streams/buffer_list',
126  'NativeModule internal/streams/compose',
127  'NativeModule internal/streams/destroy',
128  'NativeModule internal/streams/duplex',
129  'NativeModule internal/streams/end-of-stream',
130  'NativeModule internal/streams/from',
131  'NativeModule internal/streams/legacy',
132  'NativeModule internal/streams/operators',
133  'NativeModule internal/streams/passthrough',
134  'NativeModule internal/streams/pipeline',
135  'NativeModule internal/streams/readable',
136  'NativeModule internal/streams/state',
137  'NativeModule internal/streams/transform',
138  'NativeModule internal/streams/utils',
139  'NativeModule internal/streams/writable',
140  'NativeModule internal/structured_clone',
141  'NativeModule internal/timers',
142  'NativeModule internal/url',
143  'NativeModule internal/util',
144  'NativeModule internal/util/debuglog',
145  'NativeModule internal/util/inspect',
146  'NativeModule internal/util/iterable_weak_map',
147  'NativeModule internal/util/parse_args/utils',
148  'NativeModule internal/util/parse_args/parse_args',
149  'NativeModule internal/util/types',
150  'NativeModule internal/validators',
151  'NativeModule internal/vm',
152  'NativeModule internal/vm/module',
153  'NativeModule internal/wasm_web_api',
154  'NativeModule internal/webidl',
155  'NativeModule internal/webstreams/adapters',
156  'NativeModule internal/webstreams/compression',
157  'NativeModule internal/webstreams/encoding',
158  'NativeModule internal/webstreams/queuingstrategies',
159  'NativeModule internal/webstreams/readablestream',
160  'NativeModule internal/webstreams/transformstream',
161  'NativeModule internal/webstreams/util',
162  'NativeModule internal/webstreams/writablestream',
163  'NativeModule internal/worker/io',
164  'NativeModule internal/worker/js_transferable',
165  'Internal Binding blob',
166  'NativeModule internal/blob',
167  'NativeModule internal/file',
168  'NativeModule async_hooks',
169  'NativeModule net',
170  'NativeModule path',
171  'NativeModule perf_hooks',
172  'NativeModule querystring',
173  'NativeModule stream',
174  'NativeModule stream/promises',
175  'NativeModule string_decoder',
176  'NativeModule timers',
177  'NativeModule url',
178  'NativeModule util',
179  'NativeModule v8',
180  'NativeModule internal/v8/startup_snapshot',
181  'NativeModule vm',
182]);
183
184if (!common.isMainThread) {
185  [
186    'Internal Binding messaging',
187    'Internal Binding performance',
188    'Internal Binding symbols',
189    'Internal Binding worker',
190    'NativeModule internal/streams/duplex',
191    'NativeModule internal/streams/passthrough',
192    'NativeModule internal/streams/readable',
193    'NativeModule internal/streams/transform',
194    'NativeModule internal/streams/writable',
195    'NativeModule internal/error_serdes',
196    'NativeModule internal/process/worker_thread_only',
197    'NativeModule internal/streams/buffer_list',
198    'NativeModule internal/streams/destroy',
199    'NativeModule internal/streams/end-of-stream',
200    'NativeModule internal/streams/legacy',
201    'NativeModule internal/streams/pipeline',
202    'NativeModule internal/streams/state',
203    'NativeModule internal/worker',
204    'NativeModule internal/worker/io',
205    'NativeModule stream',
206    'NativeModule worker_threads',
207  ].forEach(expectedModules.add.bind(expectedModules));
208}
209
210if (common.hasIntl) {
211  expectedModules.add('Internal Binding icu');
212} else {
213  expectedModules.add('NativeModule url');
214}
215
216if (process.features.inspector) {
217  expectedModules.add('Internal Binding inspector');
218  expectedModules.add('NativeModule internal/inspector_async_hook');
219  expectedModules.add('NativeModule internal/util/inspector');
220  expectedModules.add('Internal Binding profiler');
221}
222
223if (process.env.NODE_V8_COVERAGE) {
224  expectedModules.add('Internal Binding profiler');
225}
226
227if (common.hasCrypto) {
228  expectedModules.add('Internal Binding crypto');
229  expectedModules.add('NativeModule crypto');
230  expectedModules.add('NativeModule internal/crypto/certificate');
231  expectedModules.add('NativeModule internal/crypto/cipher');
232  expectedModules.add('NativeModule internal/crypto/diffiehellman');
233  expectedModules.add('NativeModule internal/crypto/hash');
234  expectedModules.add('NativeModule internal/crypto/hashnames');
235  expectedModules.add('NativeModule internal/crypto/hkdf');
236  expectedModules.add('NativeModule internal/crypto/keygen');
237  expectedModules.add('NativeModule internal/crypto/keys');
238  expectedModules.add('NativeModule internal/crypto/pbkdf2');
239  expectedModules.add('NativeModule internal/crypto/random');
240  expectedModules.add('NativeModule internal/crypto/scrypt');
241  expectedModules.add('NativeModule internal/crypto/sig');
242  expectedModules.add('NativeModule internal/crypto/util');
243  expectedModules.add('NativeModule internal/crypto/x509');
244  expectedModules.add('NativeModule internal/streams/lazy_transform');
245}
246
247const { internalBinding } = require('internal/test/binding');
248if (internalBinding('config').hasDtrace) {
249  expectedModules.add('Internal Binding dtrace');
250}
251
252const difference = (setA, setB) => {
253  return new Set([...setA].filter((x) => !setB.has(x)));
254};
255const missingModules = difference(expectedModules, actualModules);
256const extraModules = difference(actualModules, expectedModules);
257const printSet = (s) => { return `${[...s].sort().join(',\n  ')}\n`; };
258
259assert.deepStrictEqual(actualModules, expectedModules,
260                       (missingModules.size > 0 ?
261                         'These modules were not loaded:\n  ' +
262                         printSet(missingModules) : '') +
263                       (extraModules.size > 0 ?
264                         'These modules were unexpectedly loaded:\n  ' +
265                         printSet(extraModules) : ''));
266