'use strict'; require('../common'); const assert = require('assert'); const http = require('http'); const Countdown = require('../common/countdown'); const test_res_body = 'other stuff!\n'; const countdown = new Countdown(3, () => server.close()); const server = http.createServer((req, res) => { console.error('Server sending informational message #1...'); res.writeProcessing(); console.error('Server sending informational message #2...'); res.writeProcessing(); console.error('Server sending full response...'); res.writeHead(200, { 'Content-Type': 'text/plain', 'ABCD': '1' }); res.end(test_res_body); }); server.listen(0, function() { const req = http.request({ port: this.address().port, path: '/world' }); req.end(); console.error('Client sending request...'); let body = ''; req.on('information', function(res) { console.error('Client got 102 Processing...'); countdown.dec(); }); req.on('response', function(res) { // Check that all 102 Processing received before full response received. assert.strictEqual(countdown.remaining, 1); assert.strictEqual(res.statusCode, 200, `Final status code was ${res.statusCode}, not 200.`); res.setEncoding('utf8'); res.on('data', function(chunk) { body += chunk; }); res.on('end', function() { console.error('Got full response.'); assert.strictEqual(body, test_res_body); assert.ok('abcd' in res.headers); countdown.dec(); }); }); });