Skip to content

Commit

Permalink
test: remove timers from streams test
Browse files Browse the repository at this point in the history
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: #9359
PR-URL: hkttps://github.com//pull/9360
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Ilkka Myller <ilkka.myller@nodefield.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
  • Loading branch information
addaleax authored and Myles Borins committed Nov 22, 2016
1 parent c1aee02 commit 0216dbe
Showing 1 changed file with 18 additions and 19 deletions.
37 changes: 18 additions & 19 deletions test/parallel/test-stream2-readable-empty-buffer-no-eof.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
'use strict';
const common = require('../common');
require('../common');
const assert = require('assert');

const Readable = require('stream').Readable;
Expand All @@ -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');
}
Expand Down

0 comments on commit 0216dbe

Please sign in to comment.