Files
gemini-cli/packages/core/src/telemetry/heap-snapshot.test.ts
T

50 lines
1.3 KiB
TypeScript

/**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { describe, it, expect, vi, beforeEach } from 'vitest';
import v8 from 'node:v8';
import fs from 'node:fs';
import { captureHeapSnapshot } from './heap-snapshot.js';
import { debugLogger } from '../utils/debugLogger.js';
vi.mock('node:v8');
vi.mock('node:fs');
vi.mock('../utils/debugLogger.js', () => ({
debugLogger: {
error: vi.fn(),
},
}));
describe('heap-snapshot', () => {
beforeEach(() => {
vi.resetAllMocks();
});
it('should capture a heap snapshot to a secure directory', () => {
vi.mocked(fs.mkdtempSync).mockReturnValue('/tmp/gemini-heap-abc123');
const filePath = captureHeapSnapshot();
expect(filePath).toContain('gemini-heap-abc123');
expect(filePath).toContain('.heapsnapshot');
expect(v8.writeHeapSnapshot).toHaveBeenCalledWith(filePath);
});
it('should return null and log an error if capture fails', () => {
vi.mocked(fs.mkdtempSync).mockImplementation(() => {
throw new Error('Disk full');
});
const result = captureHeapSnapshot();
expect(result).toBeNull();
expect(debugLogger.error).toHaveBeenCalledWith(
expect.stringContaining('Failed to capture heap snapshot'),
expect.any(Error),
);
});
});