Download packages/core/src/telemetry/config.test.ts from SaylorTwift/gemini-cli: direct link, hf CLI and curl.
- Browser
- Download file 5.77 kB
-
https://huggingface.co/SaylorTwift/gemini-cli/resolve/main/packages/core/src/telemetry/config.test.ts
- Command line
-
hf download hf://SaylorTwift/gemini-cli/packages/core/src/telemetry/config.test.ts
-
curl -L -o config.test.ts https://huggingface.co/SaylorTwift/gemini-cli/resolve/main/packages/core/src/telemetry/config.test.ts
5.77 kB
| /** | |
| * @license | |
| * Copyright 2025 Google LLC | |
| * SPDX-License-Identifier: Apache-2.0 | |
| */ | |
| import { describe, it, expect } from 'vitest'; | |
| import { | |
| parseBooleanEnvFlag, | |
| parseTelemetryTargetValue, | |
| resolveTelemetrySettings, | |
| } from './config.js'; | |
| import { TelemetryTarget } from './index.js'; | |
| describe('telemetry/config helpers', () => { | |
| describe('parseBooleanEnvFlag', () => { | |
| it('returns undefined for undefined', () => { | |
| expect(parseBooleanEnvFlag(undefined)).toBeUndefined(); | |
| }); | |
| it('parses true values', () => { | |
| expect(parseBooleanEnvFlag('true')).toBe(true); | |
| expect(parseBooleanEnvFlag('1')).toBe(true); | |
| }); | |
| it('parses false/other values as false', () => { | |
| expect(parseBooleanEnvFlag('false')).toBe(false); | |
| expect(parseBooleanEnvFlag('0')).toBe(false); | |
| expect(parseBooleanEnvFlag('TRUE')).toBe(false); | |
| expect(parseBooleanEnvFlag('random')).toBe(false); | |
| expect(parseBooleanEnvFlag('')).toBe(false); | |
| }); | |
| }); | |
| describe('parseTelemetryTargetValue', () => { | |
| it('parses string values', () => { | |
| expect(parseTelemetryTargetValue('local')).toBe(TelemetryTarget.LOCAL); | |
| expect(parseTelemetryTargetValue('gcp')).toBe(TelemetryTarget.GCP); | |
| }); | |
| it('accepts enum values', () => { | |
| expect(parseTelemetryTargetValue(TelemetryTarget.LOCAL)).toBe( | |
| TelemetryTarget.LOCAL, | |
| ); | |
| expect(parseTelemetryTargetValue(TelemetryTarget.GCP)).toBe( | |
| TelemetryTarget.GCP, | |
| ); | |
| }); | |
| it('returns undefined for unknown', () => { | |
| expect(parseTelemetryTargetValue('other')).toBeUndefined(); | |
| expect(parseTelemetryTargetValue(undefined)).toBeUndefined(); | |
| }); | |
| }); | |
| describe('resolveTelemetrySettings', () => { | |
| it('falls back to settings when no argv/env provided', async () => { | |
| const settings = { | |
| enabled: false, | |
| target: TelemetryTarget.LOCAL, | |
| otlpEndpoint: 'http://localhost:4317', | |
| otlpProtocol: 'grpc' as const, | |
| logPrompts: false, | |
| outfile: 'settings.log', | |
| useCollector: false, | |
| }; | |
| const resolved = await resolveTelemetrySettings({ settings }); | |
| expect(resolved).toEqual(settings); | |
| }); | |
| it('uses env over settings and argv over env', async () => { | |
| const settings = { | |
| enabled: false, | |
| target: TelemetryTarget.LOCAL, | |
| otlpEndpoint: 'http://settings:4317', | |
| otlpProtocol: 'grpc' as const, | |
| logPrompts: false, | |
| outfile: 'settings.log', | |
| useCollector: false, | |
| }; | |
| const env = { | |
| GEMINI_TELEMETRY_ENABLED: '1', | |
| GEMINI_TELEMETRY_TARGET: 'gcp', | |
| GEMINI_TELEMETRY_OTLP_ENDPOINT: 'http://env:4317', | |
| GEMINI_TELEMETRY_OTLP_PROTOCOL: 'http', | |
| GEMINI_TELEMETRY_LOG_PROMPTS: 'true', | |
| GEMINI_TELEMETRY_OUTFILE: 'env.log', | |
| GEMINI_TELEMETRY_USE_COLLECTOR: 'true', | |
| } as Record<string, string>; | |
| const argv = { | |
| telemetry: false, | |
| telemetryTarget: 'local', | |
| telemetryOtlpEndpoint: 'http://argv:4317', | |
| telemetryOtlpProtocol: 'grpc', | |
| telemetryLogPrompts: false, | |
| telemetryOutfile: 'argv.log', | |
| }; | |
| const resolvedEnv = await resolveTelemetrySettings({ env, settings }); | |
| expect(resolvedEnv).toEqual({ | |
| enabled: true, | |
| target: TelemetryTarget.GCP, | |
| otlpEndpoint: 'http://env:4317', | |
| otlpProtocol: 'http', | |
| logPrompts: true, | |
| outfile: 'env.log', | |
| useCollector: true, | |
| }); | |
| const resolvedArgv = await resolveTelemetrySettings({ | |
| argv, | |
| env, | |
| settings, | |
| }); | |
| expect(resolvedArgv).toEqual({ | |
| enabled: false, | |
| target: TelemetryTarget.LOCAL, | |
| otlpEndpoint: 'http://argv:4317', | |
| otlpProtocol: 'grpc', | |
| logPrompts: false, | |
| outfile: 'argv.log', | |
| useCollector: true, // from env as no argv option | |
| useCliAuth: undefined, | |
| }); | |
| }); | |
| it('resolves useCliAuth from settings', async () => { | |
| const settings = { | |
| useCliAuth: true, | |
| }; | |
| const resolved = await resolveTelemetrySettings({ settings }); | |
| expect(resolved.useCliAuth).toBe(true); | |
| }); | |
| it('resolves useCliAuth from env', async () => { | |
| const env = { | |
| GEMINI_TELEMETRY_USE_CLI_AUTH: 'true', | |
| }; | |
| const resolved = await resolveTelemetrySettings({ env }); | |
| expect(resolved.useCliAuth).toBe(true); | |
| }); | |
| it('env overrides settings for useCliAuth', async () => { | |
| const settings = { | |
| useCliAuth: false, | |
| }; | |
| const env = { | |
| GEMINI_TELEMETRY_USE_CLI_AUTH: 'true', | |
| }; | |
| const resolved = await resolveTelemetrySettings({ env, settings }); | |
| expect(resolved.useCliAuth).toBe(true); | |
| }); | |
| it('falls back to OTEL_EXPORTER_OTLP_ENDPOINT when GEMINI var is missing', async () => { | |
| const settings = {}; | |
| const env = { | |
| OTEL_EXPORTER_OTLP_ENDPOINT: 'http://otel:4317', | |
| } as Record<string, string>; | |
| const resolved = await resolveTelemetrySettings({ env, settings }); | |
| expect(resolved.otlpEndpoint).toBe('http://otel:4317'); | |
| }); | |
| it('throws on unknown protocol values', async () => { | |
| const env = { GEMINI_TELEMETRY_OTLP_PROTOCOL: 'unknown' } as Record< | |
| string, | |
| string | |
| >; | |
| await expect(resolveTelemetrySettings({ env })).rejects.toThrow( | |
| /Invalid telemetry OTLP protocol/i, | |
| ); | |
| }); | |
| it('throws on unknown target values', async () => { | |
| const env = { GEMINI_TELEMETRY_TARGET: 'unknown' } as Record< | |
| string, | |
| string | |
| >; | |
| await expect(resolveTelemetrySettings({ env })).rejects.toThrow( | |
| /Invalid telemetry target/i, | |
| ); | |
| }); | |
| }); | |
| }); | |