diff options
author | Sam Roberts <vieuxtech@gmail.com> | 2017-05-25 19:00:24 -0700 |
---|---|---|
committer | Sam Roberts <vieuxtech@gmail.com> | 2017-06-06 14:41:17 -0700 |
commit | 2791b360c11324f7c9ed83350f264c500ade4fe8 (patch) | |
tree | 32c398bc37f0d864d294cc629167aa577c30f08c /test | |
parent | dcfbbacba8c22613b956c1a3b9d958676e5d5e87 (diff) | |
download | android-node-v8-2791b360c11324f7c9ed83350f264c500ade4fe8.tar.gz android-node-v8-2791b360c11324f7c9ed83350f264c500ade4fe8.tar.bz2 android-node-v8-2791b360c11324f7c9ed83350f264c500ade4fe8.zip |
inspector: allow --inspect=host:port from js
PR-URL: https://github.com/nodejs/node/pull/13228
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/parallel/test-inspector-open.js | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/test/parallel/test-inspector-open.js b/test/parallel/test-inspector-open.js new file mode 100644 index 0000000000..bc7d15a554 --- /dev/null +++ b/test/parallel/test-inspector-open.js @@ -0,0 +1,104 @@ +'use strict'; +const common = require('../common'); + +// Test inspector open()/close()/url() API. It uses ephemeral ports so can be +// run safely in parallel. + +const assert = require('assert'); +const fork = require('child_process').fork; +const net = require('net'); +const url = require('url'); + +common.skipIfInspectorDisabled(); + +if (process.env.BE_CHILD) + return beChild(); + +const child = fork(__filename, {env: {BE_CHILD: 1}}); + +child.once('message', common.mustCall((msg) => { + assert.strictEqual(msg.cmd, 'started'); + + child.send({cmd: 'open', args: [0]}); + child.once('message', common.mustCall(firstOpen)); +})); + +let firstPort; + +function firstOpen(msg) { + assert.strictEqual(msg.cmd, 'url'); + const port = url.parse(msg.url).port; + ping(port, (err) => { + assert.ifError(err); + // Inspector is already open, and won't be reopened, so args don't matter. + child.send({cmd: 'open', args: []}); + child.once('message', common.mustCall(tryToOpenWhenOpen)); + firstPort = port; + }); +} + +function tryToOpenWhenOpen(msg) { + assert.strictEqual(msg.cmd, 'url'); + const port = url.parse(msg.url).port; + // Reopen didn't do anything, the port was already open, and has not changed. + assert.strictEqual(port, firstPort); + ping(port, (err) => { + assert.ifError(err); + child.send({cmd: 'close'}); + child.once('message', common.mustCall(closeWhenOpen)); + }); +} + +function closeWhenOpen(msg) { + assert.strictEqual(msg.cmd, 'url'); + assert.strictEqual(msg.url, undefined); + ping(firstPort, (err) => { + assert(err); + child.send({cmd: 'close'}); + child.once('message', common.mustCall(tryToCloseWhenClosed)); + }); +} + +function tryToCloseWhenClosed(msg) { + assert.strictEqual(msg.cmd, 'url'); + assert.strictEqual(msg.url, undefined); + child.send({cmd: 'open', args: []}); + child.once('message', common.mustCall(reopenAfterClose)); +} + +function reopenAfterClose(msg) { + assert.strictEqual(msg.cmd, 'url'); + const port = url.parse(msg.url).port; + assert.notStrictEqual(port, firstPort); + ping(port, (err) => { + assert.ifError(err); + process.exit(); + }); +} + +function ping(port, callback) { + net.connect(port) + .on('connect', function() { close(this); }) + .on('error', function(err) { close(this, err); }); + + function close(self, err) { + self.end(); + self.on('close', () => callback(err)); + } +} + +function beChild() { + const inspector = require('inspector'); + + process.send({cmd: 'started'}); + + process.on('message', (msg) => { + if (msg.cmd === 'open') { + inspector.open(...msg.args); + } + if (msg.cmd === 'close') { + inspector.close(); + } + process.send({cmd: 'url', url: inspector.url()}); + }); +} |