| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- //go:build unit
- package service
- import (
- "fmt"
- "strings"
- "testing"
- "github.com/Wei-Shaw/sub2api/internal/domain"
- "github.com/stretchr/testify/require"
- )
- func TestDescribeInvalidJSON_TruncatedBody(t *testing.T) {
- // Simulates a body cut off mid-stream (e.g. partially consumed by middleware).
- body := []byte(`{"model":"claude-sonnet-4-6","messages":[{"role":"user","content":"hi`)
- err := DescribeInvalidJSON(body)
- require.Error(t, err)
- require.Contains(t, err.Error(), fmt.Sprintf("len=%d", len(body)))
- require.Contains(t, err.Error(), "unexpected end of JSON input")
- }
- func TestDescribeInvalidJSON_InvalidCharacterWithOffset(t *testing.T) {
- body := []byte(`{"model": bad}`)
- err := DescribeInvalidJSON(body)
- require.Error(t, err)
- require.Contains(t, err.Error(), "offset=11")
- require.Contains(t, err.Error(), "invalid character")
- }
- func TestDescribeInvalidJSON_DoesNotLeakBodyContent(t *testing.T) {
- secret := "sk-super-secret-value"
- body := []byte(`{"api_key":"` + secret + `","broken":`)
- err := DescribeInvalidJSON(body)
- require.Error(t, err)
- require.NotContains(t, err.Error(), secret)
- }
- func TestParseGatewayRequest_InvalidJSONErrorIsDiagnostic(t *testing.T) {
- body := []byte(`{"model":"claude-sonnet-4-6","messages":[`)
- _, err := ParseGatewayRequest(NewRequestBodyRef(body), domain.PlatformAnthropic)
- require.Error(t, err)
- require.True(t, strings.HasPrefix(err.Error(), "invalid json (len="), "error should carry diagnostics, got: %s", err.Error())
- }
|