'use strict'; // This test verifies that the binary is compiled with code cache and the // cache is used when built in modules are compiled. const common = require('../common'); const tmpdir = require('../common/tmpdir'); const { spawnSync } = require('child_process'); const assert = require('assert'); const path = require('path'); const fs = require('fs'); const readline = require('readline'); const generator = path.join( __dirname, '..', '..', 'tools', 'generate_code_cache.js' ); tmpdir.refresh(); const dest = path.join(tmpdir.path, 'cache.cc'); // Run tools/generate_code_cache.js const child = spawnSync( process.execPath, ['--expose-internals', generator, dest] ); assert.ifError(child.error); if (child.status !== 0) { console.log(child.stderr.toString()); assert.strictEqual(child.status, 0); } // Verifies that: // - node::LoadCodeCache() // are defined in the generated code. // See src/node_native_module.h for explanations. const rl = readline.createInterface({ input: fs.createReadStream(dest), crlfDelay: Infinity }); let hasCacheDef = false; rl.on('line', common.mustCallAtLeast((line) => { if (line.includes('LoadCodeCache(')) { hasCacheDef = true; } }, 2)); rl.on('close', common.mustCall(() => { assert.ok(hasCacheDef); }));