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.maxRequestsPerSocket = null; 43server.listen(0, common.mustCall((res) => { 44 const socket = new net.Socket(); 45 46 socket.on('end', common.mustCall(() => { 47 server.close(); 48 })); 49 50 socket.on('ready', common.mustCall(() => { 51 writeRequest(socket); 52 writeRequest(socket); 53 writeRequest(socket); 54 writeRequest(socket); 55 })); 56 57 let buffer = ''; 58 59 socket.on('data', (data) => { 60 buffer += data; 61 62 const responseParts = buffer.trim().split('\r\n\r\n'); 63 64 if (responseParts.length === 8) { 65 assertResponse(responseParts[0], responseParts[1]); 66 assertResponse(responseParts[2], responseParts[3]); 67 assertResponse(responseParts[4], responseParts[5]); 68 assertResponse(responseParts[6], responseParts[7]); 69 70 socket.end(); 71 } 72 }); 73 74 socket.connect({ port: server.address().port }); 75})); 76