mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-24 12:04:56 -07:00
test: fix Windows CI execution and resolve exposed platform failures (#24476)
This commit is contained in:
@@ -22,6 +22,7 @@ import type {
|
||||
import { spawn, type ChildProcess } from 'node:child_process';
|
||||
import { EventEmitter } from 'node:events';
|
||||
import type { Writable } from 'node:stream';
|
||||
import path from 'node:path';
|
||||
|
||||
vi.mock('node:child_process', () => ({
|
||||
spawn: vi.fn(),
|
||||
@@ -49,14 +50,14 @@ class MockSandboxManager implements SandboxManager {
|
||||
}
|
||||
|
||||
getWorkspace(): string {
|
||||
return '/workspace';
|
||||
return path.resolve('/workspace');
|
||||
}
|
||||
}
|
||||
|
||||
describe('SandboxedFileSystemService', () => {
|
||||
let sandboxManager: MockSandboxManager;
|
||||
let service: SandboxedFileSystemService;
|
||||
const cwd = '/test/cwd';
|
||||
const cwd = path.resolve('/test/cwd');
|
||||
|
||||
beforeEach(() => {
|
||||
sandboxManager = new MockSandboxManager();
|
||||
@@ -77,7 +78,8 @@ describe('SandboxedFileSystemService', () => {
|
||||
|
||||
vi.mocked(spawn).mockReturnValue(mockChild);
|
||||
|
||||
const readPromise = service.readTextFile('/test/cwd/file.txt');
|
||||
const testFile = path.resolve('/test/cwd/file.txt');
|
||||
const readPromise = service.readTextFile(testFile);
|
||||
|
||||
// Use setImmediate to ensure events are emitted after the promise starts executing
|
||||
setImmediate(() => {
|
||||
@@ -90,15 +92,15 @@ describe('SandboxedFileSystemService', () => {
|
||||
expect(vi.mocked(sandboxManager.prepareCommand)).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
command: '__read',
|
||||
args: ['/test/cwd/file.txt'],
|
||||
args: [testFile],
|
||||
policy: {
|
||||
allowedPaths: ['/test/cwd/file.txt'],
|
||||
allowedPaths: [testFile],
|
||||
},
|
||||
}),
|
||||
);
|
||||
expect(spawn).toHaveBeenCalledWith(
|
||||
'sandbox.exe',
|
||||
['0', cwd, '__read', '/test/cwd/file.txt'],
|
||||
['0', cwd, '__read', testFile],
|
||||
expect.any(Object),
|
||||
);
|
||||
});
|
||||
@@ -117,10 +119,8 @@ describe('SandboxedFileSystemService', () => {
|
||||
|
||||
vi.mocked(spawn).mockReturnValue(mockChild);
|
||||
|
||||
const writePromise = service.writeTextFile(
|
||||
'/test/cwd/file.txt',
|
||||
'new content',
|
||||
);
|
||||
const testFile = path.resolve('/test/cwd/file.txt');
|
||||
const writePromise = service.writeTextFile(testFile, 'new content');
|
||||
|
||||
setImmediate(() => {
|
||||
mockChild.emit('close', 0);
|
||||
@@ -134,12 +134,12 @@ describe('SandboxedFileSystemService', () => {
|
||||
expect(vi.mocked(sandboxManager.prepareCommand)).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
command: '__write',
|
||||
args: ['/test/cwd/file.txt'],
|
||||
args: [testFile],
|
||||
policy: {
|
||||
allowedPaths: ['/test/cwd/file.txt'],
|
||||
allowedPaths: [testFile],
|
||||
additionalPermissions: {
|
||||
fileSystem: {
|
||||
write: ['/test/cwd/file.txt'],
|
||||
write: [testFile],
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -147,7 +147,7 @@ describe('SandboxedFileSystemService', () => {
|
||||
);
|
||||
expect(spawn).toHaveBeenCalledWith(
|
||||
'sandbox.exe',
|
||||
['0', cwd, '__write', '/test/cwd/file.txt'],
|
||||
['0', cwd, '__write', testFile],
|
||||
expect.any(Object),
|
||||
);
|
||||
});
|
||||
@@ -161,7 +161,8 @@ describe('SandboxedFileSystemService', () => {
|
||||
|
||||
vi.mocked(spawn).mockReturnValue(mockChild);
|
||||
|
||||
const readPromise = service.readTextFile('/test/cwd/file.txt');
|
||||
const testFile = path.resolve('/test/cwd/file.txt');
|
||||
const readPromise = service.readTextFile(testFile);
|
||||
|
||||
setImmediate(() => {
|
||||
mockChild.stderr!.emit('data', Buffer.from('access denied'));
|
||||
@@ -169,7 +170,7 @@ describe('SandboxedFileSystemService', () => {
|
||||
});
|
||||
|
||||
await expect(readPromise).rejects.toThrow(
|
||||
"Sandbox Error: read_file failed for '/test/cwd/file.txt'. Exit code 1. Details: access denied",
|
||||
`Sandbox Error: read_file failed for '${testFile}'. Exit code 1. Details: access denied`,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -182,7 +183,8 @@ describe('SandboxedFileSystemService', () => {
|
||||
|
||||
vi.mocked(spawn).mockReturnValue(mockChild);
|
||||
|
||||
const readPromise = service.readTextFile('/test/cwd/missing.txt');
|
||||
const testFile = path.resolve('/test/cwd/missing.txt');
|
||||
const readPromise = service.readTextFile(testFile);
|
||||
|
||||
setImmediate(() => {
|
||||
mockChild.stderr!.emit('data', Buffer.from('No such file or directory'));
|
||||
@@ -209,7 +211,8 @@ describe('SandboxedFileSystemService', () => {
|
||||
|
||||
vi.mocked(spawn).mockReturnValue(mockChild);
|
||||
|
||||
const readPromise = service.readTextFile('/test/cwd/missing.txt');
|
||||
const testFile = path.resolve('/test/cwd/missing.txt');
|
||||
const readPromise = service.readTextFile(testFile);
|
||||
|
||||
setImmediate(() => {
|
||||
mockChild.stderr!.emit(
|
||||
|
||||
Reference in New Issue
Block a user