mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-25 18:52:39 +00:00
test(server): accept reset connections from timed-out Git helpers
Force-killed Windows helpers reset their TCP sockets. Silent-remote fixtures must handle ECONNRESET while continuing to fail on unexpected socket errors.
This commit is contained in:
@@ -8,6 +8,10 @@ import { runGitCommand } from "./run-git-command.js";
|
||||
|
||||
const tempDirs: string[] = [];
|
||||
|
||||
function allowConnectionReset(error: NodeJS.ErrnoException): void {
|
||||
if (error.code !== "ECONNRESET") throw error;
|
||||
}
|
||||
|
||||
function makeTempRepo(): string {
|
||||
const repo = mkdtempSync(path.join(tmpdir(), "paseo-git-shell-"));
|
||||
tempDirs.push(repo);
|
||||
@@ -29,6 +33,8 @@ describe("runGitCommand shell behavior", () => {
|
||||
const sockets: Socket[] = [];
|
||||
const server = createServer((socket) => {
|
||||
sockets.push(socket);
|
||||
// Force-killing a Windows peer resets the connection instead of sending EOF.
|
||||
socket.on("error", allowConnectionReset);
|
||||
// Consume the request but never answer, keeping the real transport helper busy.
|
||||
socket.resume();
|
||||
});
|
||||
|
||||
@@ -55,10 +55,18 @@ function createLegacyWorktreeForTest(
|
||||
});
|
||||
}
|
||||
|
||||
function allowConnectionReset(error: NodeJS.ErrnoException): void {
|
||||
if (error.code !== "ECONNRESET") throw error;
|
||||
}
|
||||
|
||||
// A remote that accepts connections and never answers, like a VPN-only host while off the VPN.
|
||||
async function startSilentRemote(): Promise<{ url: string; close: () => Promise<void> }> {
|
||||
const connections = new Set<Socket>();
|
||||
const server = createServer((socket) => connections.add(socket));
|
||||
const server = createServer((socket) => {
|
||||
connections.add(socket);
|
||||
// Timeout cleanup force-kills the peer, which can reset its connection on Windows.
|
||||
socket.on("error", allowConnectionReset);
|
||||
});
|
||||
await new Promise<void>((resolve) => server.listen(0, "127.0.0.1", resolve));
|
||||
const { port } = server.address() as AddressInfo;
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user