From f576dbd74cd4b27a2de22881962bde6959387127 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Thu, 30 Jan 2025 21:05:17 -0500 Subject: [PATCH 1/7] feat: http2 support --- .github/workflows/ci.yml | 5 +- package.json | 5 +- test/support/servers.js | 49 ++++++++++++++ test/test.js | 138 +++++++++++++++++++++------------------ 4 files changed, 131 insertions(+), 66 deletions(-) create mode 100644 test/support/servers.js diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8a4fbad..50cac2f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,7 @@ jobs: test: runs-on: ubuntu-20.04 strategy: + fail-fast: false matrix: name: - Node.js 0.8 @@ -72,11 +73,11 @@ jobs: - name: Node.js 6.x node-version: "6.17" - npm-i: mocha@6.2.2 nyc@14.1.1 + npm-i: mocha@6.2.2 nyc@14.1.1 supertest@6.1.6 - name: Node.js 7.x node-version: "7.10" - npm-i: mocha@6.2.2 nyc@14.1.1 + npm-i: mocha@6.2.2 nyc@14.1.1 supertest@6.1.6 - name: Node.js 8.x node-version: "8.17" diff --git a/package.json b/package.json index 03fb940..1e9cff1 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "event", "headers", "http", + "http2", "onheaders" ], "repository": "jshttp/on-headers", @@ -21,7 +22,7 @@ "eslint-plugin-standard": "4.0.1", "mocha": "10.2.0", "nyc": "15.1.0", - "supertest": "4.0.2" + "supertest": "6.3.4" }, "files": [ "LICENSE", @@ -34,7 +35,7 @@ }, "scripts": { "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --bail --check-leaks test/", + "test": "mocha --reporter spec --check-leaks test/", "test-ci": "nyc --reporter=lcov --reporter=text npm test", "test-cov": "nyc --reporter=html --reporter=text npm test", "version": "node scripts/version-history.js && git add HISTORY.md" diff --git a/test/support/servers.js b/test/support/servers.js new file mode 100644 index 0000000..8493946 --- /dev/null +++ b/test/support/servers.js @@ -0,0 +1,49 @@ +var http = require('http') +var http2 + +var onHeaders = require('../..') + +try { + http2 = require('http2') +} catch (e) {} + +exports.createHTTPServer = createHTTPServer +exports.createHTTP2Server = createHTTP2Server + +function createHTTPServer (listener, handler) { + var fn = handler || echoHandler + + return http.createServer(function (req, res) { + try { + onHeaders(res, listener) + fn(req, res) + res.statusCode = 200 + } catch (err) { + res.statusCode = 500 + res.write(err.message) + } finally { + res.end() + } + }) +} + +function createHTTP2Server (listener, handler) { + var fn = handler || echoHandler + + return http2.createServer(function (req, res) { + try { + onHeaders(res, listener) + fn(req, res) + res.statusCode = 200 + } catch (err) { + res.statusCode = 500 + res.write(err.message) + } finally { + res.end() + } + }) +} + +function echoHandler (req, res) { + res.setHeader('X-Outgoing', 'test') +} diff --git a/test/test.js b/test/test.js index 6159695..090e6e4 100644 --- a/test/test.js +++ b/test/test.js @@ -1,15 +1,39 @@ var assert = require('assert') var http = require('http') +var http2 var onHeaders = require('..') var request = require('supertest') +var server = require('./support/servers') -describe('onHeaders(res, listener)', function () { - it('should fire after setHeader', function (done) { - var server = createServer(echoListener) +try { + http2 = require('http2') +} catch (e) {} + +var createHTTPServer = server.createHTTPServer +var createHTTP2Server = server.createHTTP2Server + +// TODO: status message is not supported + +var topDescribe = function (type, createServer) { + var wrapper = function wrapper (req) { + if (type === 'http2') { + return req.http2() + } + + return req + } - request(server) - .get('/') + describe('onHeaders(res, listener)', function () { + it('should fire after setHeader', function (done) { + wrapper(request(createServer(echoListener)).get('/')) + .expect('X-Outgoing-Echo', 'test') + .expect(200, done) + }) + }) + + it('should fire after setHeader', function (done) { + wrapper(request(createServer(echoListener)).get('/')) .expect('X-Outgoing-Echo', 'test') .expect(200, done) }) @@ -22,8 +46,7 @@ describe('onHeaders(res, listener)', function () { res.write('1') } - request(server) - .get('/') + wrapper(request(server).get('/')) .expect('X-Outgoing-Echo', 'test') .expect(200, '1', done) }) @@ -37,8 +60,7 @@ describe('onHeaders(res, listener)', function () { this.setHeader('X-Headers', getAllHeaderNames(this).join(',')) } - request(server) - .get('/') + wrapper(request(server).get('/')) .expect('X-Headers', '') .expect(200, done) }) @@ -57,8 +79,7 @@ describe('onHeaders(res, listener)', function () { count++ } - request(server) - .get('/') + wrapper(request(server).get('/')) .expect(200, function (err) { if (err) return done(err) assert.strictEqual(count, 1) @@ -76,8 +97,7 @@ describe('onHeaders(res, listener)', function () { res.setHeader('X-Outgoing', 'test') } - request(server) - .get('/') + wrapper(request(server).get('/')) .expect('X-Outgoing-Echo', 'test,3,2,1') .expect(200, done) }) @@ -93,16 +113,15 @@ describe('onHeaders(res, listener)', function () { it('should be required', function (done) { var server = createServer() - request(server) - .get('/') + wrapper(request(server) + .get('/')) .expect(500, /listener.*function/, done) }) it('should only accept function', function (done) { var server = createServer(42) - request(server) - .get('/') + wrapper(request(server).get('/')) .expect(500, /listener.*function/, done) }) }) @@ -112,8 +131,7 @@ describe('onHeaders(res, listener)', function () { it('should be available in listener', function (done) { var server = createServer(echoListener) - request(server) - .get('/') + wrapper(request(server).get('/')) .expect('X-Outgoing-Echo', 'test') .expect(200, done) }) @@ -131,8 +149,7 @@ describe('onHeaders(res, listener)', function () { this.setHeader('X-Status', this.statusCode) } - request(server) - .get('/') + wrapper(request(server).get('/')) .expect('X-Status', '201') .expect(201, done) }) @@ -149,8 +166,7 @@ describe('onHeaders(res, listener)', function () { this.statusCode = 202 } - request(server) - .get('/') + wrapper(request(server).get('/')) .expect('X-Status', '201') .expect(202, done) }) @@ -162,26 +178,33 @@ describe('onHeaders(res, listener)', function () { res.writeHead() // error } - request(server) - .get('/') + wrapper(request(server).get('/')) .expect(500, done) }) it('should retain return value', function (done) { - var server = http.createServer(function (req, res) { + function callbackServer (req, res) { if (req.url === '/attach') { onHeaders(res, appendHeader(1)) } res.end(typeof res.writeHead(200)) - }) + } - request(server) - .get('/') + var server + if (type === 'http') { + server = http.createServer(callbackServer) + } else { + server = http2.createServer(callbackServer) + } + + wrapper(request(server).get('/')) .expect(200, function (err, res) { + // return done(err) if (err) return done(err) - request(server) - .get('/attach') + + wrapper(request(server) + .get('/attach')) .expect(200, res.text, done) }) }) @@ -196,8 +219,7 @@ describe('onHeaders(res, listener)', function () { res.writeHead(200, 'OK') } - request(server) - .get('/') + wrapper(request(server).get('/')) .expect('X-Outgoing-Echo', 'test') .expect(200, done) }) @@ -211,8 +233,7 @@ describe('onHeaders(res, listener)', function () { res.writeHead(200, 'OK', { 'X-Outgoing': 'test' }) } - request(server) - .get('/') + wrapper(request(server).get('/')) .expect('X-Outgoing-Echo', 'test') .expect(200, done) }) @@ -231,8 +252,7 @@ describe('onHeaders(res, listener)', function () { this.setHeader('X-Outgoing-Echo', this.getHeader('X-Outgoing')) } - request(server) - .get('/') + wrapper(request(server).get('/')) .expect('X-Status', '201') .expect('X-Outgoing-Echo', 'test') .expect(201, done) @@ -250,8 +270,7 @@ describe('onHeaders(res, listener)', function () { this.setHeader('X-Outgoing-Echo', this.getHeader('X-Outgoing')) } - request(server) - .get('/') + wrapper(request(server).get('/')) .expect('X-Status', '201') .expect('X-Outgoing-Echo', 'test') .expect(201, done) @@ -271,30 +290,12 @@ describe('onHeaders(res, listener)', function () { this.setHeader('X-Outgoing-Echo', this.getHeader('X-Outgoing')) } - request(server) - .get('/') + wrapper(request(server).get('/')) .expect('X-Status', '201') .expect('X-Outgoing-Echo', 'test') .expect(201, done) }) }) -}) - -function createServer (listener, handler) { - var fn = handler || echoHandler - - return http.createServer(function (req, res) { - try { - onHeaders(res, listener) - fn(req, res) - res.statusCode = 200 - } catch (err) { - res.statusCode = 500 - res.write(err.message) - } finally { - res.end() - } - }) } function appendHeader (num) { @@ -303,10 +304,6 @@ function appendHeader (num) { } } -function echoHandler (req, res) { - res.setHeader('X-Outgoing', 'test') -} - function echoListener () { this.setHeader('X-Outgoing-Echo', this.getHeader('X-Outgoing')) } @@ -316,3 +313,20 @@ function getAllHeaderNames (res) { ? Object.keys(this._headers || {}) : res.getHeaderNames() } + +var servers = [ + ['http', createHTTPServer] +] + +var nodeVersion = process.versions.node.split('.').map(Number) + +// `superagent` only supports `http2` since Node.js@10 +if (http2 && nodeVersion[0] >= 10) { + servers.push(['http2', createHTTP2Server]) +} + +for (var i = 0; i < servers.length; i++) { + var tests = topDescribe.bind(undefined, servers[i][0], servers[i][1]) + + describe(servers[i][0], tests) +} From 132c1cc6c09027cabdab75a0172b6fca5b943a14 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Fri, 31 Jan 2025 08:49:46 -0500 Subject: [PATCH 2/7] remove comments --- test/test.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/test.js b/test/test.js index 090e6e4..51923b1 100644 --- a/test/test.js +++ b/test/test.js @@ -13,8 +13,6 @@ try { var createHTTPServer = server.createHTTPServer var createHTTP2Server = server.createHTTP2Server -// TODO: status message is not supported - var topDescribe = function (type, createServer) { var wrapper = function wrapper (req) { if (type === 'http2') { @@ -200,7 +198,6 @@ var topDescribe = function (type, createServer) { wrapper(request(server).get('/')) .expect(200, function (err, res) { - // return done(err) if (err) return done(err) wrapper(request(server) From df3ee1cfb726ea249f112a884e480b09136c07b2 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Fri, 31 Jan 2025 09:07:24 -0500 Subject: [PATCH 3/7] refactor tests --- test/test.js | 67 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 26 deletions(-) diff --git a/test/test.js b/test/test.js index 51923b1..193bf98 100644 --- a/test/test.js +++ b/test/test.js @@ -14,24 +14,24 @@ var createHTTPServer = server.createHTTPServer var createHTTP2Server = server.createHTTP2Server var topDescribe = function (type, createServer) { - var wrapper = function wrapper (req) { - if (type === 'http2') { - return req.http2() - } + var options - return req + if (type === 'http2') { + options = { http2: true } } describe('onHeaders(res, listener)', function () { it('should fire after setHeader', function (done) { - wrapper(request(createServer(echoListener)).get('/')) + request(createServer(echoListener), options) + .get('/') .expect('X-Outgoing-Echo', 'test') .expect(200, done) }) }) it('should fire after setHeader', function (done) { - wrapper(request(createServer(echoListener)).get('/')) + request(createServer(echoListener), options) + .get('/') .expect('X-Outgoing-Echo', 'test') .expect(200, done) }) @@ -44,7 +44,8 @@ var topDescribe = function (type, createServer) { res.write('1') } - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect('X-Outgoing-Echo', 'test') .expect(200, '1', done) }) @@ -58,7 +59,8 @@ var topDescribe = function (type, createServer) { this.setHeader('X-Headers', getAllHeaderNames(this).join(',')) } - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect('X-Headers', '') .expect(200, done) }) @@ -77,7 +79,8 @@ var topDescribe = function (type, createServer) { count++ } - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect(200, function (err) { if (err) return done(err) assert.strictEqual(count, 1) @@ -95,7 +98,8 @@ var topDescribe = function (type, createServer) { res.setHeader('X-Outgoing', 'test') } - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect('X-Outgoing-Echo', 'test,3,2,1') .expect(200, done) }) @@ -111,15 +115,16 @@ var topDescribe = function (type, createServer) { it('should be required', function (done) { var server = createServer() - wrapper(request(server) - .get('/')) + request(server, options) + .get('/') .expect(500, /listener.*function/, done) }) it('should only accept function', function (done) { var server = createServer(42) - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect(500, /listener.*function/, done) }) }) @@ -129,7 +134,8 @@ var topDescribe = function (type, createServer) { it('should be available in listener', function (done) { var server = createServer(echoListener) - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect('X-Outgoing-Echo', 'test') .expect(200, done) }) @@ -147,7 +153,8 @@ var topDescribe = function (type, createServer) { this.setHeader('X-Status', this.statusCode) } - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect('X-Status', '201') .expect(201, done) }) @@ -164,7 +171,8 @@ var topDescribe = function (type, createServer) { this.statusCode = 202 } - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect('X-Status', '201') .expect(202, done) }) @@ -176,7 +184,8 @@ var topDescribe = function (type, createServer) { res.writeHead() // error } - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect(500, done) }) @@ -196,12 +205,13 @@ var topDescribe = function (type, createServer) { server = http2.createServer(callbackServer) } - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect(200, function (err, res) { if (err) return done(err) - wrapper(request(server) - .get('/attach')) + request(server, options) + .get('/attach') .expect(200, res.text, done) }) }) @@ -216,7 +226,8 @@ var topDescribe = function (type, createServer) { res.writeHead(200, 'OK') } - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect('X-Outgoing-Echo', 'test') .expect(200, done) }) @@ -230,7 +241,8 @@ var topDescribe = function (type, createServer) { res.writeHead(200, 'OK', { 'X-Outgoing': 'test' }) } - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect('X-Outgoing-Echo', 'test') .expect(200, done) }) @@ -249,7 +261,8 @@ var topDescribe = function (type, createServer) { this.setHeader('X-Outgoing-Echo', this.getHeader('X-Outgoing')) } - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect('X-Status', '201') .expect('X-Outgoing-Echo', 'test') .expect(201, done) @@ -267,7 +280,8 @@ var topDescribe = function (type, createServer) { this.setHeader('X-Outgoing-Echo', this.getHeader('X-Outgoing')) } - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect('X-Status', '201') .expect('X-Outgoing-Echo', 'test') .expect(201, done) @@ -287,7 +301,8 @@ var topDescribe = function (type, createServer) { this.setHeader('X-Outgoing-Echo', this.getHeader('X-Outgoing')) } - wrapper(request(server).get('/')) + request(server, options) + .get('/') .expect('X-Status', '201') .expect('X-Outgoing-Echo', 'test') .expect(201, done) From eeea8392fc9471b2a01ae7fd5e299d812e85e5cc Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Sun, 18 May 2025 20:18:27 -0500 Subject: [PATCH 4/7] [WIP]: support http2stream Signed-off-by: Sebastian Beltran --- index.js | 8 +++++++- test/support/servers.js | 30 ++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/index.js b/index.js index 7db6375..0b7bc71 100644 --- a/index.js +++ b/index.js @@ -62,7 +62,13 @@ function onHeaders (res, listener) { throw new TypeError('argument listener must be a function') } - res.writeHead = createWriteHead(res.writeHead, listener) + if (res.writeHead) { + res.writeHead = createWriteHead(res.writeHead, listener) + } + + if (res.respond) { + res.respond = createWriteHead(res.respond, listener) + } } /** diff --git a/test/support/servers.js b/test/support/servers.js index 8493946..cc9796b 100644 --- a/test/support/servers.js +++ b/test/support/servers.js @@ -28,22 +28,36 @@ function createHTTPServer (listener, handler) { } function createHTTP2Server (listener, handler) { - var fn = handler || echoHandler + var fn = handler || echoHandlerHTTP2 + + var server = http2.createServer() - return http2.createServer(function (req, res) { + server.on('stream', function (stream, headers) { try { - onHeaders(res, listener) - fn(req, res) - res.statusCode = 200 + onHeaders(stream, listener) + fn(headers, stream) + stream.respond({ + ':status': 200 + }) } catch (err) { - res.statusCode = 500 - res.write(err.message) + stream.respond({ + ':status': 500 + }) + stream.write(err.message) } finally { - res.end() + stream.end() } }) + + return server } function echoHandler (req, res) { res.setHeader('X-Outgoing', 'test') } + +function echoHandlerHTTP2 (stream) { + stream.additionalHeaders({ + 'X-Outgoing': 'test' + }) +} From 5fabe6a79335bad3cf014d4bdad247e6e5937702 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Mon, 19 May 2025 08:55:46 -0500 Subject: [PATCH 5/7] support nodejs compatibility mode Signed-off-by: Sebastian Beltran --- .github/workflows/ci.yml | 2 +- package.json | 2 +- test/support/servers.js | 21 +++++++++++++++++++-- test/test.js | 3 +-- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 50cac2f..a3e8fe4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ on: jobs: test: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest strategy: fail-fast: false matrix: diff --git a/package.json b/package.json index 1e9cff1..527b348 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ }, "scripts": { "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --check-leaks test/", + "test": "mocha --reporter spec --exit --check-leaks test/", "test-ci": "nyc --reporter=lcov --reporter=text npm test", "test-cov": "nyc --reporter=html --reporter=text npm test", "version": "node scripts/version-history.js && git add HISTORY.md" diff --git a/test/support/servers.js b/test/support/servers.js index cc9796b..3117fe3 100644 --- a/test/support/servers.js +++ b/test/support/servers.js @@ -9,6 +9,7 @@ try { exports.createHTTPServer = createHTTPServer exports.createHTTP2Server = createHTTP2Server +exports.createHTTP2ServerCompatibilityLayer = createHTTP2ServerCompatibilityLayer function createHTTPServer (listener, handler) { var fn = handler || echoHandler @@ -27,15 +28,31 @@ function createHTTPServer (listener, handler) { }) } +function createHTTP2ServerCompatibilityLayer (listener, handler) { + var fn = handler || echoHandler + + return http2.createServer(function (req, res) { + try { + onHeaders(res, listener) + fn(req, res) + res.statusCode = 200 + } catch (err) { + res.statusCode = 500 + res.write(err.message) + } finally { + res.end() + } + }) +} + function createHTTP2Server (listener, handler) { var fn = handler || echoHandlerHTTP2 - var server = http2.createServer() + var server = http2.createServer() server.on('stream', function (stream, headers) { try { onHeaders(stream, listener) - fn(headers, stream) stream.respond({ ':status': 200 }) diff --git a/test/test.js b/test/test.js index 193bf98..f39a449 100644 --- a/test/test.js +++ b/test/test.js @@ -1,4 +1,3 @@ - var assert = require('assert') var http = require('http') var http2 @@ -11,7 +10,7 @@ try { } catch (e) {} var createHTTPServer = server.createHTTPServer -var createHTTP2Server = server.createHTTP2Server +var createHTTP2Server = server.createHTTP2ServerCompatibilityLayer var topDescribe = function (type, createServer) { var options From ceaa36186858765964d875a413b22f62a40ad87d Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Fri, 23 May 2025 21:23:41 -0500 Subject: [PATCH 6/7] [WIP]: support adding headers in onHeaders Signed-off-by: Sebastian Beltran --- index.js | 21 ++++++++++++++++++++- test/support/servers.js | 8 -------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/index.js b/index.js index 0b7bc71..c7f9092 100644 --- a/index.js +++ b/index.js @@ -45,6 +45,25 @@ function createWriteHead (prevWriteHead, listener) { } } +function createRespond (prevRespond, listener) { + var fired = false + const headers = [] + + return function writeRespond () { + headers.push(...arguments) + + // fire listener + if (!fired) { + fired = true + listener.call(this) + } + + if (!this.headersSent) { + return prevRespond.apply(this, headers) + } + } +} + /** * Execute a listener when a response is about to write headers. * @@ -67,7 +86,7 @@ function onHeaders (res, listener) { } if (res.respond) { - res.respond = createWriteHead(res.respond, listener) + res.respond = createRespond(res.respond, listener) } } diff --git a/test/support/servers.js b/test/support/servers.js index 3117fe3..9c515fa 100644 --- a/test/support/servers.js +++ b/test/support/servers.js @@ -46,8 +46,6 @@ function createHTTP2ServerCompatibilityLayer (listener, handler) { } function createHTTP2Server (listener, handler) { - var fn = handler || echoHandlerHTTP2 - var server = http2.createServer() server.on('stream', function (stream, headers) { @@ -72,9 +70,3 @@ function createHTTP2Server (listener, handler) { function echoHandler (req, res) { res.setHeader('X-Outgoing', 'test') } - -function echoHandlerHTTP2 (stream) { - stream.additionalHeaders({ - 'X-Outgoing': 'test' - }) -} From b4f6962b0555f5cf747eae2adaed6c4b0e41a992 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Fri, 23 May 2025 22:07:14 -0500 Subject: [PATCH 7/7] [WIP]: add test for adding headers in onHeaders Signed-off-by: Sebastian Beltran --- index.js | 8 +++++--- test/{test.js => http.js} | 0 test/http2.js | 20 ++++++++++++++++++++ test/support/servers.js | 4 ++-- 4 files changed, 27 insertions(+), 5 deletions(-) rename test/{test.js => http.js} (100%) create mode 100644 test/http2.js diff --git a/index.js b/index.js index c7f9092..32c605f 100644 --- a/index.js +++ b/index.js @@ -47,10 +47,12 @@ function createWriteHead (prevWriteHead, listener) { function createRespond (prevRespond, listener) { var fired = false - const headers = [] + + var headers = { 0: {}, 1: {} } return function writeRespond () { - headers.push(...arguments) + headers['0'] = { ...headers['0'], ...arguments[0] } + headers['1'] = { ...headers['1'], ...arguments[1] } // fire listener if (!fired) { @@ -59,7 +61,7 @@ function createRespond (prevRespond, listener) { } if (!this.headersSent) { - return prevRespond.apply(this, headers) + return prevRespond.apply(this, [headers['0'], headers['1']]) } } } diff --git a/test/test.js b/test/http.js similarity index 100% rename from test/test.js rename to test/http.js diff --git a/test/http2.js b/test/http2.js new file mode 100644 index 0000000..ed38245 --- /dev/null +++ b/test/http2.js @@ -0,0 +1,20 @@ +var server = require('./support/servers') + +var createServer = server.createHTTP2Server + +var request = require('supertest') + +describe('http2', function () { + describe('onHeaders(stream, listener)', function () { + it('should fire after respond', function (done) { + request(createServer(echoListener), { http2: true }) + .get('/') + .expect('x-outgoing-echo', 'test') + .expect(200, done) + }) + }) +}) + +function echoListener () { + this.respond({ 'x-Outgoing-echo': 'test' }) +} diff --git a/test/support/servers.js b/test/support/servers.js index 9c515fa..2327998 100644 --- a/test/support/servers.js +++ b/test/support/servers.js @@ -45,10 +45,10 @@ function createHTTP2ServerCompatibilityLayer (listener, handler) { }) } -function createHTTP2Server (listener, handler) { +function createHTTP2Server (listener) { var server = http2.createServer() - server.on('stream', function (stream, headers) { + server.on('stream', function (stream) { try { onHeaders(stream, listener) stream.respond({