Skip to content

Commit 083ceae

Browse files
committed
test: disable flaky WPT Blob test on AIX
The test Blob-array-buffer.any.js can be flaky on AIX due to a recognized race condition in v8. The failed assert is in deps/v8/src/base/platform/platform-aix.cc on line 199, preceeded by the comment: > // If this check fails it's most likely due to a racing condition where > // another thread has mapped the same address right before we do. > // Since this could cause hard-to-debug issues, potentially with security > // impact, and we can't recover from this, the best we can do is abort the > // process. Disabling the test on AIX until the underlying issue can be resolved (if it can be resolved at all) is really the only option currently. Reliability Report: https://github.com/nodejs/reliability/blob/main/reports/2026-03-28.md Signed-off-by: James M Snell <jasnell@gmail.com> Assisted-by: Opencode/Opus 4.6
1 parent e78ccd8 commit 083ceae

File tree

2 files changed

+59
-38
lines changed

2 files changed

+59
-38
lines changed

test/wpt/status/FileAPI/blob.cjs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
'use strict';
2+
3+
const os = require('node:os');
4+
5+
// On AIX, V8's OS::DecommitPages() has an inherent race condition caused by
6+
// AIX's non-POSIX MAP_FIXED behavior. The implementation must munmap() then
7+
// mmap(), and another thread can steal the address range in between. The
8+
// Blob.arrayBuffer() tests trigger this by creating enough GC pressure
9+
// (especially the concurrent reads test) to hit the race window.
10+
// See deps/v8/src/base/platform/platform-aix.cc, lines 168-203.
11+
const isAIX = os.type() === 'AIX';
12+
13+
const conditionalSkips = {};
14+
15+
if (isAIX) {
16+
conditionalSkips['Blob-array-buffer.any.js'] = {
17+
skip: 'V8 DecommitPages race condition on AIX (munmap/mmap non-atomic)',
18+
};
19+
}
20+
21+
module.exports = {
22+
...conditionalSkips,
23+
'Blob-constructor-dom.window.js': {
24+
skip: 'Depends on DOM API',
25+
},
26+
'Blob-constructor.any.js': {
27+
fail: {
28+
expected: [
29+
'blobParts not an object: boolean with Boolean.prototype[Symbol.iterator]',
30+
'blobParts not an object: number with Number.prototype[Symbol.iterator]',
31+
'blobParts not an object: BigInt with BigInt.prototype[Symbol.iterator]',
32+
'blobParts not an object: Symbol with Symbol.prototype[Symbol.iterator]',
33+
'Getters and value conversions should happen in order until an exception is thrown.',
34+
'Arguments should be evaluated from left to right.',
35+
],
36+
flaky: [
37+
'Passing typed arrays as elements of the blobParts array should work.',
38+
'Passing a Float16Array as element of the blobParts array should work.',
39+
'Passing a Float64Array as element of the blobParts array should work.',
40+
'Passing BigInt typed arrays as elements of the blobParts array should work.',
41+
],
42+
},
43+
},
44+
'Blob-in-worker.worker.js': {
45+
skip: 'Depends on Web Workers API',
46+
},
47+
'Blob-slice.any.js': {
48+
fail: {
49+
expected: [
50+
'Slicing test: slice (1,1).',
51+
'Slicing test: slice (1,3).',
52+
'Slicing test: slice (1,5).',
53+
'Slicing test: slice (1,7).',
54+
'Slicing test: slice (1,8).',
55+
'Slicing test: slice (1,9).',
56+
],
57+
},
58+
},
59+
};

test/wpt/status/FileAPI/blob.json

Lines changed: 0 additions & 38 deletions
This file was deleted.

0 commit comments

Comments
 (0)