diff options
author | Chengzhong Wu <chengzhong.wcz@alibaba-inc.com> | 2022-08-16 21:04:48 +0800 |
---|---|---|
committer | legendecas <legendecas@gmail.com> | 2022-08-16 21:04:48 +0800 |
commit | 678551c294e0a71c3969e5e53cb8f4375002c70a (patch) | |
tree | 467884fd774f61f8330bf5f250cf652fbd30ad11 /test/report | |
parent | 5e5fb825fc4bc3cd3e51614aaad9af14342a5e6c (diff) | |
download | node-new-678551c294e0a71c3969e5e53cb8f4375002c70a.tar.gz |
report: skip report if uncaught exception is handled
If the exception is handled by the userland
process#uncaughtException handler, reports should not be generated
repetitively as the process may continue to run.
PR-URL: https://github.com/nodejs/node/pull/44208
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
Diffstat (limited to 'test/report')
6 files changed, 108 insertions, 36 deletions
diff --git a/test/report/test-report-uncaught-exception-compat.js b/test/report/test-report-uncaught-exception-compat.js index 9fe690595e..91989f6ecd 100644 --- a/test/report/test-report-uncaught-exception-compat.js +++ b/test/report/test-report-uncaught-exception-compat.js @@ -1,5 +1,32 @@ -// Flags: --experimental-report --report-uncaught-exception --report-compact 'use strict'; -// Test producing a compact report on uncaught exception. -require('../common'); -require('./test-report-uncaught-exception.js'); +// Test producing a report on uncaught exception. +const common = require('../common'); +const assert = require('assert'); +const childProcess = require('child_process'); +const helper = require('../common/report'); +const tmpdir = require('../common/tmpdir'); + +if (process.argv[2] === 'child') { + throw new Error('test error'); +} + +tmpdir.refresh(); +const child = childProcess.spawn(process.execPath, [ + '--report-uncaught-exception', + '--report-compact', + __filename, + 'child', +], { + cwd: tmpdir.path +}); +child.on('exit', common.mustCall((code) => { + assert.strictEqual(code, 1); + const reports = helper.findReports(child.pid, tmpdir.path); + assert.strictEqual(reports.length, 1); + + helper.validate(reports[0], [ + ['header.event', 'Exception'], + ['header.trigger', 'Exception'], + ['javascriptStack.message', 'Error: test error'], + ]); +})); diff --git a/test/report/test-report-uncaught-exception-handled.js b/test/report/test-report-uncaught-exception-handled.js new file mode 100644 index 0000000000..fffe5ef333 --- /dev/null +++ b/test/report/test-report-uncaught-exception-handled.js @@ -0,0 +1,23 @@ +// Flags: --report-uncaught-exception +'use strict'; +// Test report is suppressed on uncaught exception hook. +const common = require('../common'); +const assert = require('assert'); +const helper = require('../common/report'); +const tmpdir = require('../common/tmpdir'); +const error = new Error('test error'); + +tmpdir.refresh(); +process.report.directory = tmpdir.path; + +// Make sure the uncaughtException listener is called. +process.on('uncaughtException', common.mustCall()); + +process.on('exit', (code) => { + assert.strictEqual(code, 0); + // Make sure no reports are generated. + const reports = helper.findReports(process.pid, tmpdir.path); + assert.strictEqual(reports.length, 0); +}); + +throw error; diff --git a/test/report/test-report-uncaught-exception-override.js b/test/report/test-report-uncaught-exception-override.js index df4f8a1958..007e8a234c 100644 --- a/test/report/test-report-uncaught-exception-override.js +++ b/test/report/test-report-uncaught-exception-override.js @@ -12,9 +12,7 @@ process.report.directory = tmpdir.path; // First, install an uncaught exception hook. process.setUncaughtExceptionCaptureCallback(common.mustCall()); - -// Make sure this is ignored due to the above override. -process.on('uncaughtException', common.mustNotCall()); +// Do not install process uncaughtException handler. process.on('exit', (code) => { assert.strictEqual(code, 0); diff --git a/test/report/test-report-uncaught-exception-primitives.js b/test/report/test-report-uncaught-exception-primitives.js index 8de67eeb6a..8e78ad3317 100644 --- a/test/report/test-report-uncaught-exception-primitives.js +++ b/test/report/test-report-uncaught-exception-primitives.js @@ -1,25 +1,32 @@ -// Flags: --report-uncaught-exception 'use strict'; // Test producing a report on uncaught exception. const common = require('../common'); const assert = require('assert'); +const childProcess = require('child_process'); const helper = require('../common/report'); const tmpdir = require('../common/tmpdir'); -const exception = 1; +if (process.argv[2] === 'child') { + // eslint-disable-next-line no-throw-literal + throw 1; +} tmpdir.refresh(); -process.report.directory = tmpdir.path; - -process.on('uncaughtException', common.mustCall((err) => { - assert.strictEqual(err, exception); - const reports = helper.findReports(process.pid, tmpdir.path); +const child = childProcess.spawn(process.execPath, [ + '--report-uncaught-exception', + __filename, + 'child', +], { + cwd: tmpdir.path, +}); +child.on('exit', common.mustCall((code) => { + assert.strictEqual(code, 1); + const reports = helper.findReports(child.pid, tmpdir.path); assert.strictEqual(reports.length, 1); helper.validate(reports[0], [ ['header.event', 'Exception'], - ['javascriptStack.message', `${exception}`], + ['header.trigger', 'Exception'], + ['javascriptStack.message', '1'], ]); })); - -throw exception; diff --git a/test/report/test-report-uncaught-exception-symbols.js b/test/report/test-report-uncaught-exception-symbols.js index b165617285..09dd465360 100644 --- a/test/report/test-report-uncaught-exception-symbols.js +++ b/test/report/test-report-uncaught-exception-symbols.js @@ -1,25 +1,31 @@ -// Flags: --report-uncaught-exception 'use strict'; // Test producing a report on uncaught exception. const common = require('../common'); const assert = require('assert'); +const childProcess = require('child_process'); const helper = require('../common/report'); const tmpdir = require('../common/tmpdir'); -const exception = Symbol('foobar'); +if (process.argv[2] === 'child') { + throw Symbol('foobar'); +} tmpdir.refresh(); -process.report.directory = tmpdir.path; - -process.on('uncaughtException', common.mustCall((err) => { - assert.strictEqual(err, exception); - const reports = helper.findReports(process.pid, tmpdir.path); +const child = childProcess.spawn(process.execPath, [ + '--report-uncaught-exception', + __filename, + 'child', +], { + cwd: tmpdir.path, +}); +child.on('exit', common.mustCall((code) => { + assert.strictEqual(code, 1); + const reports = helper.findReports(child.pid, tmpdir.path); assert.strictEqual(reports.length, 1); helper.validate(reports[0], [ ['header.event', 'Exception'], + ['header.trigger', 'Exception'], ['javascriptStack.message', 'Symbol(foobar)'], ]); })); - -throw exception; diff --git a/test/report/test-report-uncaught-exception.js b/test/report/test-report-uncaught-exception.js index 10dcccb090..5809104165 100644 --- a/test/report/test-report-uncaught-exception.js +++ b/test/report/test-report-uncaught-exception.js @@ -1,20 +1,31 @@ -// Flags: --report-uncaught-exception 'use strict'; // Test producing a report on uncaught exception. const common = require('../common'); const assert = require('assert'); +const childProcess = require('child_process'); const helper = require('../common/report'); const tmpdir = require('../common/tmpdir'); -const error = new Error('test error'); -tmpdir.refresh(); -process.report.directory = tmpdir.path; +if (process.argv[2] === 'child') { + throw new Error('test error'); +} -process.on('uncaughtException', common.mustCall((err) => { - assert.strictEqual(err, error); - const reports = helper.findReports(process.pid, tmpdir.path); +tmpdir.refresh(); +const child = childProcess.spawn(process.execPath, [ + '--report-uncaught-exception', + __filename, + 'child', +], { + cwd: tmpdir.path, +}); +child.on('exit', common.mustCall((code) => { + assert.strictEqual(code, 1); + const reports = helper.findReports(child.pid, tmpdir.path); assert.strictEqual(reports.length, 1); - helper.validate(reports[0]); -})); -throw error; + helper.validate(reports[0], [ + ['header.event', 'Exception'], + ['header.trigger', 'Exception'], + ['javascriptStack.message', 'Error: test error'], + ]); +})); |