1'use strict'; 2 3const common = require('../common'); 4const assert = require('assert'); 5const http = require('http'); 6 7function shouldThrowOnMoreBytes() { 8 const server = http.createServer(common.mustCall((req, res) => { 9 res.strictContentLength = true; 10 res.setHeader('Content-Length', 5); 11 res.write('hello'); 12 assert.throws(() => { 13 res.write('a'); 14 }, { 15 code: 'ERR_HTTP_CONTENT_LENGTH_MISMATCH' 16 }); 17 res.statusCode = 200; 18 res.end(); 19 })); 20 21 server.listen(0, () => { 22 const req = http.get({ 23 port: server.address().port, 24 }, common.mustCall((res) => { 25 res.resume(); 26 assert.strictEqual(res.statusCode, 200); 27 server.close(); 28 })); 29 req.end(); 30 }); 31} 32 33function shouldNotThrow() { 34 const server = http.createServer(common.mustCall((req, res) => { 35 res.strictContentLength = true; 36 res.write('helloaa'); 37 res.statusCode = 200; 38 res.end('ending'); 39 })); 40 41 server.listen(0, () => { 42 http.get({ 43 port: server.address().port, 44 }, common.mustCall((res) => { 45 res.resume(); 46 assert.strictEqual(res.statusCode, 200); 47 server.close(); 48 })); 49 }); 50} 51 52 53function shouldThrowOnFewerBytes() { 54 const server = http.createServer(common.mustCall((req, res) => { 55 res.strictContentLength = true; 56 res.setHeader('Content-Length', 5); 57 res.write('a'); 58 res.statusCode = 200; 59 assert.throws(() => { 60 res.end('aaa'); 61 }, { 62 code: 'ERR_HTTP_CONTENT_LENGTH_MISMATCH' 63 }); 64 res.end('aaaa'); 65 })); 66 67 server.listen(0, () => { 68 http.get({ 69 port: server.address().port, 70 }, common.mustCall((res) => { 71 res.resume(); 72 assert.strictEqual(res.statusCode, 200); 73 server.close(); 74 })); 75 }); 76} 77 78shouldThrowOnMoreBytes(); 79shouldNotThrow(); 80shouldThrowOnFewerBytes(); 81