| 'use strict'; |
| |
| // This tests that user land snapshots works when the instance restored from |
| // the snapshot is launched with --help, --check |
| |
| 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(); |
| |
| let snapshotScript = 'node:embedded_snapshot_main'; |
| if (!process.config.variables.node_use_node_snapshot) { |
| // Check that Node.js built without an embedded snapshot |
| // exits with 1 when node:embedded_snapshot_main is specified |
| // as snapshot entry point. |
| const child = spawnSync(process.execPath, [ |
| '--build-snapshot', |
| snapshotScript, |
| ], { |
| cwd: tmpdir.path |
| }); |
| |
| assert.match( |
| child.stderr.toString(), |
| /Node\.js was built without embedded snapshot/); |
| assert.strictEqual(child.status, 1); |
| |
| snapshotScript = fixtures.path('empty.js'); |
| } |
| |
| // By default, the snapshot blob path is cwd/snapshot.blob. |
| { |
| // Create the snapshot. |
| const child = spawnSync(process.execPath, [ |
| '--build-snapshot', |
| snapshotScript, |
| ], { |
| cwd: tmpdir.path |
| }); |
| if (child.status !== 0) { |
| console.log(child.stderr.toString()); |
| console.log(child.stdout.toString()); |
| console.log(child.signal); |
| assert.strictEqual(child.status, 0); |
| } |
| const stats = fs.statSync(path.join(tmpdir.path, 'snapshot.blob')); |
| assert(stats.isFile()); |
| } |
| |
| tmpdir.refresh(); |
| const blobPath = path.join(tmpdir.path, 'my-snapshot.blob'); |
| { |
| // Create the snapshot. |
| const child = spawnSync(process.execPath, [ |
| '--snapshot-blob', |
| blobPath, |
| '--build-snapshot', |
| snapshotScript, |
| ], { |
| cwd: tmpdir.path |
| }); |
| if (child.status !== 0) { |
| console.log(child.stderr.toString()); |
| console.log(child.stdout.toString()); |
| console.log(child.signal); |
| assert.strictEqual(child.status, 0); |
| } |
| const stats = fs.statSync(blobPath); |
| assert(stats.isFile()); |
| } |
| |
| { |
| // Check --help. |
| const child = spawnSync(process.execPath, [ |
| '--snapshot-blob', |
| blobPath, |
| '--help', |
| ], { |
| cwd: tmpdir.path |
| }); |
| |
| if (child.status !== 0) { |
| console.log(child.stderr.toString()); |
| console.log(child.stdout.toString()); |
| console.log(child.signal); |
| assert.strictEqual(child.status, 0); |
| } |
| |
| assert(child.stdout.toString().includes('--help')); |
| } |
| |
| { |
| // Check -c. |
| const child = spawnSync(process.execPath, [ |
| '--snapshot-blob', |
| blobPath, |
| '-c', |
| fixtures.path('snapshot', 'marked.js'), |
| ], { |
| cwd: tmpdir.path |
| }); |
| |
| // Check that it is a noop. |
| assert.strictEqual(child.stdout.toString().trim(), ''); |
| assert.strictEqual(child.stderr.toString().trim(), ''); |
| assert.strictEqual(child.status, 0); |
| } |