From b8ffd2093cd48b858669159e04f61e618854704a Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sat, 29 Oct 2016 23:24:33 +0200 Subject: [PATCH 1/4] 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. --- .../test-stream2-readable-empty-buffer-no-eof.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 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 61d3096ef18620..e07625778e0e51 100644 --- a/test/parallel/test-stream2-readable-empty-buffer-no-eof.js +++ b/test/parallel/test-stream2-readable-empty-buffer-no-eof.js @@ -22,7 +22,6 @@ function test1() { const buf = Buffer.alloc(5, 'x'); let reads = 5; - const timeout = common.platformTimeout(50); r._read = function(n) { switch (reads--) { case 0: @@ -30,20 +29,20 @@ function test1() { case 1: return r.push(buf); case 2: - setTimeout(r.read.bind(r, 0), timeout); + setImmediate(r.read.bind(r, 0)); return r.push(Buffer.alloc(0)); // Not-EOF! case 3: - setTimeout(r.read.bind(r, 0), timeout); + setImmediate(r.read.bind(r, 0)); return process.nextTick(function() { return r.push(Buffer.alloc(0)); }); case 4: - setTimeout(r.read.bind(r, 0), timeout); - return setTimeout(function() { + setImmediate(setImmediate, r.read.bind(r, 0)); + return setImmediate(function() { return r.push(Buffer.alloc(0)); }); case 5: - return setTimeout(function() { + return setImmediate(function() { return r.push(buf); }); default: From c8669941236fbf55ce29450dc343060c0ad16a63 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sun, 30 Oct 2016 01:03:25 +0200 Subject: [PATCH 2/4] address nit --- test/parallel/test-stream2-readable-empty-buffer-no-eof.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e07625778e0e51..545b218268c704 100644 --- a/test/parallel/test-stream2-readable-empty-buffer-no-eof.js +++ b/test/parallel/test-stream2-readable-empty-buffer-no-eof.js @@ -16,7 +16,7 @@ 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. From 88c42daac0e9e49904228d8ed1e51510acaec734 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sun, 30 Oct 2016 17:10:53 +0100 Subject: [PATCH 3/4] address nits for readability --- test/parallel/test-stream2-readable-empty-buffer-no-eof.js | 6 +++--- 1 file changed, 3 insertions(+), 3 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 545b218268c704..e8b73614718eeb 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; @@ -37,10 +37,10 @@ function test1() { return r.push(Buffer.alloc(0)); }); case 4: - setImmediate(setImmediate, r.read.bind(r, 0)); - return setImmediate(function() { + setImmediate(function() { return r.push(Buffer.alloc(0)); }); + return setImmediate(r.read.bind(r, 0)); case 5: return setImmediate(function() { return r.push(buf); From e8c82ed3c4235bd58a8d8ae066a26c3b5832b71a Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sun, 30 Oct 2016 17:12:40 +0100 Subject: [PATCH 4/4] reverse order of tests for clarity --- ...st-stream2-readable-empty-buffer-no-eof.js | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 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 e8b73614718eeb..ccbf087df00bf5 100644 --- a/test/parallel/test-stream2-readable-empty-buffer-no-eof.js +++ b/test/parallel/test-stream2-readable-empty-buffer-no-eof.js @@ -24,27 +24,27 @@ function test1() { let reads = 5; r._read = function(n) { switch (reads--) { - case 0: - return r.push(null); // EOF - case 1: - return r.push(buf); - case 2: - setImmediate(r.read.bind(r, 0)); - return r.push(Buffer.alloc(0)); // Not-EOF! - case 3: - setImmediate(r.read.bind(r, 0)); - return process.nextTick(function() { - return r.push(Buffer.alloc(0)); + case 5: + return setImmediate(function() { + return r.push(buf); }); case 4: setImmediate(function() { return r.push(Buffer.alloc(0)); }); return setImmediate(r.read.bind(r, 0)); - case 5: - return setImmediate(function() { - return r.push(buf); + 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'); }