mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-10 14:10:37 -07:00
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2026 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
import { TestRig } from './test-helper.js';
|
|
import { join, dirname } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
describe('API Resilience E2E', () => {
|
|
let rig: TestRig;
|
|
|
|
beforeEach(() => {
|
|
rig = new TestRig();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await rig.cleanup();
|
|
});
|
|
|
|
it('should not crash when receiving metadata-only chunks in a stream', async () => {
|
|
await rig.setup('api-resilience-metadata-only', {
|
|
fakeResponsesPath: join(
|
|
dirname(fileURLToPath(import.meta.url)),
|
|
'api-resilience.responses',
|
|
),
|
|
settings: {
|
|
planSettings: { modelRouting: false },
|
|
},
|
|
});
|
|
|
|
// Run the CLI with a simple prompt.
|
|
// The fake responses will provide a stream with a metadata-only chunk in the middle.
|
|
// We use gemini-3-pro-preview to minimize internal service calls.
|
|
const result = await rig.run({
|
|
args: ['hi', '--model', 'gemini-3-pro-preview'],
|
|
});
|
|
|
|
// Verify the output contains text from the normal chunks.
|
|
// If the CLI crashed on the metadata chunk, rig.run would throw.
|
|
expect(result).toContain('Part 1.');
|
|
expect(result).toContain('Part 2.');
|
|
|
|
// Verify telemetry event for the prompt was still generated
|
|
const hasUserPromptEvent = await rig.waitForTelemetryEvent('user_prompt');
|
|
expect(hasUserPromptEvent).toBe(true);
|
|
});
|
|
});
|