From 0f66b5fdbe465d2b369985293a4cdf1e7d8afa14 Mon Sep 17 00:00:00 2001 From: nico Date: Thu, 11 Dec 2025 23:28:27 +0800 Subject: [PATCH] fix: remove timeout handling for streaming requests. --- api_client.go | 14 ------- api_client_test.go | 98 ---------------------------------------------- 2 files changed, 112 deletions(-) diff --git a/api_client.go b/api_client.go index 40eec042..60655ddb 100644 --- a/api_client.go +++ b/api_client.go @@ -50,20 +50,6 @@ func sendStreamRequest[T responseStream[R], R any](ctx context.Context, ac *apiC return err } - // Handle context timeout. - // The request's context deadline is set using [HTTPOptions.Timeout]. - // [ClientConfig.HTTPClient.Timeout] does not affect the context deadline for the request. - // [ClientConfig.HTTPClient.Timeout] is used along with `x-server-timeout` header in order to - // get the end-to-end timeout value for logging. - requestContext := ctx - timeout := httpOptions.Timeout - var cancel context.CancelFunc - if timeout != nil && *timeout > 0*time.Second && isTimeoutBeforeDeadline(ctx, *timeout) { - requestContext, cancel = context.WithTimeout(ctx, *timeout) - defer cancel() - } - req = req.WithContext(requestContext) - resp, err := doRequest(ac, req) if err != nil { return err diff --git a/api_client_test.go b/api_client_test.go index ddd7253f..7c183153 100644 --- a/api_client_test.go +++ b/api_client_test.go @@ -449,104 +449,6 @@ func TestSendStreamRequest(t *testing.T) { wantErr: true, wantErrorMessage: "doRequest: error sending request: Post \"invalid-url/test\": unsupported protocol scheme", }, - { - name: "With client timeout", - method: "POST", - path: "test", - body: map[string]any{"key": "value"}, - mockResponse: "data:{\"key1\":\"value1\"}\n\ndata:{\"key2\":\"value2\"}\n\n", - mockStatusCode: http.StatusOK, - wantResponse: []map[string]any{ - {"key1": "value1"}, - {"key2": "value2"}, - }, - clientTimeout: Ptr(100 * time.Millisecond), - serverLatency: 150 * time.Millisecond, - wantErr: true, - wantErrorMessage: "context deadline exceeded", - }, - { - name: "With request timeout", - method: "POST", - path: "test", - body: map[string]any{"key": "value"}, - mockResponse: "data:{\"key1\":\"value1\"}\n\ndata:{\"key2\":\"value2\"}\n\n", - mockStatusCode: http.StatusOK, - wantResponse: []map[string]any{ - {"key1": "value1"}, - {"key2": "value2"}, - }, - requestTimeout: Ptr(100 * time.Millisecond), - serverLatency: 150 * time.Millisecond, - wantErr: true, - wantErrorMessage: "context deadline exceeded", - }, - { - name: "With client timeout and request timeout", - method: "POST", - path: "test", - body: map[string]any{"key": "value"}, - mockResponse: "data:{\"key1\":\"value1\"}\n\ndata:{\"key2\":\"value2\"}\n\n", - mockStatusCode: http.StatusOK, - wantResponse: []map[string]any{ - {"key1": "value1"}, - {"key2": "value2"}, - }, - clientTimeout: Ptr(200 * time.Millisecond), - requestTimeout: Ptr(100 * time.Millisecond), - serverLatency: 150 * time.Millisecond, - wantErr: true, - wantErrorMessage: "context deadline exceeded", - }, - { - name: "With 0 client timeout and request timeout", - method: "POST", - path: "test", - body: map[string]any{"key": "value"}, - mockResponse: "data:{\"key1\":\"value1\"}\n\ndata:{\"key2\":\"value2\"}\n\n", - mockStatusCode: http.StatusOK, - wantResponse: []map[string]any{ - {"key1": "value1"}, - {"key2": "value2"}, - }, - clientTimeout: Ptr(0 * time.Millisecond), - requestTimeout: Ptr(100 * time.Millisecond), - serverLatency: 150 * time.Millisecond, - wantErr: true, - wantErrorMessage: "context deadline exceeded", - }, - { - name: "With client timeout and 0 request timeout", - method: "POST", - path: "test", - body: map[string]any{"key": "value"}, - mockResponse: "data:{\"key1\":\"value1\"}\n\ndata:{\"key2\":\"value2\"}\n\n", - mockStatusCode: http.StatusOK, - clientTimeout: Ptr(200 * time.Millisecond), - requestTimeout: Ptr(0 * time.Millisecond), - serverLatency: 250 * time.Millisecond, - wantResponse: []map[string]any{ - {"key1": "value1"}, - {"key2": "value2"}, - }, - wantErr: false, - }, - { - name: "With 0 client timeout and 0 request timeout", - method: "POST", - path: "test", - body: map[string]any{"key": "value"}, - mockResponse: "data:{\"key1\":\"value1\"}\n\ndata:{\"key2\":\"value2\"}\n\n", - mockStatusCode: http.StatusOK, - clientTimeout: Ptr(0 * time.Millisecond), - requestTimeout: Ptr(0 * time.Millisecond), - serverLatency: 150 * time.Millisecond, - wantResponse: []map[string]any{ - {"key1": "value1"}, - {"key2": "value2"}, - }, - wantErr: false, - }, } for _, tt := range tests {