1'use strict'; 2 3const common = require('../common'); 4if (!common.hasCrypto) 5 common.skip('missing crypto'); 6const fixtures = require('../common/fixtures'); 7const assert = require('assert'); 8const http2 = require('http2'); 9const fs = require('fs'); 10const path = require('path'); 11 12// Piping should work as expected with createWriteStream 13 14const tmpdir = require('../common/tmpdir'); 15tmpdir.refresh(); 16const loc = fixtures.path('person-large.jpg'); 17const fn = path.join(tmpdir.path, 'http2-url-tests.js'); 18 19const server = http2.createServer(); 20 21server.on('stream', common.mustCall((stream) => { 22 const dest = stream.pipe(fs.createWriteStream(fn)); 23 24 dest.on('finish', () => { 25 assert.strictEqual(fs.readFileSync(loc).length, 26 fs.readFileSync(fn).length); 27 }); 28 stream.respond(); 29 stream.end(); 30})); 31 32server.listen(0, common.mustCall(() => { 33 const client = http2.connect(`http://localhost:${server.address().port}`); 34 35 const req = client.request({ ':method': 'POST' }); 36 37 req.on('response', common.mustCall()); 38 req.resume(); 39 40 req.on('close', common.mustCall(() => { 41 server.close(); 42 client.close(); 43 })); 44 45 const str = fs.createReadStream(loc); 46 str.on('end', common.mustCall()); 47 str.pipe(req); 48})); 49