summaryrefslogtreecommitdiff
path: root/packages/core/src/telemetry/integration.test.circular.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/core/src/telemetry/integration.test.circular.ts')
-rw-r--r--packages/core/src/telemetry/integration.test.circular.ts62
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();
+ });
+});