Skip to content

Commit 9123a5d

Browse files
cameroncookecodex
andcommitted
test(smoke): Isolate xcodebuild log capture
Configure source and built smoke harness log-capture modules with a per-harness temporary log directory. This keeps smoke tests from requiring built runtime workspace state before the mocked command executor can capture xcodebuild and swift invocations. Co-Authored-By: OpenAI Codex <noreply@openai.com>
1 parent 38b57a7 commit 9123a5d

1 file changed

Lines changed: 17 additions & 1 deletion

File tree

src/smoke-tests/mcp-test-harness.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { existsSync } from 'node:fs';
2-
import { resolve } from 'node:path';
2+
import { mkdtemp, rm } from 'node:fs/promises';
3+
import { join, resolve } from 'node:path';
4+
import { tmpdir } from 'node:os';
35
import { pathToFileURL } from 'node:url';
46
import type { ChildProcess } from 'node:child_process';
57
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
@@ -35,6 +37,7 @@ import {
3537
} from '../utils/debugger/index.ts';
3638
import { getPackageRoot } from '../core/manifest/load-manifest.ts';
3739
import { shutdownXcodeToolsBridge } from '../integrations/xcode-tools-bridge/index.ts';
40+
import { setXcodebuildLogDirOverrideForTests } from '../utils/xcodebuild-log-capture.ts';
3841

3942
export interface CapturedCommand {
4043
command: string[];
@@ -100,6 +103,9 @@ export async function createMcpTestHarness(opts?: McpTestHarnessOptions): Promis
100103
sessionStore.clear();
101104

102105
const mockFs = createMockFileSystemExecutor();
106+
const logDir = await mkdtemp(join(tmpdir(), 'xcodebuildmcp-smoke-logs-'));
107+
108+
setXcodebuildLogDirOverrideForTests(logDir);
103109

104110
// Set executor overrides on the vitest-resolved source modules
105111
__setTestCommandExecutorOverride(capturingExecutor);
@@ -125,6 +131,13 @@ export async function createMcpTestHarness(opts?: McpTestHarnessOptions): Promis
125131
builtCommandModule.__setTestCommandExecutorOverride(capturingExecutor);
126132
builtCommandModule.__setTestFileSystemExecutorOverride(mockFs);
127133

134+
const builtLogCaptureModule = (await import(
135+
pathToFileURL(resolve(buildRoot, 'utils/xcodebuild-log-capture.js')).href
136+
)) as {
137+
setXcodebuildLogDirOverrideForTests: typeof setXcodebuildLogDirOverrideForTests;
138+
};
139+
builtLogCaptureModule.setXcodebuildLogDirOverrideForTests(logDir);
140+
128141
// Set interactive spawner override (built module)
129142
const builtInteractiveModule = (await import(
130143
pathToFileURL(resolve(buildRoot, 'utils/execution/interactive-process.js')).href
@@ -238,6 +251,9 @@ export async function createMcpTestHarness(opts?: McpTestHarnessOptions): Promis
238251
builtInteractiveModule.__clearTestInteractiveSpawnerOverride();
239252
__clearTestDebuggerToolContextOverride();
240253
builtDebuggerModule.__clearTestDebuggerToolContextOverride();
254+
setXcodebuildLogDirOverrideForTests(null);
255+
builtLogCaptureModule.setXcodebuildLogDirOverrideForTests(null);
256+
await rm(logDir, { recursive: true, force: true });
241257
__resetConfigStoreForTests();
242258
builtConfigStoreModule.__resetConfigStoreForTests();
243259
__resetServerStateForTests();

0 commit comments

Comments
 (0)