mirror of
https://github.com/coder/coder.git
synced 2026-06-03 13:08:25 +00:00
72689c2552
- Use t.Errorf in chattest non-streaming helpers so encoding failures fail the test - Thread testing.TB into writeResponsesAPIStreaming and log SSE write errors instead of silently dropping them - Bump createworkspace DB error log from Warn to Error - Use errors.Join for timeout + output error in execute.go
78 lines
2.5 KiB
Go
78 lines
2.5 KiB
Go
package chattest
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"testing"
|
|
)
|
|
|
|
// ErrorResponse describes an HTTP error that a test server should return
|
|
// instead of a normal streaming or JSON response.
|
|
type ErrorResponse struct {
|
|
StatusCode int
|
|
Type string
|
|
Message string
|
|
}
|
|
|
|
// writeErrorResponse writes a JSON error response matching the common
|
|
// provider error format used by both Anthropic and OpenAI.
|
|
func writeErrorResponse(t testing.TB, w http.ResponseWriter, errResp *ErrorResponse) {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.WriteHeader(errResp.StatusCode)
|
|
body := map[string]interface{}{
|
|
"error": map[string]interface{}{
|
|
"type": errResp.Type,
|
|
"message": errResp.Message,
|
|
},
|
|
}
|
|
if err := json.NewEncoder(w).Encode(body); err != nil {
|
|
t.Errorf("writeErrorResponse: failed to encode error response: %v", err)
|
|
}
|
|
}
|
|
|
|
// AnthropicErrorResponse returns an AnthropicResponse that causes the
|
|
// test server to respond with the given HTTP status code and error.
|
|
// This simulates provider errors like 529 Overloaded or 429 Rate Limited.
|
|
func AnthropicErrorResponse(statusCode int, errorType, message string) AnthropicResponse {
|
|
return AnthropicResponse{
|
|
Error: &ErrorResponse{
|
|
StatusCode: statusCode,
|
|
Type: errorType,
|
|
Message: message,
|
|
},
|
|
}
|
|
}
|
|
|
|
// AnthropicOverloadedResponse returns a 529 "overloaded" error matching
|
|
// Anthropic's overloaded response format.
|
|
func AnthropicOverloadedResponse() AnthropicResponse {
|
|
return AnthropicErrorResponse(529, "overloaded_error", "Overloaded")
|
|
}
|
|
|
|
// AnthropicRateLimitResponse returns a 429 rate limit error.
|
|
func AnthropicRateLimitResponse() AnthropicResponse {
|
|
return AnthropicErrorResponse(http.StatusTooManyRequests, "rate_limit_error", "Rate limited")
|
|
}
|
|
|
|
// OpenAIErrorResponse returns an OpenAIResponse that causes the
|
|
// test server to respond with the given HTTP status code and error.
|
|
func OpenAIErrorResponse(statusCode int, errorType, message string) OpenAIResponse {
|
|
return OpenAIResponse{
|
|
Error: &ErrorResponse{
|
|
StatusCode: statusCode,
|
|
Type: errorType,
|
|
Message: message,
|
|
},
|
|
}
|
|
}
|
|
|
|
// OpenAIRateLimitResponse returns a 429 rate limit error.
|
|
func OpenAIRateLimitResponse() OpenAIResponse {
|
|
return OpenAIErrorResponse(http.StatusTooManyRequests, "rate_limit_exceeded", "Rate limit exceeded")
|
|
}
|
|
|
|
// OpenAIServerErrorResponse returns a 500 internal server error.
|
|
func OpenAIServerErrorResponse() OpenAIResponse {
|
|
return OpenAIErrorResponse(http.StatusInternalServerError, "server_error", "Internal server error")
|
|
}
|