MCPcopy Create free account
hub / github.com/EvoMap/evolver / withServer

Function withServer

test/proxyGeminiE2E.test.js:51–99  ·  view source on GitHub ↗
(run)

Source from the content-addressed store, hash-verified

49}
50
51async function withServer(run) {
52 const traceFile = path.join(os.tmpdir(), `e2e-gemini-${process.pid}-${(process.hrtime.bigint() % 1000000n).toString()}.jsonl`);
53 const saved = { m: process.env.EVOMAP_PROXY_TRACE, f: process.env.EVOMAP_PROXY_TRACE_FILE, e: process.env.EVOMAP_PROXY_TRACE_ENCRYPTION, k: process.env.EVOMAP_GEMINI_API_KEY };
54 process.env.EVOMAP_PROXY_TRACE = 'full';
55 process.env.EVOMAP_PROXY_TRACE_FILE = traceFile;
56 process.env.EVOMAP_PROXY_TRACE_ENCRYPTION = '0';
57 process.env.EVOMAP_GEMINI_API_KEY = 'gk-test'; // lets the gemini handler accept the request
58 try { fs.unlinkSync(traceFile); } catch { /* fresh */ }
59
60 const silent = { log() {}, warn() {}, error() {} };
61 const routes = { 'POST /v1beta/models/:modelAction': buildGeminiHandler({ geminiProxy: mockGemini, logger: silent }) };
62 const srv = new ProxyHttpServer(routes, { port: 0, logger: silent });
63 srv.token = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
64 srv.server = http.createServer((req, res) => srv._handleRequest(req, res));
65 const port = await new Promise((resolve) => srv.server.listen(0, '127.0.0.1', () => resolve(srv.server.address().port)));
66 srv.actualPort = port;
67
68 const call = ({ reqPath, body }) => new Promise((resolve, reject) => {
69 const req = http.request({ host: '127.0.0.1', port, path: reqPath, method: 'POST',
70 headers: { 'content-type': 'application/json', authorization: 'Bearer aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'x-goog-api-key': 'client-key', 'user-agent': 'google-genai-sdk/1.0' } }, (res) => {
71 const chunks = [];
72 res.on('data', (d) => chunks.push(d));
73 res.on('end', () => resolve({ status: res.statusCode, bytes: Buffer.concat(chunks) }));
74 });
75 req.on('error', reject);
76 req.end(JSON.stringify(body));
77 });
78
79 const readRows = async (expected = 2) => {
80 let lines = [];
81 for (let i = 0; i < 150; i++) {
82 if (fs.existsSync(traceFile)) {
83 lines = fs.readFileSync(traceFile, 'utf8').trim().split('\n').filter(Boolean);
84 if (lines.length >= expected) break;
85 }
86 await sleep(20);
87 }
88 return lines.map((l) => JSON.parse(l));
89 };
90
91 try {
92 await run({ call, readRows });
93 } finally {
94 await new Promise((r) => srv.server.close(r));
95 try { fs.unlinkSync(traceFile); } catch { /* ignore */ }
96 process.env.EVOMAP_PROXY_TRACE = saved.m; process.env.EVOMAP_PROXY_TRACE_FILE = saved.f;
97 process.env.EVOMAP_PROXY_TRACE_ENCRYPTION = saved.e; process.env.EVOMAP_GEMINI_API_KEY = saved.k;
98 }
99}
100
101const body = { contents: [{ role: 'user', parts: [{ text: 'hi' }] }], generationConfig: { temperature: 0.2 } };
102

Callers 1

Calls 4

_handleRequestMethod · 0.95
buildGeminiHandlerFunction · 0.85
closeMethod · 0.80
runFunction · 0.50

Tested by

no test coverage detected