diff --git a/lib/internal/http2/compat.js b/lib/internal/http2/compat.js index 92e8d38869e53f..6d234b23f93ee7 100644 --- a/lib/internal/http2/compat.js +++ b/lib/internal/http2/compat.js @@ -519,6 +519,18 @@ class Http2ServerResponse extends Stream { return this[kStream].writableCorked; } + get writableHighWaterMark() { + return this[kStream].writableHighWaterMark; + } + + get writableFinished() { + return this[kStream].writableFinished; + } + + get writableLength() { + return this[kStream].writableLength; + } + set statusCode(code) { code |= 0; if (code >= 100 && code < 200) diff --git a/test/parallel/test-http2-res-writable-properties.js b/test/parallel/test-http2-res-writable-properties.js new file mode 100644 index 00000000000000..488cb1babf3e8a --- /dev/null +++ b/test/parallel/test-http2-res-writable-properties.js @@ -0,0 +1,30 @@ +'use strict'; +const common = require('../common'); +if (!common.hasCrypto) { common.skip('missing crypto'); } +const assert = require('assert'); +const http2 = require('http2'); + +const server = http2.createServer(common.mustCall((req, res) => { + const hwm = req.socket.writableHighWaterMark; + assert.strictEqual(res.writableHighWaterMark, hwm); + assert.strictEqual(res.writableLength, 0); + res.write(''); + const len = res.writableLength; + res.write('asd'); + assert.strictEqual(res.writableLength, len + 3); + res.end(); + res.on('finish', common.mustCall(() => { + assert.strictEqual(res.writableLength, 0); + assert.ok(res.writableFinished, 'writableFinished is not truthy'); + server.close(); + })); +})); + +server.listen(0, common.mustCall(() => { + const client = http2.connect(`http://localhost:${server.address().port}`); + const request = client.request(); + request.on('data', common.mustCall()); + request.on('end', common.mustCall(() => { + client.close(); + })); +}));