1'use strict'; 2 3const common = require('../common'); 4if (!common.hasCrypto) 5 common.skip('missing crypto'); 6 7const assert = require('assert'); 8const http2 = require('http2'); 9 10for (const chunkSequence of [ 11 [ '' ], 12 [ '', '' ], 13]) { 14 const server = http2.createServer(); 15 server.on('stream', common.mustCall((stream, headers, flags) => { 16 stream.respond({ 'content-type': 'text/html' }); 17 18 let data = ''; 19 stream.on('data', common.mustNotCall((chunk) => { 20 data += chunk.toString(); 21 })); 22 stream.on('end', common.mustCall(() => { 23 stream.end(`"${data}"`); 24 })); 25 })); 26 27 server.listen(0, common.mustCall(() => { 28 const port = server.address().port; 29 const client = http2.connect(`http://localhost:${port}`); 30 31 const req = client.request({ 32 ':method': 'POST', 33 ':path': '/' 34 }); 35 36 req.on('response', common.mustCall((headers) => { 37 assert.strictEqual(headers[':status'], 200); 38 assert.strictEqual(headers['content-type'], 'text/html'); 39 })); 40 41 let data = ''; 42 req.setEncoding('utf8'); 43 req.on('data', common.mustCallAtLeast((d) => data += d)); 44 req.on('end', common.mustCall(() => { 45 assert.strictEqual(data, '""'); 46 server.close(); 47 client.close(); 48 })); 49 50 for (const chunk of chunkSequence) 51 req.write(chunk); 52 req.end(); 53 })); 54} 55