Browse Source

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>
v6
Joyee Cheung 8 years ago
committed by Rich Trott
parent
commit
a1652324cd
  1. 22
      test/common.js
  2. 18
      test/parallel/test-domain-no-error-handler-abort-on-uncaught-0.js
  3. 21
      test/parallel/test-domain-no-error-handler-abort-on-uncaught-1.js
  4. 20
      test/parallel/test-domain-no-error-handler-abort-on-uncaught-2.js
  5. 20
      test/parallel/test-domain-no-error-handler-abort-on-uncaught-3.js
  6. 20
      test/parallel/test-domain-no-error-handler-abort-on-uncaught-4.js
  7. 21
      test/parallel/test-domain-no-error-handler-abort-on-uncaught-5.js
  8. 26
      test/parallel/test-domain-no-error-handler-abort-on-uncaught-6.js
  9. 26
      test/parallel/test-domain-no-error-handler-abort-on-uncaught-7.js
  10. 26
      test/parallel/test-domain-no-error-handler-abort-on-uncaught-8.js
  11. 27
      test/parallel/test-domain-no-error-handler-abort-on-uncaught-9.js
  12. 168
      test/parallel/test-domain-no-error-handler-abort-on-uncaught.js

22
test/common.js

@ -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) {

18
test/parallel/test-domain-no-error-handler-abort-on-uncaught-0.js

@ -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();
}

21
test/parallel/test-domain-no-error-handler-abort-on-uncaught-1.js

@ -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();
}

20
test/parallel/test-domain-no-error-handler-abort-on-uncaught-2.js

@ -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();
}

20
test/parallel/test-domain-no-error-handler-abort-on-uncaught-3.js

@ -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();
}

20
test/parallel/test-domain-no-error-handler-abort-on-uncaught-4.js

@ -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();
}

21
test/parallel/test-domain-no-error-handler-abort-on-uncaught-5.js

@ -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();
}

26
test/parallel/test-domain-no-error-handler-abort-on-uncaught-6.js

@ -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();
}

26
test/parallel/test-domain-no-error-handler-abort-on-uncaught-7.js

@ -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();
}

26
test/parallel/test-domain-no-error-handler-abort-on-uncaught-8.js

@ -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();
}

27
test/parallel/test-domain-no-error-handler-abort-on-uncaught-9.js

@ -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();
}

168
test/parallel/test-domain-no-error-handler-abort-on-uncaught.js

@ -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…
Cancel
Save