1'use strict'; 2 3const common = require('../common'); 4const net = require('net'); 5const http = require('http'); 6const assert = require('assert'); 7 8const bodySent = 'This is my request'; 9 10function assertResponse(headers, body, expectClosed) { 11 assert.match(headers, /Connection: keep-alive\r\n/m); 12 assert.match(headers, /Keep-Alive: timeout=5\r\n/m); 13 assert.match(body, /Hello World!/m); 14} 15 16function writeRequest(socket) { 17 socket.write('POST / HTTP/1.1\r\n'); 18 socket.write('Connection: keep-alive\r\n'); 19 socket.write('Content-Type: text/plain\r\n'); 20 socket.write(`Content-Length: ${bodySent.length}\r\n\r\n`); 21 socket.write(`${bodySent}\r\n`); 22 socket.write('\r\n\r\n'); 23} 24 25const server = http.createServer((req, res) => { 26 let body = ''; 27 req.on('data', (data) => { 28 body += data; 29 }); 30 31 req.on('end', () => { 32 if (req.method === 'POST') { 33 assert.strictEqual(bodySent, body); 34 } 35 36 res.writeHead(200, { 'Content-Type': 'text/plain' }); 37 res.write('Hello World!'); 38 res.end(); 39 }); 40}); 41 42server.listen(0, common.mustCall((res) => { 43 assert.strictEqual(server.maxRequestsPerSocket, 0); 44 45 const socket = new net.Socket(); 46 47 socket.on('end', common.mustCall(() => { 48 server.close(); 49 })); 50 51 socket.on('ready', common.mustCall(() => { 52 writeRequest(socket); 53 writeRequest(socket); 54 writeRequest(socket); 55 writeRequest(socket); 56 })); 57 58 let buffer = ''; 59 60 socket.on('data', (data) => { 61 buffer += data; 62 63 const responseParts = buffer.trim().split('\r\n\r\n'); 64 65 if (responseParts.length === 8) { 66 assertResponse(responseParts[0], responseParts[1]); 67 assertResponse(responseParts[2], responseParts[3]); 68 assertResponse(responseParts[4], responseParts[5]); 69 assertResponse(responseParts[6], responseParts[7]); 70 71 socket.end(); 72 } 73 }); 74 75 socket.connect({ port: server.address().port }); 76})); 77