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

Function withServer

test/proxyChatCompletionsE2E.test.js:39–88  ·  view source on GitHub ↗
(run)

Source from the content-addressed store, hash-verified

37}
38
39async function withServer(run) {
40 const traceFile = path.join(os.tmpdir(), `e2e-chat-${process.pid}-${(process.hrtime.bigint() % 1000000n).toString()}.jsonl`);
41 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_OPENAI_API_KEY };
42 process.env.EVOMAP_PROXY_TRACE = 'full';
43 process.env.EVOMAP_PROXY_TRACE_FILE = traceFile;
44 process.env.EVOMAP_PROXY_TRACE_ENCRYPTION = '0';
45 process.env.EVOMAP_OPENAI_API_KEY = 'sk-test'; // lets the handler accept the request
46 lastReqPath = null;
47 try { fs.unlinkSync(traceFile); } catch { /* fresh */ }
48
49 const silent = { log() {}, warn() {}, error() {} };
50 const routes = { 'POST /v1/chat/completions': buildChatCompletionsHandler({ openAIProxy: mockOpenAI, logger: silent }) };
51 const srv = new ProxyHttpServer(routes, { port: 0, logger: silent });
52 srv.token = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
53 srv.server = http.createServer((req, res) => srv._handleRequest(req, res));
54 const port = await new Promise((resolve) => srv.server.listen(0, '127.0.0.1', () => resolve(srv.server.address().port)));
55 srv.actualPort = port;
56
57 const call = ({ headers, body }) => new Promise((resolve, reject) => {
58 const req = http.request({ host: '127.0.0.1', port, path: '/v1/chat/completions', method: 'POST',
59 headers: { 'content-type': 'application/json', authorization: 'Bearer aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'x-api-key': 'sk-client', ...headers } }, (res) => {
60 const chunks = [];
61 res.on('data', (d) => chunks.push(d));
62 res.on('end', () => resolve({ status: res.statusCode, bytes: Buffer.concat(chunks) }));
63 });
64 req.on('error', reject);
65 req.end(JSON.stringify(body));
66 });
67
68 const readRows = async (expected = 1) => {
69 let lines = [];
70 for (let i = 0; i < 150; i++) {
71 if (fs.existsSync(traceFile)) {
72 lines = fs.readFileSync(traceFile, 'utf8').trim().split('\n').filter(Boolean);
73 if (lines.length >= expected) break;
74 }
75 await sleep(20);
76 }
77 return lines.map((l) => JSON.parse(l));
78 };
79
80 try {
81 await run({ call, readRows });
82 } finally {
83 await new Promise((r) => srv.server.close(r));
84 try { fs.unlinkSync(traceFile); } catch { /* ignore */ }
85 process.env.EVOMAP_PROXY_TRACE = saved.m; process.env.EVOMAP_PROXY_TRACE_FILE = saved.f;
86 process.env.EVOMAP_PROXY_TRACE_ENCRYPTION = saved.e; process.env.EVOMAP_OPENAI_API_KEY = saved.k;
87 }
88}
89
90const chatBody = (extra = {}) => ({ model: 'gpt-4o', messages: [{ role: 'user', content: 'hi' }], ...extra });
91

Callers 1

Calls 4

_handleRequestMethod · 0.95
closeMethod · 0.80
runFunction · 0.50

Tested by

no test coverage detected