From 45a716c9687849b7ade2ce01f2421c8f791f907c Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sat, 29 Oct 2016 23:24:33 +0200 Subject: [PATCH] test: remove timers from streams test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit test-stream2-readable-empty-buffer-no-eof fails on resource-constrained machines due to its use of timers. Removing timers makes it more reliable and doesn’t affect the validity of the test, as it only uses relative timing relations. Failures were noticed on freebsd10-64 in CI. I am able to replicate the failure with `tools/test.py --repeat=100 -j 100`. When run alone, it passes reliably. Refs: https://github.com/nodejs/node/pull/9359 PR-URL: hkttps://github.com/nodejs/node/pull/9360 Reviewed-By: James M Snell Reviewed-By: Rich Trott Reviewed-By: Ilkka Myller Reviewed-By: Colin Ihrig --- ...st-stream2-readable-empty-buffer-no-eof.js | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/test/parallel/test-stream2-readable-empty-buffer-no-eof.js b/test/parallel/test-stream2-readable-empty-buffer-no-eof.js index 61d3096ef1..ccbf087df0 100644 --- a/test/parallel/test-stream2-readable-empty-buffer-no-eof.js +++ b/test/parallel/test-stream2-readable-empty-buffer-no-eof.js @@ -1,5 +1,5 @@ 'use strict'; -const common = require('../common'); +require('../common'); const assert = require('assert'); const Readable = require('stream').Readable; @@ -16,36 +16,35 @@ function test1() { // // note that this is very unusual. it only works for crypto streams // because the other side of the stream will call read(0) to cycle - // data through openssl. that's why we set the timeouts to call + // data through openssl. that's why setImmediate() is used to call // r.read(0) again later, otherwise there is no more work being done // and the process just exits. const buf = Buffer.alloc(5, 'x'); let reads = 5; - const timeout = common.platformTimeout(50); r._read = function(n) { switch (reads--) { - case 0: - return r.push(null); // EOF - case 1: - return r.push(buf); - case 2: - setTimeout(r.read.bind(r, 0), timeout); - return r.push(Buffer.alloc(0)); // Not-EOF! - case 3: - setTimeout(r.read.bind(r, 0), timeout); - return process.nextTick(function() { - return r.push(Buffer.alloc(0)); + case 5: + return setImmediate(function() { + return r.push(buf); }); case 4: - setTimeout(r.read.bind(r, 0), timeout); - return setTimeout(function() { + setImmediate(function() { return r.push(Buffer.alloc(0)); }); - case 5: - return setTimeout(function() { - return r.push(buf); + return setImmediate(r.read.bind(r, 0)); + case 3: + setImmediate(r.read.bind(r, 0)); + return process.nextTick(function() { + return r.push(Buffer.alloc(0)); }); + case 2: + setImmediate(r.read.bind(r, 0)); + return r.push(Buffer.alloc(0)); // Not-EOF! + case 1: + return r.push(buf); + case 0: + return r.push(null); // EOF default: throw new Error('unreachable'); }