From 0720b6db12e2fdbd0e6c10a72aa7a4caa07a6c9c Mon Sep 17 00:00:00 2001 From: Brennan Benson <79079362+brennanb2025@users.noreply.github.com> Date: Mon, 27 Jul 2026 17:30:21 -0700 Subject: [PATCH] fix(ci): stabilize flaky terminal and SFTP tests --- .../terminal-history-incremental-restore.test.ts | 10 ++++++---- src/main/ssh/ssh-connection-sftp-wire.test.ts | 3 ++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/daemon/terminal-history-incremental-restore.test.ts b/src/main/daemon/terminal-history-incremental-restore.test.ts index 234f6af8c6a..88d6d71bf94 100644 --- a/src/main/daemon/terminal-history-incremental-restore.test.ts +++ b/src/main/daemon/terminal-history-incremental-restore.test.ts @@ -278,14 +278,16 @@ describe('incremental terminal history restore', () => { const firstReplay = reader.detectColdRestore(SESSION_ID) const secondReplay = reader.detectColdRestore(secondSessionId) try { + // Drain by yield because awaiting the session that loses the replay-slot race deadlocks. await vi.waitFor(() => expect(pendingYields).toHaveLength(1)) - pendingYields.shift()!() - expect((await firstReplay)?.scrollbackAnsi).toContain('😀second') + await vi.waitFor(() => expect(pendingYields).toHaveLength(1)) - pendingYields.shift()!() - expect((await secondReplay)?.scrollbackAnsi).toContain('😀second') + + for (const restore of await Promise.all([firstReplay, secondReplay])) { + expect(restore?.scrollbackAnsi).toContain('😀second') + } expect(pendingYields).toHaveLength(0) } finally { for (const resume of pendingYields.splice(0)) { diff --git a/src/main/ssh/ssh-connection-sftp-wire.test.ts b/src/main/ssh/ssh-connection-sftp-wire.test.ts index 9f99dc22233..8e107f9a2aa 100644 --- a/src/main/ssh/ssh-connection-sftp-wire.test.ts +++ b/src/main/ssh/ssh-connection-sftp-wire.test.ts @@ -160,7 +160,8 @@ function installSftpHandlers(sftp: SFTPWrapper, backingRoot: string, operations: async function startSftpWireServer(backingRoot: string): Promise { const operations: string[] = [] const connections = new Set() - const hostKey = utils.generateKeyPairSync('ed25519').private + // Ed25519 keygen can produce an invalid 31-byte key; ECDSA points always start with 0x04. + const hostKey = utils.generateKeyPairSync('ecdsa', { bits: 256 }).private const server = new Ssh2Server({ hostKeys: [hostKey] }, (connection) => { connections.add(connection) connection.on('error', () => {})