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