summaryrefslogtreecommitdiff
path: root/test/report
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2022-08-25 13:25:25 +0800
committerlegendecas <legendecas@gmail.com>2022-08-29 11:39:15 +0800
commit04c4688da5b72815d55c52267195e3aa733f85de (patch)
tree30ce26f8713cec4ef2f6424b69ce90cfd7fd900f /test/report
parent60c3077d464492beeeaf8b25a12e36bfd35006f5 (diff)
downloadnode-new-04c4688da5b72815d55c52267195e3aa733f85de.tar.gz
test: split report OOM tests
On some machines the report OOM tests can take too long to complete, resulting in a timeout. This splits the test into several different smaller tests to reduce the flakiness of it. PR-URL: https://github.com/nodejs/node/pull/44389 Refs: https://github.com/nodejs/reliability/issues/356 Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Diffstat (limited to 'test/report')
-rw-r--r--test/report/test-report-fatalerror-oomerror-compact.js35
-rw-r--r--test/report/test-report-fatalerror-oomerror-directory.js36
-rw-r--r--test/report/test-report-fatalerror-oomerror-filename.js40
-rw-r--r--test/report/test-report-fatalerror-oomerror-not-set.js26
-rw-r--r--test/report/test-report-fatalerror-oomerror-set.js37
-rw-r--r--test/report/test-report-fatalerror-oomerror.js123
6 files changed, 174 insertions, 123 deletions
diff --git a/test/report/test-report-fatalerror-oomerror-compact.js b/test/report/test-report-fatalerror-oomerror-compact.js
new file mode 100644
index 0000000000..c8ed75e3ed
--- /dev/null
+++ b/test/report/test-report-fatalerror-oomerror-compact.js
@@ -0,0 +1,35 @@
+'use strict';
+
+// Testcases for situations involving fatal errors, like Javascript heap OOM
+
+require('../common');
+const assert = require('assert');
+const fs = require('fs');
+const helper = require('../common/report.js');
+const spawnSync = require('child_process').spawnSync;
+const tmpdir = require('../common/tmpdir');
+const fixtures = require('../common/fixtures');
+
+// Common args that will cause an out-of-memory error for child process.
+const ARGS = [
+ '--max-old-space-size=20',
+ fixtures.path('report-oom'),
+];
+
+{
+ // Verify that --report-compact is respected when set.
+ tmpdir.refresh();
+ const args = ['--report-on-fatalerror', '--report-compact', ...ARGS];
+ const child = spawnSync(process.execPath, args, { cwd: tmpdir.path });
+ assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly');
+
+ const reports = helper.findReports(child.pid, tmpdir.path);
+ assert.strictEqual(reports.length, 1);
+
+ const report = reports[0];
+ helper.validate(report);
+ assert.strictEqual(require(report).header.threadId, null);
+ // Subtract 1 because "xx\n".split("\n") => [ 'xx', '' ].
+ const lines = fs.readFileSync(report, 'utf8').split('\n').length - 1;
+ assert.strictEqual(lines, 1);
+}
diff --git a/test/report/test-report-fatalerror-oomerror-directory.js b/test/report/test-report-fatalerror-oomerror-directory.js
new file mode 100644
index 0000000000..5135760d7d
--- /dev/null
+++ b/test/report/test-report-fatalerror-oomerror-directory.js
@@ -0,0 +1,36 @@
+'use strict';
+
+// Testcases for situations involving fatal errors, like Javascript heap OOM
+
+require('../common');
+const assert = require('assert');
+const fs = require('fs');
+const helper = require('../common/report.js');
+const spawnSync = require('child_process').spawnSync;
+const tmpdir = require('../common/tmpdir');
+const fixtures = require('../common/fixtures');
+
+// Common args that will cause an out-of-memory error for child process.
+const ARGS = [
+ '--max-old-space-size=20',
+ fixtures.path('report-oom'),
+];
+
+{
+ // Verify that --report-directory is respected when set.
+ // Verify that --report-compact is respected when not set.
+ tmpdir.refresh();
+ const dir = '--report-directory=' + tmpdir.path;
+ const args = ['--report-on-fatalerror', dir, ...ARGS];
+ const child = spawnSync(process.execPath, args, { });
+ assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly');
+
+ const reports = helper.findReports(child.pid, tmpdir.path);
+ assert.strictEqual(reports.length, 1);
+
+ const report = reports[0];
+ helper.validate(report);
+ assert.strictEqual(require(report).header.threadId, null);
+ const lines = fs.readFileSync(report, 'utf8').split('\n').length - 1;
+ assert(lines > 10);
+}
diff --git a/test/report/test-report-fatalerror-oomerror-filename.js b/test/report/test-report-fatalerror-oomerror-filename.js
new file mode 100644
index 0000000000..b0995f8d5a
--- /dev/null
+++ b/test/report/test-report-fatalerror-oomerror-filename.js
@@ -0,0 +1,40 @@
+'use strict';
+
+// Testcases for situations involving fatal errors, like Javascript heap OOM
+
+require('../common');
+const assert = require('assert');
+const helper = require('../common/report.js');
+const spawnSync = require('child_process').spawnSync;
+const tmpdir = require('../common/tmpdir');
+const fixtures = require('../common/fixtures');
+
+// Common args that will cause an out-of-memory error for child process.
+const ARGS = [
+ '--max-old-space-size=20',
+ fixtures.path('report-oom'),
+];
+
+{
+ // Verify that --report-compact is respected when set.
+ // Verify that --report-filename is respected when set.
+ tmpdir.refresh();
+ const args = [
+ '--report-on-fatalerror',
+ '--report-compact',
+ '--report-filename=stderr',
+ ...ARGS,
+ ];
+ const child = spawnSync(process.execPath, args, { encoding: 'utf8' });
+ assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly');
+
+ const reports = helper.findReports(child.pid, tmpdir.path);
+ assert.strictEqual(reports.length, 0);
+
+ const lines = child.stderr.split('\n');
+ // Skip over unavoidable free-form output and gc log from V8.
+ const report = lines.find((i) => i.startsWith('{'));
+ const json = JSON.parse(report);
+
+ assert.strictEqual(json.header.threadId, null);
+}
diff --git a/test/report/test-report-fatalerror-oomerror-not-set.js b/test/report/test-report-fatalerror-oomerror-not-set.js
new file mode 100644
index 0000000000..31bb8f1f38
--- /dev/null
+++ b/test/report/test-report-fatalerror-oomerror-not-set.js
@@ -0,0 +1,26 @@
+'use strict';
+
+// Testcases for situations involving fatal errors, like Javascript heap OOM
+
+require('../common');
+const assert = require('assert');
+const helper = require('../common/report.js');
+const spawnSync = require('child_process').spawnSync;
+const tmpdir = require('../common/tmpdir');
+const fixtures = require('../common/fixtures');
+
+// Common args that will cause an out-of-memory error for child process.
+const ARGS = [
+ '--max-old-space-size=20',
+ fixtures.path('report-oom'),
+];
+
+{
+ tmpdir.refresh();
+ // Verify that --report-on-fatalerror is respected when not set.
+ const args = ARGS;
+ const child = spawnSync(process.execPath, args, { cwd: tmpdir.path });
+ assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly');
+ const reports = helper.findReports(child.pid, tmpdir.path);
+ assert.strictEqual(reports.length, 0);
+}
diff --git a/test/report/test-report-fatalerror-oomerror-set.js b/test/report/test-report-fatalerror-oomerror-set.js
new file mode 100644
index 0000000000..ce2a7869f7
--- /dev/null
+++ b/test/report/test-report-fatalerror-oomerror-set.js
@@ -0,0 +1,37 @@
+'use strict';
+
+// Testcases for situations involving fatal errors, like Javascript heap OOM
+
+require('../common');
+const assert = require('assert');
+const helper = require('../common/report.js');
+const spawnSync = require('child_process').spawnSync;
+const tmpdir = require('../common/tmpdir');
+const fixtures = require('../common/fixtures');
+
+// Common args that will cause an out-of-memory error for child process.
+const ARGS = [
+ '--max-old-space-size=20',
+ fixtures.path('report-oom'),
+];
+
+{
+ // Verify that --report-on-fatalerror is respected when set.
+ tmpdir.refresh();
+ const args = ['--report-on-fatalerror', ...ARGS];
+ const child = spawnSync(process.execPath, args, { cwd: tmpdir.path });
+ assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly');
+
+ const reports = helper.findReports(child.pid, tmpdir.path);
+ assert.strictEqual(reports.length, 1);
+
+ const report = reports[0];
+ helper.validate(report);
+
+ const content = require(report);
+ // Errors occur in a context where env is not available, so thread ID is
+ // unknown. Assert this, to verify that the underlying env-less situation is
+ // actually reached.
+ assert.strictEqual(content.header.threadId, null);
+ assert.strictEqual(content.header.trigger, 'OOMError');
+}
diff --git a/test/report/test-report-fatalerror-oomerror.js b/test/report/test-report-fatalerror-oomerror.js
deleted file mode 100644
index 5b918d65e6..0000000000
--- a/test/report/test-report-fatalerror-oomerror.js
+++ /dev/null
@@ -1,123 +0,0 @@
-'use strict';
-
-// Testcases for situations involving fatal errors, like Javascript heap OOM
-
-require('../common');
-const assert = require('assert');
-const fs = require('fs');
-const helper = require('../common/report.js');
-const spawnSync = require('child_process').spawnSync;
-const tmpdir = require('../common/tmpdir');
-
-if (process.argv[2] === 'child') {
-
- const list = [];
- while (true) {
- const record = new MyRecord();
- list.push(record);
- }
-
- function MyRecord() {
- this.name = 'foo';
- this.id = 128;
- this.account = 98454324;
- }
-}
-
-// Common args that will cause an out-of-memory error for child process.
-const ARGS = [
- '--max-old-space-size=20',
- __filename,
- 'child',
-];
-
-{
- // Verify that --report-on-fatalerror is respected when set.
- tmpdir.refresh();
- const args = ['--report-on-fatalerror', ...ARGS];
- const child = spawnSync(process.execPath, args, { cwd: tmpdir.path });
- assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly');
-
- const reports = helper.findReports(child.pid, tmpdir.path);
- assert.strictEqual(reports.length, 1);
-
- const report = reports[0];
- helper.validate(report);
-
- const content = require(report);
- // Errors occur in a context where env is not available, so thread ID is
- // unknown. Assert this, to verify that the underlying env-less situation is
- // actually reached.
- assert.strictEqual(content.header.threadId, null);
- assert.strictEqual(content.header.trigger, 'OOMError');
-}
-
-{
- // Verify that --report-on-fatalerror is respected when not set.
- const args = ARGS;
- const child = spawnSync(process.execPath, args, { cwd: tmpdir.path });
- assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly');
- const reports = helper.findReports(child.pid, tmpdir.path);
- assert.strictEqual(reports.length, 0);
-}
-
-{
- // Verify that --report-directory is respected when set.
- // Verify that --report-compact is respected when not set.
- tmpdir.refresh();
- const dir = '--report-directory=' + tmpdir.path;
- const args = ['--report-on-fatalerror', dir, ...ARGS];
- const child = spawnSync(process.execPath, args, { });
- assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly');
-
- const reports = helper.findReports(child.pid, tmpdir.path);
- assert.strictEqual(reports.length, 1);
-
- const report = reports[0];
- helper.validate(report);
- assert.strictEqual(require(report).header.threadId, null);
- const lines = fs.readFileSync(report, 'utf8').split('\n').length - 1;
- assert(lines > 10);
-}
-
-{
- // Verify that --report-compact is respected when set.
- tmpdir.refresh();
- const args = ['--report-on-fatalerror', '--report-compact', ...ARGS];
- const child = spawnSync(process.execPath, args, { cwd: tmpdir.path });
- assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly');
-
- const reports = helper.findReports(child.pid, tmpdir.path);
- assert.strictEqual(reports.length, 1);
-
- const report = reports[0];
- helper.validate(report);
- assert.strictEqual(require(report).header.threadId, null);
- // Subtract 1 because "xx\n".split("\n") => [ 'xx', '' ].
- const lines = fs.readFileSync(report, 'utf8').split('\n').length - 1;
- assert.strictEqual(lines, 1);
-}
-
-{
- // Verify that --report-compact is respected when set.
- // Verify that --report-filename is respected when set.
- tmpdir.refresh();
- const args = [
- '--report-on-fatalerror',
- '--report-compact',
- '--report-filename=stderr',
- ...ARGS,
- ];
- const child = spawnSync(process.execPath, args, { encoding: 'utf8' });
- assert.notStrictEqual(child.status, 0, 'Process exited unexpectedly');
-
- const reports = helper.findReports(child.pid, tmpdir.path);
- assert.strictEqual(reports.length, 0);
-
- const lines = child.stderr.split('\n');
- // Skip over unavoidable free-form output and gc log from V8.
- const report = lines.find((i) => i.startsWith('{'));
- const json = JSON.parse(report);
-
- assert.strictEqual(json.header.threadId, null);
-}