From 96c4de0f8af3338137eb3ffcbc61c595e6fe72ec Mon Sep 17 00:00:00 2001 From: Philipp Kunz Date: Sat, 31 May 2025 18:12:19 +0000 Subject: [PATCH] fix(connection-manager): set default maxConnections to 10000 if not specified --- test/core/utils/test.event-system.ts | 207 ------------------- ts/proxies/smart-proxy/connection-manager.ts | 2 +- 2 files changed, 1 insertion(+), 208 deletions(-) delete mode 100644 test/core/utils/test.event-system.ts diff --git a/test/core/utils/test.event-system.ts b/test/core/utils/test.event-system.ts deleted file mode 100644 index 59f233d..0000000 --- a/test/core/utils/test.event-system.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { expect, tap } from '@git.zone/tstest/tapbundle'; -import { - EventSystem, - ProxyEvents, - ComponentType -} from '../../../ts/core/utils/event-system.js'; - -// Setup function for creating a new event system -function setupEventSystem(): { eventSystem: EventSystem, receivedEvents: any[] } { - const eventSystem = new EventSystem(ComponentType.SMART_PROXY, 'test-id'); - const receivedEvents: any[] = []; - return { eventSystem, receivedEvents }; -} - -tap.test('Event System - certificate events with correct structure', async () => { - const { eventSystem, receivedEvents } = setupEventSystem(); - - // Set up listeners - eventSystem.on(ProxyEvents.CERTIFICATE_ISSUED, (data) => { - receivedEvents.push({ - type: 'issued', - data - }); - }); - - eventSystem.on(ProxyEvents.CERTIFICATE_RENEWED, (data) => { - receivedEvents.push({ - type: 'renewed', - data - }); - }); - - // Emit events - eventSystem.emitCertificateIssued({ - domain: 'example.com', - certificate: 'cert-content', - privateKey: 'key-content', - expiryDate: new Date('2025-01-01') - }); - - eventSystem.emitCertificateRenewed({ - domain: 'example.com', - certificate: 'new-cert-content', - privateKey: 'new-key-content', - expiryDate: new Date('2026-01-01'), - isRenewal: true - }); - - // Verify events - expect(receivedEvents.length).toEqual(2); - - // Check issuance event - expect(receivedEvents[0].type).toEqual('issued'); - expect(receivedEvents[0].data.domain).toEqual('example.com'); - expect(receivedEvents[0].data.certificate).toEqual('cert-content'); - expect(receivedEvents[0].data.componentType).toEqual(ComponentType.SMART_PROXY); - expect(receivedEvents[0].data.componentId).toEqual('test-id'); - expect(typeof receivedEvents[0].data.timestamp).toEqual('number'); - - // Check renewal event - expect(receivedEvents[1].type).toEqual('renewed'); - expect(receivedEvents[1].data.domain).toEqual('example.com'); - expect(receivedEvents[1].data.isRenewal).toEqual(true); - expect(receivedEvents[1].data.expiryDate).toEqual(new Date('2026-01-01')); -}); - -tap.test('Event System - component lifecycle events', async () => { - const { eventSystem, receivedEvents } = setupEventSystem(); - - // Set up listeners - eventSystem.on(ProxyEvents.COMPONENT_STARTED, (data) => { - receivedEvents.push({ - type: 'started', - data - }); - }); - - eventSystem.on(ProxyEvents.COMPONENT_STOPPED, (data) => { - receivedEvents.push({ - type: 'stopped', - data - }); - }); - - // Emit events - eventSystem.emitComponentStarted('TestComponent', '1.0.0'); - eventSystem.emitComponentStopped('TestComponent'); - - // Verify events - expect(receivedEvents.length).toEqual(2); - - // Check started event - expect(receivedEvents[0].type).toEqual('started'); - expect(receivedEvents[0].data.name).toEqual('TestComponent'); - expect(receivedEvents[0].data.version).toEqual('1.0.0'); - - // Check stopped event - expect(receivedEvents[1].type).toEqual('stopped'); - expect(receivedEvents[1].data.name).toEqual('TestComponent'); -}); - -tap.test('Event System - connection events', async () => { - const { eventSystem, receivedEvents } = setupEventSystem(); - - // Set up listeners - eventSystem.on(ProxyEvents.CONNECTION_ESTABLISHED, (data) => { - receivedEvents.push({ - type: 'established', - data - }); - }); - - eventSystem.on(ProxyEvents.CONNECTION_CLOSED, (data) => { - receivedEvents.push({ - type: 'closed', - data - }); - }); - - // Emit events - eventSystem.emitConnectionEstablished({ - connectionId: 'conn-123', - clientIp: '192.168.1.1', - port: 443, - isTls: true, - domain: 'example.com' - }); - - eventSystem.emitConnectionClosed({ - connectionId: 'conn-123', - clientIp: '192.168.1.1', - port: 443 - }); - - // Verify events - expect(receivedEvents.length).toEqual(2); - - // Check established event - expect(receivedEvents[0].type).toEqual('established'); - expect(receivedEvents[0].data.connectionId).toEqual('conn-123'); - expect(receivedEvents[0].data.clientIp).toEqual('192.168.1.1'); - expect(receivedEvents[0].data.port).toEqual(443); - expect(receivedEvents[0].data.isTls).toEqual(true); - - // Check closed event - expect(receivedEvents[1].type).toEqual('closed'); - expect(receivedEvents[1].data.connectionId).toEqual('conn-123'); -}); - -tap.test('Event System - once and off subscription methods', async () => { - const { eventSystem, receivedEvents } = setupEventSystem(); - - // Set up a listener that should fire only once - eventSystem.once(ProxyEvents.CONNECTION_ESTABLISHED, (data) => { - receivedEvents.push({ - type: 'once', - data - }); - }); - - // Set up a persistent listener - const persistentHandler = (data: any) => { - receivedEvents.push({ - type: 'persistent', - data - }); - }; - - eventSystem.on(ProxyEvents.CONNECTION_ESTABLISHED, persistentHandler); - - // First event should trigger both listeners - eventSystem.emitConnectionEstablished({ - connectionId: 'conn-1', - clientIp: '192.168.1.1', - port: 443 - }); - - // Second event should only trigger the persistent listener - eventSystem.emitConnectionEstablished({ - connectionId: 'conn-2', - clientIp: '192.168.1.1', - port: 443 - }); - - // Unsubscribe the persistent listener - eventSystem.off(ProxyEvents.CONNECTION_ESTABLISHED, persistentHandler); - - // Third event should not trigger any listeners - eventSystem.emitConnectionEstablished({ - connectionId: 'conn-3', - clientIp: '192.168.1.1', - port: 443 - }); - - // Verify events - expect(receivedEvents.length).toEqual(3); - expect(receivedEvents[0].type).toEqual('once'); - expect(receivedEvents[0].data.connectionId).toEqual('conn-1'); - - expect(receivedEvents[1].type).toEqual('persistent'); - expect(receivedEvents[1].data.connectionId).toEqual('conn-1'); - - expect(receivedEvents[2].type).toEqual('persistent'); - expect(receivedEvents[2].data.connectionId).toEqual('conn-2'); -}); - -export default tap.start(); \ No newline at end of file diff --git a/ts/proxies/smart-proxy/connection-manager.ts b/ts/proxies/smart-proxy/connection-manager.ts index 9c777ae..0acadba 100644 --- a/ts/proxies/smart-proxy/connection-manager.ts +++ b/ts/proxies/smart-proxy/connection-manager.ts @@ -34,7 +34,7 @@ export class ConnectionManager extends LifecycleComponent { super(); // Set reasonable defaults for connection limits - this.maxConnections = settings.defaults.security.maxConnections + this.maxConnections = settings.defaults?.security?.maxConnections || 10000; // Start inactivity check timer if not disabled if (!settings.disableInactivityCheck) {