From 0b564a6d407ccb08b980b53c443ee3a8625a42d7 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sun, 11 Jul 2021 14:43:15 -0700 Subject: [PATCH] test: add test for WebSocket secret verification in debugger PR-URL: https://github.com/nodejs/node/pull/39357 Refs: https://github.com/nodejs/node-inspect/pull/93 Reviewed-By: Colin Ihrig --- ...test-debugger-websocket-secret-mismatch.js | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 test/parallel/test-debugger-websocket-secret-mismatch.js diff --git a/test/parallel/test-debugger-websocket-secret-mismatch.js b/test/parallel/test-debugger-websocket-secret-mismatch.js new file mode 100644 index 00000000000000..9b7b50c518f186 --- /dev/null +++ b/test/parallel/test-debugger-websocket-secret-mismatch.js @@ -0,0 +1,54 @@ +'use strict'; + +const common = require('../common'); +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const childProcess = require('child_process'); +const http = require('http'); + +let port; + +const server = http.createServer(common.mustCall((req, res) => { + if (req.url.startsWith('/json')) { + res.writeHead(200); + res.end(`[ { + "description": "", + "devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:${port}/devtools/page/DAB7FB6187B554E10B0BD18821265734", + "cid": "DAB7FB6187B554E10B0BD18821265734", + "title": "Fhqwhgads", + "type": "page", + "url": "https://www.example.com/", + "webSocketDebuggerUrl": "ws://localhost:${port}/devtools/page/DAB7FB6187B554E10B0BD18821265734" + } ]`); + } else { + res.setHeader('Upgrade', 'websocket'); + res.setHeader('Connection', 'Upgrade'); + res.setHeader('Sec-WebSocket-Accept', 'fhqwhgads'); + res.setHeader('Sec-WebSocket-Protocol', 'chat'); + res.writeHead(101); + res.end(); + } +}, 2)).listen(0, common.mustCall(() => { + port = server.address().port; + const proc = + childProcess.spawn(process.execPath, ['inspect', `localhost:${port}`]); + + let stdout = ''; + proc.stdout.on('data', (data) => { + stdout += data.toString(); + assert.doesNotMatch(stdout, /\bok\b/); + }); + + let stderr = ''; + proc.stderr.on('data', (data) => { + stderr += data.toString(); + }); + + proc.on('exit', common.mustCall((code, signal) => { + assert.match(stderr, /\bWebSocket secret mismatch\b/); + assert.notStrictEqual(code, 0); + assert.strictEqual(signal, null); + server.close(); + })); +}));