From 14a27f1960c46244977fec18ad25acb438261c0a Mon Sep 17 00:00:00 2001 From: shaw Date: Fri, 7 Aug 2026 22:55:42 +0800 Subject: [PATCH] =?UTF-8?q?test(gateway):=20=E6=A0=A1=E5=87=86=20error=20?= =?UTF-8?q?=E5=B8=A7=E8=BE=B9=E7=95=8C=20flush=20=E6=9C=9F=E6=9C=9B?= =?UTF-8?q?=E8=87=B3=20pre-output=20failover=20=E6=96=B0=E5=A5=91=E7=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 可重试类 error 帧按设计不再算客户端输出(保留在 attempt 缓冲中, 为随后的 response.failed 保住 pre-output failover),因此不在自身 边界单独 flush,而是与终止帧一起出站(1 次 flush)。原用例按旧行为 断言 2 次 flush 导致 CI 失败。 同时补充不可重试类(invalid_request)error 帧仍在边界 flush 的对照 用例,锁住两类错误帧的行为区分。 --- .../openai_gateway_response_flush_test.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/backend/internal/service/openai_gateway_response_flush_test.go b/backend/internal/service/openai_gateway_response_flush_test.go index 2c35374596..ebfa0f22f1 100644 --- a/backend/internal/service/openai_gateway_response_flush_test.go +++ b/backend/internal/service/openai_gateway_response_flush_test.go @@ -387,13 +387,30 @@ func TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries(t *testing.T) require.Contains(t, flushes[1], "response.failed") }) - t.Run("error event", func(t *testing.T) { + t.Run("retryable error event buffered until terminal", func(t *testing.T) { + // 可重试类 error 帧不算客户端输出:保持在 attempt 缓冲中不单独 flush, + // 为随后可能到达的 response.failed 保留 pre-output failover 能力, + // 与终止帧一起出站。 body := "data: {\"type\":\"error\",\"error\":{\"message\":\"failed\"}}\n\n" + "data: [DONE]\n\n" recorder := newOpenAIResponseFlushRecorder() result, err := runOpenAIResponseFlushTest(recorder, io.NopCloser(strings.NewReader(body)), config.GatewayConfig{}) + require.NoError(t, err) + require.NotNil(t, result) + gotBody, flushes := recorder.snapshot() + require.Equal(t, body, gotBody) + require.Len(t, flushes, 1) + }) + + t.Run("non-retryable error event flushes at boundary", func(t *testing.T) { + body := "data: {\"type\":\"error\",\"error\":{\"code\":\"invalid_request\",\"message\":\"bad request\"}}\n\n" + + "data: [DONE]\n\n" + recorder := newOpenAIResponseFlushRecorder() + + result, err := runOpenAIResponseFlushTest(recorder, io.NopCloser(strings.NewReader(body)), config.GatewayConfig{}) + require.NoError(t, err) require.NotNil(t, result) gotBody, flushes := recorder.snapshot()