-
Notifications
You must be signed in to change notification settings - Fork 29.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test: replace flaky pummel regression tests
These tests were written a long time ago, and use the allocation of large amounts of unused memory as a way to detect use-after-free problems with Buffers. As a result, the tests are resource-intensive and may crash because of that. Replace them with a more modern test. We don’t explicitly try to *detect* use-after-free conditions, and instead rely on e.g. ASAN (or the process just crashing hard) to do that for us. Fixes: #34527
- Loading branch information
Showing
3 changed files
with
38 additions
and
195 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
// Flags: --expose-gc | ||
'use strict'; | ||
const common = require('../common'); | ||
const tmpdir = require('../common/tmpdir'); | ||
const assert = require('assert'); | ||
const path = require('path'); | ||
|
||
// Regression test for https://github.com/nodejs/node-v0.x-archive/issues/814: | ||
// Make sure that Buffers passed to fs.write() are not garbage-collected | ||
// even when the callback is being reused. | ||
|
||
const fs = require('fs'); | ||
|
||
tmpdir.refresh(); | ||
const filename = path.join(tmpdir.path, 'test.txt'); | ||
const fd = fs.openSync(filename, 'w'); | ||
|
||
const size = 16 * 1024; | ||
const writes = 1000; | ||
let done = 0; | ||
|
||
const ondone = common.mustCall((err) => { | ||
assert.ifError(err); | ||
if (++done < writes) { | ||
if (done % 25 === 0) global.gc(); | ||
setImmediate(write); | ||
} else { | ||
assert.strictEqual( | ||
fs.readFileSync(filename, 'utf8'), | ||
'x'.repeat(writes * size)); | ||
} | ||
}, writes); | ||
|
||
write(); | ||
function write() { | ||
const buf = Buffer.alloc(size, 'x'); | ||
fs.write(fd, buf, 0, buf.size, -1, ondone); | ||
} |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.