mirror of https://github.com/lukechilds/node.git
Browse Source
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>v6
Joyee Cheung
8 years ago
committed by
Rich Trott
12 changed files with 247 additions and 168 deletions
@ -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…
Reference in new issue