From a51944da0aeae65676a928c9473965c453e0e028 Mon Sep 17 00:00:00 2001 From: Anatoli Papirovski Date: Tue, 2 Jan 2018 11:45:21 -0500 Subject: test: fix flaky test-http-highwatermark PR-URL: https://github.com/nodejs/node/pull/17949 Fixes: https://github.com/nodejs/node/issues/17857 Reviewed-By: Luigi Pinca Reviewed-By: Ruben Bridgewater --- test/parallel/test-http-hightwatermark.js | 52 ------------------------------- test/parallel/test-http-highwatermark.js | 52 +++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 52 deletions(-) delete mode 100644 test/parallel/test-http-hightwatermark.js create mode 100644 test/parallel/test-http-highwatermark.js (limited to 'test') diff --git a/test/parallel/test-http-hightwatermark.js b/test/parallel/test-http-hightwatermark.js deleted file mode 100644 index b2432227a9..0000000000 --- a/test/parallel/test-http-hightwatermark.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; -const common = require('../common'); -const assert = require('assert'); -const net = require('net'); -const http = require('http'); - -// These test cases to check socketOnDrain where needPause becomes false. -// When send large response enough to exceed highWaterMark, it expect the socket -// to be paused and res.write would be failed. -// And it should be resumed when outgoingData falls below highWaterMark. - -let requestReceived = 0; - -const server = http.createServer(function(req, res) { - const id = ++requestReceived; - const enoughToDrain = req.connection.writableHighWaterMark; - const body = 'x'.repeat(enoughToDrain); - - if (id === 1) { - // Case of needParse = false - req.connection.once('pause', common.mustCall(() => { - assert(req.connection._paused, '_paused must be true because it exceeds' + - 'highWaterMark by second request'); - })); - } else { - // Case of needParse = true - const resume = req.connection.parser.resume.bind(req.connection.parser); - req.connection.parser.resume = common.mustCall((...args) => { - const paused = req.connection._paused; - assert(!paused, '_paused must be false because it become false by ' + - 'socketOnDrain when outgoingData falls below ' + - 'highWaterMark'); - return resume(...args); - }); - } - assert(!res.write(body), 'res.write must return false because it will ' + - 'exceed highWaterMark on this call'); - res.end(); -}).on('listening', () => { - const c = net.createConnection(server.address().port, () => { - c.write('GET / HTTP/1.1\r\n\r\n'); - c.write('GET / HTTP/1.1\r\n\r\n'); - c.end(); - }); - - c.on('data', () => {}); - c.on('end', () => { - server.close(); - }); -}); - -server.listen(0); diff --git a/test/parallel/test-http-highwatermark.js b/test/parallel/test-http-highwatermark.js new file mode 100644 index 0000000000..79d9c46a55 --- /dev/null +++ b/test/parallel/test-http-highwatermark.js @@ -0,0 +1,52 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const net = require('net'); +const http = require('http'); + +// These test cases to check socketOnDrain where needPause becomes false. +// When send large response enough to exceed highWaterMark, it expect the socket +// to be paused and res.write would be failed. +// And it should be resumed when outgoingData falls below highWaterMark. + +let requestReceived = 0; + +const server = http.createServer(function(req, res) { + const id = ++requestReceived; + const enoughToDrain = req.connection.writableHighWaterMark; + const body = 'x'.repeat(enoughToDrain * 100); + + if (id === 1) { + // Case of needParse = false + req.connection.once('pause', common.mustCall(() => { + assert(req.connection._paused, '_paused must be true because it exceeds' + + 'highWaterMark by second request'); + })); + } else { + // Case of needParse = true + const resume = req.connection.parser.resume.bind(req.connection.parser); + req.connection.parser.resume = common.mustCall((...args) => { + const paused = req.connection._paused; + assert(!paused, '_paused must be false because it become false by ' + + 'socketOnDrain when outgoingData falls below ' + + 'highWaterMark'); + return resume(...args); + }); + } + assert(!res.write(body), 'res.write must return false because it will ' + + 'exceed highWaterMark on this call'); + res.end(); +}).on('listening', () => { + const c = net.createConnection(server.address().port, () => { + c.write('GET / HTTP/1.1\r\n\r\n'); + c.write('GET / HTTP/1.1\r\n\r\n', + () => setImmediate(() => c.resume())); + c.end(); + }); + + c.on('end', () => { + server.close(); + }); +}); + +server.listen(0); -- cgit v1.2.3