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('request', common.mustCall((req, res) => { 22 const dest = req.pipe(fs.createWriteStream(fn)); 23 dest.on('finish', common.mustCall(() => { 24 assert.strictEqual(req.complete, true); 25 assert.strictEqual(fs.readFileSync(loc).length, fs.readFileSync(fn).length); 26 fs.unlinkSync(fn); 27 res.end(); 28 })); 29})); 30 31server.listen(0, common.mustCall(() => { 32 const port = server.address().port; 33 const client = http2.connect(`http://localhost:${port}`); 34 35 let remaining = 2; 36 function maybeClose() { 37 if (--remaining === 0) { 38 server.close(); 39 client.close(); 40 } 41 } 42 43 const req = client.request({ ':method': 'POST' }); 44 req.on('response', common.mustCall()); 45 req.resume(); 46 req.on('end', common.mustCall(maybeClose)); 47 const str = fs.createReadStream(loc); 48 str.on('end', common.mustCall(maybeClose)); 49 str.pipe(req); 50})); 51