1'use strict'; 2 3const common = require('../common'); 4if (!common.hasCrypto) 5 common.skip('missing crypto'); 6const assert = require('assert'); 7const http2 = require('http2'); 8const { Readable } = require('stream'); 9 10const server = http2.createServer(common.mustCall((req, res) => { 11 res.setHeader('content-type', 'text/html'); 12 const input = new Readable({ 13 read() { 14 this.push('test'); 15 this.push(null); 16 } 17 }); 18 input.pipe(res); 19})); 20 21server.listen(0, common.mustCall(() => { 22 const port = server.address().port; 23 const client = http2.connect(`http://localhost:${port}`); 24 25 const req = client.request(); 26 27 req.on('response', common.mustCall((headers) => { 28 assert.strictEqual(headers[':status'], 200); 29 assert.strictEqual(headers['content-type'], 'text/html'); 30 })); 31 32 let data = ''; 33 34 const notCallClose = common.mustNotCall(); 35 36 setTimeout(() => { 37 req.setEncoding('utf8'); 38 req.removeListener('close', notCallClose); 39 req.on('close', common.mustCall(() => { 40 server.close(); 41 client.close(); 42 })); 43 req.on('data', common.mustCallAtLeast((d) => data += d)); 44 req.on('end', common.mustCall(() => { 45 assert.strictEqual(data, 'test'); 46 })); 47 }, common.platformTimeout(100)); 48 49 req.on('close', notCallClose); 50})); 51