summaryrefslogtreecommitdiff
path: root/test/report
diff options
context:
space:
mode:
authorChengzhong Wu <chengzhong.wcz@alibaba-inc.com>2022-08-16 21:04:48 +0800
committerlegendecas <legendecas@gmail.com>2022-08-16 21:04:48 +0800
commit678551c294e0a71c3969e5e53cb8f4375002c70a (patch)
tree467884fd774f61f8330bf5f250cf652fbd30ad11 /test/report
parent5e5fb825fc4bc3cd3e51614aaad9af14342a5e6c (diff)
downloadnode-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')
-rw-r--r--test/report/test-report-uncaught-exception-compat.js35
-rw-r--r--test/report/test-report-uncaught-exception-handled.js23
-rw-r--r--test/report/test-report-uncaught-exception-override.js4
-rw-r--r--test/report/test-report-uncaught-exception-primitives.js27
-rw-r--r--test/report/test-report-uncaught-exception-symbols.js24
-rw-r--r--test/report/test-report-uncaught-exception.js31
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'],
+ ]);
+}));