mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-13 21:32:56 -07:00
50 lines
1.3 KiB
TypeScript
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),
|
|
);
|
|
});
|
|
});
|