1// Copyright Joyent, Inc. and other Node contributors. 2// 3// Permission is hereby granted, free of charge, to any person obtaining a 4// copy of this software and associated documentation files (the 5// "Software"), to deal in the Software without restriction, including 6// without limitation the rights to use, copy, modify, merge, publish, 7// distribute, sublicense, and/or sell copies of the Software, and to permit 8// persons to whom the Software is furnished to do so, subject to the 9// following conditions: 10// 11// The above copyright notice and this permission notice shall be included 12// in all copies or substantial portions of the Software. 13// 14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 17// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 18// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 19// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 20// USE OR OTHER DEALINGS IN THE SOFTWARE. 21 22'use strict'; 23const common = require('../common'); 24const assert = require('assert'); 25const http = require('http'); 26 27const Duplex = require('stream').Duplex; 28 29class FakeAgent extends http.Agent { 30 createConnection() { 31 const s = new Duplex(); 32 let once = false; 33 34 s._read = function() { 35 if (once) 36 return this.push(null); 37 once = true; 38 39 this.push('HTTP/1.1 200 Ok\r\nTransfer-Encoding: chunked\r\n\r\n'); 40 this.push('b\r\nhello world\r\n'); 41 this.readable = false; 42 this.push('0\r\n\r\n'); 43 }; 44 45 // Blackhole 46 s._write = function(data, enc, cb) { 47 cb(); 48 }; 49 50 s.destroy = s.destroySoon = function() { 51 this.writable = false; 52 }; 53 54 return s; 55 } 56} 57 58let received = ''; 59 60const req = http.request({ 61 agent: new FakeAgent() 62}, common.mustCall(function requestCallback(res) { 63 res.on('data', function dataCallback(chunk) { 64 received += chunk; 65 }); 66 67 res.on('end', common.mustCall(function endCallback() { 68 assert.strictEqual(received, 'hello world'); 69 })); 70})); 71req.end(); 72