1'use strict'; 2 3// This list must be computed before we require any modules to 4// to eliminate the noise. 5const actualModules = new Set(process.moduleLoadList.slice()); 6 7const common = require('../common'); 8const assert = require('assert'); 9 10const expectedModules = new Set([ 11 'Internal Binding errors', 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 fs_dir', 20 'Internal Binding inspector', 21 'Internal Binding messaging', 22 'Internal Binding module_wrap', 23 'Internal Binding native_module', 24 'Internal Binding options', 25 'Internal Binding process_methods', 26 'Internal Binding report', 27 'Internal Binding string_decoder', 28 'Internal Binding symbols', 29 'Internal Binding task_queue', 30 'Internal Binding timers', 31 'Internal Binding trace_events', 32 'Internal Binding types', 33 'Internal Binding url', 34 'Internal Binding util', 35 'NativeModule buffer', 36 'NativeModule events', 37 'NativeModule fs', 38 'NativeModule internal/assert', 39 'NativeModule internal/async_hooks', 40 'NativeModule internal/bootstrap/pre_execution', 41 'NativeModule internal/buffer', 42 'NativeModule internal/console/constructor', 43 'NativeModule internal/console/global', 44 'NativeModule internal/constants', 45 'NativeModule internal/encoding', 46 'NativeModule internal/errors', 47 'NativeModule internal/fixed_queue', 48 'NativeModule internal/fs/dir', 49 'NativeModule internal/fs/utils', 50 'NativeModule internal/idna', 51 'NativeModule internal/linkedlist', 52 'NativeModule internal/modules/run_main', 53 'NativeModule internal/modules/package_json_reader', 54 'NativeModule internal/modules/cjs/helpers', 55 'NativeModule internal/modules/cjs/loader', 56 'NativeModule internal/modules/esm/create_dynamic_module', 57 'NativeModule internal/modules/esm/get_format', 58 'NativeModule internal/modules/esm/get_source', 59 'NativeModule internal/modules/esm/loader', 60 'NativeModule internal/modules/esm/module_job', 61 'NativeModule internal/modules/esm/module_map', 62 'NativeModule internal/modules/esm/resolve', 63 'NativeModule internal/modules/esm/transform_source', 64 'NativeModule internal/modules/esm/translators', 65 'NativeModule internal/process/esm_loader', 66 'NativeModule internal/options', 67 'NativeModule internal/priority_queue', 68 'NativeModule internal/process/execution', 69 'NativeModule internal/process/per_thread', 70 'NativeModule internal/process/promises', 71 'NativeModule internal/process/report', 72 'NativeModule internal/process/signal', 73 'NativeModule internal/process/task_queues', 74 'NativeModule internal/process/warning', 75 'NativeModule internal/querystring', 76 'NativeModule internal/source_map/source_map_cache', 77 'NativeModule internal/timers', 78 'NativeModule internal/url', 79 'NativeModule internal/util', 80 'NativeModule internal/util/debuglog', 81 'NativeModule internal/util/inspect', 82 'NativeModule internal/util/types', 83 'NativeModule internal/validators', 84 'NativeModule internal/vm/module', 85 'NativeModule internal/worker/js_transferable', 86 'NativeModule path', 87 'NativeModule timers', 88 'NativeModule url', 89 'NativeModule vm', 90]); 91 92if (!common.isMainThread) { 93 expectedModules.add('Internal Binding messaging'); 94 expectedModules.add('Internal Binding symbols'); 95 expectedModules.add('Internal Binding worker'); 96 expectedModules.add('NativeModule _stream_duplex'); 97 expectedModules.add('NativeModule _stream_passthrough'); 98 expectedModules.add('NativeModule _stream_readable'); 99 expectedModules.add('NativeModule _stream_transform'); 100 expectedModules.add('NativeModule _stream_writable'); 101 expectedModules.add('NativeModule internal/error_serdes'); 102 expectedModules.add('NativeModule internal/process/worker_thread_only'); 103 expectedModules.add('NativeModule internal/streams/buffer_list'); 104 expectedModules.add('NativeModule internal/streams/destroy'); 105 expectedModules.add('NativeModule internal/streams/end-of-stream'); 106 expectedModules.add('NativeModule internal/streams/legacy'); 107 expectedModules.add('NativeModule internal/streams/pipeline'); 108 expectedModules.add('NativeModule internal/streams/state'); 109 expectedModules.add('NativeModule internal/worker'); 110 expectedModules.add('NativeModule internal/worker/io'); 111 expectedModules.add('NativeModule stream'); 112 expectedModules.add('NativeModule worker_threads'); 113} 114 115if (common.hasIntl) { 116 expectedModules.add('Internal Binding icu'); 117} else { 118 expectedModules.add('NativeModule punycode'); 119} 120 121if (process.features.inspector) { 122 expectedModules.add('NativeModule internal/inspector_async_hook'); 123 expectedModules.add('NativeModule internal/util/inspector'); 124} 125 126if (process.env.NODE_V8_COVERAGE) { 127 expectedModules.add('Internal Binding profiler'); 128} 129 130const difference = (setA, setB) => { 131 return new Set([...setA].filter((x) => !setB.has(x))); 132}; 133const missingModules = difference(expectedModules, actualModules); 134const extraModules = difference(actualModules, expectedModules); 135const printSet = (s) => { return `${[...s].sort().join(',\n ')}\n`; }; 136 137assert.deepStrictEqual(actualModules, expectedModules, 138 (missingModules.size > 0 ? 139 'These modules were not loaded:\n ' + 140 printSet(missingModules) : '') + 141 (extraModules.size > 0 ? 142 'These modules were unexpectedly loaded:\n ' + 143 printSet(extraModules) : '')); 144