Skip to content

Commit 51d7c0c

Browse files
committed
test(socket): avoid replacement inode timing race
1 parent c46a6bd commit 51d7c0c

1 file changed

Lines changed: 17 additions & 2 deletions

File tree

  • linux-features/shared-app-server-socket

linux-features/shared-app-server-socket/test.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
const assert = require("node:assert/strict");
55
const { spawn, spawnSync } = require("node:child_process");
6-
const { EventEmitter } = require("node:events");
6+
const { EventEmitter, once } = require("node:events");
77
const fs = require("node:fs");
88
const net = require("node:net");
99
const os = require("node:os");
@@ -304,7 +304,21 @@ test("injected transport serializes startup and removes only its owned socket",
304304
const children = [];
305305
let replacement;
306306
let installReplacementBeforeClose = false;
307+
const identityFs = {
308+
...fs,
309+
lstatSync(candidate, ...args) {
310+
const stat = fs.lstatSync(candidate, ...args);
311+
if (candidate !== socketPath || !installReplacementBeforeClose) return stat;
312+
return new Proxy(stat, {
313+
get(target, property, receiver) {
314+
if (property === "ino") return target.ino + 1;
315+
return Reflect.get(target, property, receiver);
316+
},
317+
});
318+
},
319+
};
307320
const { Transport } = loadInjectedTransport({
321+
fsImpl: identityFs,
308322
spawnImpl(_command, args) {
309323
const child = fakeChild();
310324
children.push(child);
@@ -335,8 +349,9 @@ test("injected transport serializes startup and removes only its owned socket",
335349
await assert.rejects(second.ensureAuthority(), /already owned/);
336350

337351
installReplacementBeforeClose = true;
352+
const childClosed = once(children[0], "close");
338353
first.dispose();
339-
await new Promise((resolve) => setTimeout(resolve, 50));
354+
await childClosed;
340355
assert.equal(fs.lstatSync(socketPath).isSocket(), true, "replacement socket must survive dispose");
341356
await closeServer(replacement);
342357
} finally {

0 commit comments

Comments
 (0)