diff options
Diffstat (limited to 'packages/core/src/telemetry/integration.test.circular.ts')
| -rw-r--r-- | packages/core/src/telemetry/integration.test.circular.ts | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/packages/core/src/telemetry/integration.test.circular.ts b/packages/core/src/telemetry/integration.test.circular.ts new file mode 100644 index 00000000..958ec3cb --- /dev/null +++ b/packages/core/src/telemetry/integration.test.circular.ts @@ -0,0 +1,62 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Integration test to verify circular reference handling with proxy agents + */ + +import { describe, it, expect } from 'vitest'; +import { ClearcutLogger } from './clearcut-logger/clearcut-logger.js'; +import { Config } from '../config/config.js'; + +describe('Circular Reference Integration Test', () => { + it('should handle HttpsProxyAgent-like circular references in clearcut logging', () => { + // Create a mock config with proxy + const mockConfig = { + getTelemetryEnabled: () => true, + getUsageStatisticsEnabled: () => true, + getSessionId: () => 'test-session', + getModel: () => 'test-model', + getEmbeddingModel: () => 'test-embedding', + getDebugMode: () => false, + getProxy: () => 'http://proxy.example.com:8080', + } as unknown as Config; + + // Simulate the structure that causes the circular reference error + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const proxyAgentLike: any = { + sockets: {}, + options: { proxy: 'http://proxy.example.com:8080' }, + }; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const socketLike: any = { + _httpMessage: { + agent: proxyAgentLike, + socket: null, + }, + }; + + socketLike._httpMessage.socket = socketLike; // Create circular reference + proxyAgentLike.sockets['cloudcode-pa.googleapis.com:443'] = [socketLike]; + + // Create an event that would contain this circular structure + const problematicEvent = { + error: new Error('Network error'), + function_args: { + filePath: '/test/file.txt', + httpAgent: proxyAgentLike, // This would cause the circular reference + }, + }; + + // Test that ClearcutLogger can handle this + const logger = ClearcutLogger.getInstance(mockConfig); + + expect(() => { + logger?.enqueueLogEvent(problematicEvent); + }).not.toThrow(); + }); +}); |
