diff --git a/tests/unit/compression/ccr-mcp-integration.test.ts b/tests/unit/compression/ccr-mcp-integration.test.ts index ba0361f9fc..bb0480bb5a 100644 --- a/tests/unit/compression/ccr-mcp-integration.test.ts +++ b/tests/unit/compression/ccr-mcp-integration.test.ts @@ -1,4 +1,4 @@ -import { describe, it, beforeEach } from "node:test"; +import { describe, it, beforeEach, after } from "node:test"; import assert from "node:assert/strict"; import { mkdtempSync } from "node:fs"; import { tmpdir } from "node:os"; @@ -6,6 +6,24 @@ import { join } from "node:path"; process.env.DATA_DIR = mkdtempSync(join(tmpdir(), "omniroute-ccr-mcp-")); +// `resolveCcrPrincipal` dá precedência a `resolveMcpCallerApiKeyId()`, que cai em +// `OMNIROUTE_API_KEY`/`ROUTER_API_KEY` no transporte stdio. Estes testes gravam blocos +// com um principal LITERAL ("tenant-a") e leem pelos handlers MCP: com a env presente no +// shell, o handler resolve um principal diferente e todo bloco vira "not found" — red +// fantasma que não reproduz no CI, onde a env não existe. A precondição era implícita; +// aqui ela passa a ser declarada. Mesmo idioma de api-key-lifecycle e cli-remote-mode. +const ORIGINAL_OMNIROUTE_API_KEY = process.env.OMNIROUTE_API_KEY; +const ORIGINAL_ROUTER_API_KEY = process.env.ROUTER_API_KEY; +delete process.env.OMNIROUTE_API_KEY; +delete process.env.ROUTER_API_KEY; + +after(() => { + if (ORIGINAL_OMNIROUTE_API_KEY === undefined) delete process.env.OMNIROUTE_API_KEY; + else process.env.OMNIROUTE_API_KEY = ORIGINAL_OMNIROUTE_API_KEY; + if (ORIGINAL_ROUTER_API_KEY === undefined) delete process.env.ROUTER_API_KEY; + else process.env.ROUTER_API_KEY = ORIGINAL_ROUTER_API_KEY; +}); + const ccr = await import("../../../open-sse/services/compression/engines/ccr/index.ts"); const tools = await import("../../../open-sse/mcp-server/tools/compressionTools.ts"); const schemas = await import("../../../open-sse/mcp-server/schemas/tools.ts"); diff --git a/tests/unit/mcp-extra-forward-6178.test.ts b/tests/unit/mcp-extra-forward-6178.test.ts index 177541616f..a6a6392dc8 100644 --- a/tests/unit/mcp-extra-forward-6178.test.ts +++ b/tests/unit/mcp-extra-forward-6178.test.ts @@ -18,6 +18,22 @@ import assert from "node:assert/strict"; // call. If `extra` is dropped, the caller resolves to "anonymous", the store key // misses, and retrieval errors out. +// A precondição deste teste é que NÃO exista um principal de API key resolvível: ele +// prova que o `extra` chega ao handler comparando o principal derivado de `clientId`. Com +// `OMNIROUTE_API_KEY` no shell, `resolveMcpCallerApiKeyId()` resolve primeiro e mascara +// exatamente o que o teste mede — red fantasma local que não reproduz no CI. +const ORIGINAL_OMNIROUTE_API_KEY = process.env.OMNIROUTE_API_KEY; +const ORIGINAL_ROUTER_API_KEY = process.env.ROUTER_API_KEY; +delete process.env.OMNIROUTE_API_KEY; +delete process.env.ROUTER_API_KEY; + +test.after(() => { + if (ORIGINAL_OMNIROUTE_API_KEY === undefined) delete process.env.OMNIROUTE_API_KEY; + else process.env.OMNIROUTE_API_KEY = ORIGINAL_OMNIROUTE_API_KEY; + if (ORIGINAL_ROUTER_API_KEY === undefined) delete process.env.ROUTER_API_KEY; + else process.env.ROUTER_API_KEY = ORIGINAL_ROUTER_API_KEY; +}); + const { createMcpServer } = await import("../../open-sse/mcp-server/server.ts"); const { storeBlock, resetCcrStore } = await import( "../../open-sse/services/compression/engines/ccr/index.ts"