From 7133f92007ec602bd78ce6faa14837d221d9a1e0 Mon Sep 17 00:00:00 2001 From: tzy-17 Date: Wed, 26 Aug 2026 11:24:33 +0800 Subject: [PATCH] fix(bench): preserve Unicode across bounded gateway diagnostics (#120125) --- scripts/bench-gateway-concurrency.ts | 8 ++++---- test/scripts/bench-gateway-concurrency.test.ts | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/scripts/bench-gateway-concurrency.ts b/scripts/bench-gateway-concurrency.ts index 38be1dc56ecc..738f6966ea9c 100644 --- a/scripts/bench-gateway-concurrency.ts +++ b/scripts/bench-gateway-concurrency.ts @@ -9,6 +9,7 @@ import { performance } from "node:perf_hooks"; import { pathToFileURL } from "node:url"; import { PROTOCOL_VERSION } from "../packages/gateway-protocol/src/version.ts"; import { asFiniteNumber } from "../packages/normalization-core/src/number-coercion.ts"; +import { sliceUtf16Safe } from "../packages/normalization-core/src/utf16-slice.ts"; import { applyMockOpenAiModelConfig } from "./e2e/lib/fixtures/mock-openai-config.mjs"; import { delay, stopChild } from "./lib/gateway-bench-child.ts"; import { getFreePort } from "./lib/gateway-bench-probes.ts"; @@ -402,8 +403,7 @@ async function requestHttp(params: { } function describeProbeError(error: unknown): string { - const message = error instanceof Error ? error.message : String(error); - return message.slice(0, 500); + return sliceUtf16Safe(error instanceof Error ? error.message : String(error), 0, 500); } function formatProbeResult(name: string, probe: TimedProbe & { status?: number }): string { @@ -431,12 +431,12 @@ function captureChildOutput(child: ChildProcessWithoutNullStreams): { let output = ""; let stderr = ""; const appendOutput = (chunk: Buffer) => { - output = `${output}${chunk.toString("utf8")}`.slice(-64 * 1_024); + output = sliceUtf16Safe(`${output}${chunk.toString("utf8")}`, -64 * 1_024); }; child.stdout.on("data", appendOutput); child.stderr.on("data", (chunk: Buffer) => { appendOutput(chunk); - stderr = `${stderr}${chunk.toString("utf8")}`.slice(-64 * 1_024); + stderr = sliceUtf16Safe(`${stderr}${chunk.toString("utf8")}`, -64 * 1_024); }); return { readOutput: () => output, diff --git a/test/scripts/bench-gateway-concurrency.test.ts b/test/scripts/bench-gateway-concurrency.test.ts index b41568a5ca93..3511e7bcb744 100644 --- a/test/scripts/bench-gateway-concurrency.test.ts +++ b/test/scripts/bench-gateway-concurrency.test.ts @@ -200,6 +200,16 @@ describe("gateway concurrency benchmark script", () => { error: "sessions.list failed: unauthorized", ok: false, }); + const unicodeSample = await testing.sampleGateway({ + deadlineAt: performance.now() + 5_000, + port: address.port, + rpc: async () => { + throw new Error(`${"x".repeat(499)}😀`); + }, + runStartedAt: performance.now(), + serial: true, + }); + expect(unicodeSample.sessionsList.error).toBe("x".repeat(499)); const failure = testing.formatRunFailure( new Error(testing.formatProbeFailure(sample)), {