test: reduce unmanaged parallelism in domain test
The original test lauches 10 child processes at once and bypass `test.py`'s process regulation. This PR reduces the unmanaged parallelism and is a temporary workaround for #9979 (not a real fix). PR-URL: https://github.com/nodejs/node/pull/10329 Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
parent
004a1002b8
commit
a1652324cd
@ -204,6 +204,28 @@ exports.hasIPv6 = Object.keys(ifaces).some(function(name) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check that when running a test with
|
||||||
|
* `$node --abort-on-uncaught-exception $file child`
|
||||||
|
* the process aborts.
|
||||||
|
*/
|
||||||
|
exports.childShouldThrowAndAbort = function() {
|
||||||
|
var testCmd = '';
|
||||||
|
if (!exports.isWindows) {
|
||||||
|
// Do not create core files, as it can take a lot of disk space on
|
||||||
|
// continuous testing and developers' machines
|
||||||
|
testCmd += 'ulimit -c 0 && ';
|
||||||
|
}
|
||||||
|
testCmd += `${process.argv[0]} --abort-on-uncaught-exception `;
|
||||||
|
testCmd += `${process.argv[1]} child`;
|
||||||
|
const child = child_process.exec(testCmd);
|
||||||
|
child.on('exit', function onExit(exitCode, signal) {
|
||||||
|
const errMsg = 'Test should have aborted ' +
|
||||||
|
`but instead exited with exit code ${exitCode}` +
|
||||||
|
` and signal ${signal}`;
|
||||||
|
assert(exports.nodeProcessAborted(exitCode, signal), errMsg);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
exports.ddCommand = function(filename, kilobytes) {
|
exports.ddCommand = function(filename, kilobytes) {
|
||||||
if (exports.isWindows) {
|
if (exports.isWindows) {
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const domain = require('domain');
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
const d = domain.create();
|
||||||
|
|
||||||
|
d.run(function() {
|
||||||
|
throw new Error('boom!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv[2] === 'child') {
|
||||||
|
test();
|
||||||
|
} else {
|
||||||
|
common.childShouldThrowAndAbort();
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const domain = require('domain');
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
const d = domain.create();
|
||||||
|
const d2 = domain.create();
|
||||||
|
|
||||||
|
d.run(function() {
|
||||||
|
d2.run(function() {
|
||||||
|
throw new Error('boom!');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv[2] === 'child') {
|
||||||
|
test();
|
||||||
|
} else {
|
||||||
|
common.childShouldThrowAndAbort();
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const domain = require('domain');
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
const d = domain.create();
|
||||||
|
|
||||||
|
d.run(function() {
|
||||||
|
setTimeout(function() {
|
||||||
|
throw new Error('boom!');
|
||||||
|
}, 1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv[2] === 'child') {
|
||||||
|
test();
|
||||||
|
} else {
|
||||||
|
common.childShouldThrowAndAbort();
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const domain = require('domain');
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
const d = domain.create();
|
||||||
|
|
||||||
|
d.run(function() {
|
||||||
|
setImmediate(function() {
|
||||||
|
throw new Error('boom!');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv[2] === 'child') {
|
||||||
|
test();
|
||||||
|
} else {
|
||||||
|
common.childShouldThrowAndAbort();
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const domain = require('domain');
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
const d = domain.create();
|
||||||
|
|
||||||
|
d.run(function() {
|
||||||
|
process.nextTick(function() {
|
||||||
|
throw new Error('boom!');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv[2] === 'child') {
|
||||||
|
test();
|
||||||
|
} else {
|
||||||
|
common.childShouldThrowAndAbort();
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const domain = require('domain');
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
const d = domain.create();
|
||||||
|
|
||||||
|
d.run(function() {
|
||||||
|
var fs = require('fs');
|
||||||
|
fs.exists('/non/existing/file', function onExists() {
|
||||||
|
throw new Error('boom!');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv[2] === 'child') {
|
||||||
|
test();
|
||||||
|
} else {
|
||||||
|
common.childShouldThrowAndAbort();
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const domain = require('domain');
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
const d = domain.create();
|
||||||
|
const d2 = domain.create();
|
||||||
|
|
||||||
|
d.on('error', function errorHandler() {
|
||||||
|
});
|
||||||
|
|
||||||
|
d.run(function() {
|
||||||
|
d2.run(function() {
|
||||||
|
setTimeout(function() {
|
||||||
|
throw new Error('boom!');
|
||||||
|
}, 1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv[2] === 'child') {
|
||||||
|
test();
|
||||||
|
} else {
|
||||||
|
common.childShouldThrowAndAbort();
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const domain = require('domain');
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
const d = domain.create();
|
||||||
|
const d2 = domain.create();
|
||||||
|
|
||||||
|
d.on('error', function errorHandler() {
|
||||||
|
});
|
||||||
|
|
||||||
|
d.run(function() {
|
||||||
|
d2.run(function() {
|
||||||
|
setImmediate(function() {
|
||||||
|
throw new Error('boom!');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv[2] === 'child') {
|
||||||
|
test();
|
||||||
|
} else {
|
||||||
|
common.childShouldThrowAndAbort();
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const domain = require('domain');
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
const d = domain.create();
|
||||||
|
const d2 = domain.create();
|
||||||
|
|
||||||
|
d.on('error', function errorHandler() {
|
||||||
|
});
|
||||||
|
|
||||||
|
d.run(function() {
|
||||||
|
d2.run(function() {
|
||||||
|
process.nextTick(function() {
|
||||||
|
throw new Error('boom!');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv[2] === 'child') {
|
||||||
|
test();
|
||||||
|
} else {
|
||||||
|
common.childShouldThrowAndAbort();
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const domain = require('domain');
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
const d = domain.create();
|
||||||
|
const d2 = domain.create();
|
||||||
|
|
||||||
|
d.on('error', function errorHandler() {
|
||||||
|
});
|
||||||
|
|
||||||
|
d.run(function() {
|
||||||
|
d2.run(function() {
|
||||||
|
var fs = require('fs');
|
||||||
|
fs.exists('/non/existing/file', function onExists() {
|
||||||
|
throw new Error('boom!');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv[2] === 'child') {
|
||||||
|
test();
|
||||||
|
} else {
|
||||||
|
common.childShouldThrowAndAbort();
|
||||||
|
}
|
@ -1,168 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This test makes sure that when using --abort-on-uncaught-exception and
|
|
||||||
* when throwing an error from within a domain that does not have an error
|
|
||||||
* handler setup, the process aborts.
|
|
||||||
*/
|
|
||||||
const common = require('../common');
|
|
||||||
const assert = require('assert');
|
|
||||||
const domain = require('domain');
|
|
||||||
const child_process = require('child_process');
|
|
||||||
|
|
||||||
const tests = [
|
|
||||||
function() {
|
|
||||||
const d = domain.create();
|
|
||||||
|
|
||||||
d.run(function() {
|
|
||||||
throw new Error('boom!');
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
function() {
|
|
||||||
const d = domain.create();
|
|
||||||
const d2 = domain.create();
|
|
||||||
|
|
||||||
d.run(function() {
|
|
||||||
d2.run(function() {
|
|
||||||
throw new Error('boom!');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
function() {
|
|
||||||
const d = domain.create();
|
|
||||||
|
|
||||||
d.run(function() {
|
|
||||||
setTimeout(function() {
|
|
||||||
throw new Error('boom!');
|
|
||||||
}, 1);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
function() {
|
|
||||||
const d = domain.create();
|
|
||||||
|
|
||||||
d.run(function() {
|
|
||||||
setImmediate(function() {
|
|
||||||
throw new Error('boom!');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
function() {
|
|
||||||
const d = domain.create();
|
|
||||||
|
|
||||||
d.run(function() {
|
|
||||||
process.nextTick(function() {
|
|
||||||
throw new Error('boom!');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
function() {
|
|
||||||
const d = domain.create();
|
|
||||||
|
|
||||||
d.run(function() {
|
|
||||||
var fs = require('fs');
|
|
||||||
fs.exists('/non/existing/file', function onExists() {
|
|
||||||
throw new Error('boom!');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
function() {
|
|
||||||
const d = domain.create();
|
|
||||||
const d2 = domain.create();
|
|
||||||
|
|
||||||
d.on('error', function errorHandler() {
|
|
||||||
});
|
|
||||||
|
|
||||||
d.run(function() {
|
|
||||||
d2.run(function() {
|
|
||||||
setTimeout(function() {
|
|
||||||
throw new Error('boom!');
|
|
||||||
}, 1);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
function() {
|
|
||||||
const d = domain.create();
|
|
||||||
const d2 = domain.create();
|
|
||||||
|
|
||||||
d.on('error', function errorHandler() {
|
|
||||||
});
|
|
||||||
|
|
||||||
d.run(function() {
|
|
||||||
d2.run(function() {
|
|
||||||
setImmediate(function() {
|
|
||||||
throw new Error('boom!');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
function() {
|
|
||||||
const d = domain.create();
|
|
||||||
const d2 = domain.create();
|
|
||||||
|
|
||||||
d.on('error', function errorHandler() {
|
|
||||||
});
|
|
||||||
|
|
||||||
d.run(function() {
|
|
||||||
d2.run(function() {
|
|
||||||
process.nextTick(function() {
|
|
||||||
throw new Error('boom!');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
function() {
|
|
||||||
const d = domain.create();
|
|
||||||
const d2 = domain.create();
|
|
||||||
|
|
||||||
d.on('error', function errorHandler() {
|
|
||||||
});
|
|
||||||
|
|
||||||
d.run(function() {
|
|
||||||
d2.run(function() {
|
|
||||||
var fs = require('fs');
|
|
||||||
fs.exists('/non/existing/file', function onExists() {
|
|
||||||
throw new Error('boom!');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
if (process.argv[2] === 'child') {
|
|
||||||
const testIndex = +process.argv[3];
|
|
||||||
tests[testIndex]();
|
|
||||||
} else {
|
|
||||||
|
|
||||||
tests.forEach(function(test, testIndex) {
|
|
||||||
var testCmd = '';
|
|
||||||
if (!common.isWindows) {
|
|
||||||
// Do not create core files, as it can take a lot of disk space on
|
|
||||||
// continuous testing and developers' machines
|
|
||||||
testCmd += 'ulimit -c 0 && ';
|
|
||||||
}
|
|
||||||
|
|
||||||
testCmd += process.argv[0];
|
|
||||||
testCmd += ' ' + '--abort-on-uncaught-exception';
|
|
||||||
testCmd += ' ' + process.argv[1];
|
|
||||||
testCmd += ' ' + 'child';
|
|
||||||
testCmd += ' ' + testIndex;
|
|
||||||
|
|
||||||
var child = child_process.exec(testCmd);
|
|
||||||
|
|
||||||
child.on('exit', function onExit(exitCode, signal) {
|
|
||||||
const errMsg = 'Test at index ' + testIndex + ' should have aborted ' +
|
|
||||||
'but instead exited with exit code ' + exitCode +
|
|
||||||
' and signal ' + signal;
|
|
||||||
assert(common.nodeProcessAborted(exitCode, signal), errMsg);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user