Skip to main content
Glama
timeout-removal-validation.test.ts7.13 kB
/** * TDD Tests for Timeout System Removal Validation * * Phase 1: Long Running Command Support - Remove Over-Engineered Timeout Systems * * These tests verify that over-engineered timeout mechanisms have been completely removed: * 1. Echo Suppression System (CommandStateManager) * 2. Queue Staleness Timeouts (cleanStaleCommands) * 3. Command State Cleanup (30-second garbage collection) * 4. Activity-Reset Timeout (timeout reset on data activity) */ import { SSHConnectionManager } from '../src/ssh-connection-manager.js'; import { QUEUE_CONSTANTS } from '../src/types.js'; describe('Timeout System Removal Validation', () => { describe('Story 01: Echo Suppression System Removal', () => { it('should pass - CommandStateManager class should not exist', () => { // CommandStateManager should be completely removed try { // Try to import the module - this should fail require('../src/command-state-manager.js'); throw new Error('CommandStateManager should not exist'); } catch (error) { // Expected - module should not exist expect(error).toBeDefined(); expect((error as any).message).toContain('Could not locate module'); } }); it('should pass - SSH connection manager should not import CommandStateManager', () => { // CommandStateManager import and methods should be completely removed const connectionManager = new SSHConnectionManager(8080); // Check that setCommandStateManager method doesn't exist expect('setCommandStateManager' in connectionManager).toBe(false); }); it('should pass - trackCommandSubmission should not exist', () => { // Method should be completely removed const connectionManager = new SSHConnectionManager(8080); expect('trackCommandSubmission' in connectionManager).toBe(false); }); it('should pass - 100ms timeout window logic should not exist in code', async () => { // Read the source file and verify no 100ms echo suppression timeout exists const fs = await import('fs/promises'); const sourceCode = await fs.readFile('./src/ssh-connection-manager.ts', 'utf8'); // Should not contain echo suppression timeout references expect(sourceCode).not.toContain('echoWindow'); expect(sourceCode).not.toContain('Echo suppression'); expect(sourceCode).not.toContain('CommandStateManager'); }); }); describe('Story 02: Queue Staleness Timeout Removal', () => { it('should pass - cleanStaleCommands method should not exist', () => { // Method should be completely removed const connectionManager = new SSHConnectionManager(8080); expect('cleanStaleCommands' in connectionManager).toBe(false); }); it('should pass - MAX_COMMAND_AGE_MS constant should not exist', () => { // Constant should be completely removed const constants = QUEUE_CONSTANTS as any; expect(constants.MAX_COMMAND_AGE_MS).toBeUndefined(); expect('MAX_COMMAND_AGE_MS' in QUEUE_CONSTANTS).toBe(false); }); it('should pass - 5-minute queue timeout logic should not exist in code', async () => { // Read the source file and verify no queue staleness timeout exists const fs = await import('fs/promises'); const sourceCode = await fs.readFile('./src/ssh-connection-manager.ts', 'utf8'); // Should not contain queue staleness references expect(sourceCode).not.toContain('cleanStaleCommands'); expect(sourceCode).not.toContain('stale'); expect(sourceCode).not.toContain('MAX_COMMAND_AGE_MS'); }); }); describe('Story 03: Command State Cleanup Removal', () => { it('should pass - cleanup method with 30-second timeout should not exist', async () => { // CommandStateManager has been completely removed, so cleanup() method is gone const fs = await import('fs/promises'); try { const sourceCode = await fs.readFile('./src/command-state-manager.ts', 'utf8'); expect(sourceCode).not.toContain('30000'); // 30 seconds expect(sourceCode).not.toContain('cleanup'); expect(sourceCode).not.toContain('maxAge'); } catch (error) { // File should not exist after removal - this is expected expect((error as NodeJS.ErrnoException).code).toBe('ENOENT'); } }); it('should pass - command state garbage collection timers should not exist', async () => { const fs = await import('fs/promises'); const sourceCode = await fs.readFile('./src/ssh-connection-manager.ts', 'utf8'); // Should not contain command state garbage collection references expect(sourceCode).not.toContain('maxAge'); expect(sourceCode).not.toContain('CommandStateManager'); expect(sourceCode).not.toContain('garbage collection'); // Note: cleanup() method exists for SSH session cleanup, which is legitimate // Note: Nuclear timeout functionality is separate and legitimate }); }); describe('Story 04: Activity-Reset Timeout Removal', () => { it('should pass - timeout reset on data activity should not exist', async () => { const fs = await import('fs/promises'); const sourceCode = await fs.readFile('./src/ssh-connection-manager.ts', 'utf8'); // Should not contain activity-based timeout reset expect(sourceCode).not.toContain('Reset timeout on data activity'); // Note: clearTimeout and setTimeout may exist for other legitimate purposes // but activity-based reset should be removed }); it('should pass - infinite execution capability should be enabled', async () => { const fs = await import('fs/promises'); const sourceCode = await fs.readFile('./src/ssh-connection-manager.ts', 'utf8'); // Should contain the note about infinite execution capability expect(sourceCode).toContain('infinite execution capability'); // Should not contain the old activity timeout reset pattern expect(sourceCode).not.toContain('activity-based timeout'); // The specific pattern that was removed: timeout reset inside data handler const oldPattern = /clearTimeout\(timeoutHandle\);\s*timeoutHandle = setTimeout/; expect(sourceCode).not.toMatch(oldPattern); }); }); describe('Integration: Simple Infinite Execution Model', () => { it('should pass - SSH connection manager should support infinite execution', () => { const connectionManager = new SSHConnectionManager(8080); // Should be able to create connection manager without timeout dependencies expect(connectionManager).toBeDefined(); expect(typeof connectionManager.createConnection).toBe('function'); expect(typeof connectionManager.executeCommand).toBe('function'); }); it('should pass - no over-engineered timeout mechanisms in constructor', () => { const connectionManager = new SSHConnectionManager(8080); // Constructor should not initialize timeout-related state // This validates the simple, clean architecture expect(connectionManager).toBeDefined(); }); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/LightspeedDMS/ssh-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server