diff --git a/lib/internal/streams/lazy_transform.js b/lib/internal/streams/lazy_transform.js index 06cc87143d792a..80e0bacf29df7c 100644 --- a/lib/internal/streams/lazy_transform.js +++ b/lib/internal/streams/lazy_transform.js @@ -11,6 +11,8 @@ module.exports = LazyTransform; function LazyTransform(options) { this._options = options; + this.writable = true; + this.readable = true; } util.inherits(LazyTransform, stream.Transform); diff --git a/test/parallel/test-crypto-lazy-transform-writable.js b/test/parallel/test-crypto-lazy-transform-writable.js new file mode 100644 index 00000000000000..2c4fbaf39a6738 --- /dev/null +++ b/test/parallel/test-crypto-lazy-transform-writable.js @@ -0,0 +1,34 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const crypto = require('crypto'); +const Stream = require('stream'); +const util = require('util'); + +const hasher1 = crypto.createHash('sha256'); +const hasher2 = crypto.createHash('sha256'); + +// Calculate the expected result. +hasher1.write(Buffer.from('hello world')); +hasher1.end(); + +const expected = hasher1.read().toString('hex'); + +function OldStream() { + Stream.call(this); + + this.readable = true; +} +util.inherits(OldStream, Stream); + +const stream = new OldStream(); + +stream.pipe(hasher2).on('finish', common.mustCall(function() { + const hash = hasher2.read().toString('hex'); + assert.strictEqual(expected, hash); +})); + +stream.emit('data', Buffer.from('hello')); +stream.emit('data', Buffer.from(' world')); +stream.emit('end');