test: remove timers from streams test
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 <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>
This commit is contained in:
parent
3eea668c7a
commit
45a716c968
@ -1,5 +1,5 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
const common = require('../common');
|
require('../common');
|
||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
|
|
||||||
const Readable = require('stream').Readable;
|
const Readable = require('stream').Readable;
|
||||||
@ -16,36 +16,35 @@ function test1() {
|
|||||||
//
|
//
|
||||||
// note that this is very unusual. it only works for crypto streams
|
// 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
|
// 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
|
// r.read(0) again later, otherwise there is no more work being done
|
||||||
// and the process just exits.
|
// and the process just exits.
|
||||||
|
|
||||||
const buf = Buffer.alloc(5, 'x');
|
const buf = Buffer.alloc(5, 'x');
|
||||||
let reads = 5;
|
let reads = 5;
|
||||||
const timeout = common.platformTimeout(50);
|
|
||||||
r._read = function(n) {
|
r._read = function(n) {
|
||||||
switch (reads--) {
|
switch (reads--) {
|
||||||
case 0:
|
case 5:
|
||||||
return r.push(null); // EOF
|
return setImmediate(function() {
|
||||||
case 1:
|
return r.push(buf);
|
||||||
return r.push(buf);
|
});
|
||||||
case 2:
|
case 4:
|
||||||
setTimeout(r.read.bind(r, 0), timeout);
|
setImmediate(function() {
|
||||||
return r.push(Buffer.alloc(0)); // Not-EOF!
|
return r.push(Buffer.alloc(0));
|
||||||
|
});
|
||||||
|
return setImmediate(r.read.bind(r, 0));
|
||||||
case 3:
|
case 3:
|
||||||
setTimeout(r.read.bind(r, 0), timeout);
|
setImmediate(r.read.bind(r, 0));
|
||||||
return process.nextTick(function() {
|
return process.nextTick(function() {
|
||||||
return r.push(Buffer.alloc(0));
|
return r.push(Buffer.alloc(0));
|
||||||
});
|
});
|
||||||
case 4:
|
case 2:
|
||||||
setTimeout(r.read.bind(r, 0), timeout);
|
setImmediate(r.read.bind(r, 0));
|
||||||
return setTimeout(function() {
|
return r.push(Buffer.alloc(0)); // Not-EOF!
|
||||||
return r.push(Buffer.alloc(0));
|
case 1:
|
||||||
});
|
return r.push(buf);
|
||||||
case 5:
|
case 0:
|
||||||
return setTimeout(function() {
|
return r.push(null); // EOF
|
||||||
return r.push(buf);
|
|
||||||
});
|
|
||||||
default:
|
default:
|
||||||
throw new Error('unreachable');
|
throw new Error('unreachable');
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user