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 net = require('net'); 11const path = require('path'); 12 13// HTTP/2 servers can listen on a named pipe. 14 15const tmpdir = require('../common/tmpdir'); 16tmpdir.refresh(); 17const loc = fixtures.path('person-large.jpg'); 18const fn = path.join(tmpdir.path, 'person-large.jpg'); 19 20const server = http2.createServer(); 21 22server.on('stream', common.mustCall((stream) => { 23 const dest = stream.pipe(fs.createWriteStream(fn)); 24 25 stream.on('end', common.mustCall(() => { 26 stream.respond(); 27 stream.end(); 28 })); 29 30 dest.on('finish', common.mustCall(() => { 31 assert.strictEqual(fs.readFileSync(fn).length, 32 fs.readFileSync(loc).length); 33 })); 34})); 35 36server.listen(common.PIPE, common.mustCall(() => { 37 const client = http2.connect('http://localhost', { 38 createConnection(url) { 39 return net.connect(server.address()); 40 } 41 }); 42 43 const req = client.request({ ':method': 'POST' }); 44 req.on('response', common.mustCall()); 45 req.resume(); 46 47 req.on('close', common.mustCall(() => { 48 server.close(); 49 client.close(); 50 })); 51 52 const str = fs.createReadStream(loc); 53 str.on('end', common.mustCall()); 54 str.pipe(req); 55})); 56