Add Vertex service account support
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/tidwall/gjson"
|
||||
)
|
||||
|
||||
func TestGatewayService_BuildAnthropicVertexServiceAccountRequest(t *testing.T) {
|
||||
gin.SetMode(gin.TestMode)
|
||||
|
||||
rec := httptest.NewRecorder()
|
||||
c, _ := gin.CreateTestContext(rec)
|
||||
c.Request = httptest.NewRequest(http.MethodPost, "/v1/messages", nil)
|
||||
c.Request.Header.Set("Authorization", "Bearer inbound-token")
|
||||
c.Request.Header.Set("X-Api-Key", "inbound-api-key")
|
||||
c.Request.Header.Set("Anthropic-Version", "2023-06-01")
|
||||
c.Request.Header.Set("Anthropic-Beta", "interleaved-thinking-2025-05-14")
|
||||
|
||||
account := &Account{
|
||||
ID: 301,
|
||||
Platform: PlatformAnthropic,
|
||||
Type: AccountTypeServiceAccount,
|
||||
Credentials: map[string]any{
|
||||
"project_id": "vertex-proj",
|
||||
"location": "us-east5",
|
||||
},
|
||||
}
|
||||
body := []byte(`{"model":"claude-sonnet-4-5","stream":false,"max_tokens":32,"messages":[{"role":"user","content":"hello"}]}`)
|
||||
|
||||
svc := &GatewayService{}
|
||||
req, err := svc.buildUpstreamRequest(
|
||||
context.Background(),
|
||||
c,
|
||||
account,
|
||||
body,
|
||||
"vertex-token",
|
||||
"service_account",
|
||||
"claude-sonnet-4-5@20250929",
|
||||
false,
|
||||
false,
|
||||
)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "https://us-east5-aiplatform.googleapis.com/v1/projects/vertex-proj/locations/us-east5/publishers/anthropic/models/claude-sonnet-4-5@20250929:rawPredict", req.URL.String())
|
||||
require.Equal(t, "Bearer vertex-token", getHeaderRaw(req.Header, "authorization"))
|
||||
require.Empty(t, getHeaderRaw(req.Header, "x-api-key"))
|
||||
require.Empty(t, getHeaderRaw(req.Header, "anthropic-version"))
|
||||
require.Equal(t, "interleaved-thinking-2025-05-14", getHeaderRaw(req.Header, "anthropic-beta"))
|
||||
|
||||
got := readRequestBodyForTest(t, req)
|
||||
require.Equal(t, "", gjson.GetBytes(got, "model").String())
|
||||
require.Equal(t, vertexAnthropicVersion, gjson.GetBytes(got, "anthropic_version").String())
|
||||
require.Equal(t, "hello", gjson.GetBytes(got, "messages.0.content").String())
|
||||
}
|
||||
|
||||
func readRequestBodyForTest(t *testing.T, req *http.Request) []byte {
|
||||
t.Helper()
|
||||
require.NotNil(t, req.Body)
|
||||
body, err := io.ReadAll(req.Body)
|
||||
require.NoError(t, err)
|
||||
return body
|
||||
}
|
||||
Reference in New Issue
Block a user