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