| 'use strict'; |
| |
| // This tests that Node.js refuses to load snapshots built with incompatible |
| // V8 configurations. |
| |
| require('../common'); |
| const assert = require('assert'); |
| const { spawnSync } = require('child_process'); |
| const tmpdir = require('../common/tmpdir'); |
| const fixtures = require('../common/fixtures'); |
| const path = require('path'); |
| const fs = require('fs'); |
| |
| tmpdir.refresh(); |
| const blobPath = path.join(tmpdir.path, 'snapshot.blob'); |
| const entry = fixtures.path('empty.js'); |
| |
| // The flag used can be any flag that makes a difference in |
| // v8::ScriptCompiler::CachedDataVersionTag(). --harmony |
| // is chosen here because it's stable enough and makes a difference. |
| { |
| // Build a snapshot with --harmony. |
| const child = spawnSync(process.execPath, [ |
| '--harmony', |
| '--snapshot-blob', |
| blobPath, |
| '--build-snapshot', |
| entry, |
| ], { |
| cwd: tmpdir.path |
| }); |
| if (child.status !== 0) { |
| console.log(child.stderr.toString()); |
| console.log(child.stdout.toString()); |
| assert.strictEqual(child.status, 0); |
| } |
| const stats = fs.statSync(path.join(tmpdir.path, 'snapshot.blob')); |
| assert(stats.isFile()); |
| } |
| |
| { |
| // Now load the snapshot without --harmony, which should fail. |
| const child = spawnSync(process.execPath, [ |
| '--snapshot-blob', |
| blobPath, |
| ], { |
| cwd: tmpdir.path, |
| env: { |
| ...process.env, |
| } |
| }); |
| |
| const stderr = child.stderr.toString().trim(); |
| assert.match(stderr, /Failed to load the startup snapshot/); |
| assert.strictEqual(child.status, 1); |
| } |
| |
| { |
| // Load it again with --harmony and it should work. |
| const child = spawnSync(process.execPath, [ |
| '--harmony', |
| '--snapshot-blob', |
| blobPath, |
| ], { |
| cwd: tmpdir.path, |
| env: { |
| ...process.env, |
| } |
| }); |
| |
| if (child.status !== 0) { |
| console.log(child.stderr.toString()); |
| console.log(child.stdout.toString()); |
| assert.strictEqual(child.status, 0); |
| } |
| } |