mirror of
https://github.com/nodejs/node.git
synced 2025-05-01 08:42:45 +00:00

This patch stores the metadata about the Node.js binary into the SnapshotData and adds fields denoting how the snapshot was generated, on what platform it was generated as well as the V8 cached data version flag. Instead of simply crashing when the metadata doesn't match, Node.js now prints an error message and exit with 1 for the customized snapshot, or ignore the snapshot and start from scratch if it's the default one. PR-URL: https://github.com/nodejs/node/pull/44132 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
77 lines
1.9 KiB
JavaScript
77 lines
1.9 KiB
JavaScript
'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);
|
|
}
|
|
}
|