Skip to content

Commit 7cd3824

Browse files
committed
test(ops): add tests for setOpsEndpointContext and safeUpstreamURL
1 parent db9021f commit 7cd3824

2 files changed

Lines changed: 60 additions & 0 deletions

File tree

backend/internal/handler/ops_error_logger_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,3 +274,42 @@ func TestNormalizeOpsErrorType(t *testing.T) {
274274
})
275275
}
276276
}
277+
278+
func TestSetOpsEndpointContext_SetsContextKeys(t *testing.T) {
279+
gin.SetMode(gin.TestMode)
280+
rec := httptest.NewRecorder()
281+
c, _ := gin.CreateTestContext(rec)
282+
c.Request = httptest.NewRequest(http.MethodPost, "/v1/messages", nil)
283+
284+
setOpsEndpointContext(c, "claude-3-5-sonnet-20241022", int16(2)) // stream
285+
286+
v, ok := c.Get(opsUpstreamModelKey)
287+
require.True(t, ok)
288+
require.Equal(t, "claude-3-5-sonnet-20241022", v.(string))
289+
290+
rt, ok := c.Get(opsRequestTypeKey)
291+
require.True(t, ok)
292+
require.Equal(t, int16(2), rt.(int16))
293+
}
294+
295+
func TestSetOpsEndpointContext_EmptyModelNotStored(t *testing.T) {
296+
gin.SetMode(gin.TestMode)
297+
rec := httptest.NewRecorder()
298+
c, _ := gin.CreateTestContext(rec)
299+
c.Request = httptest.NewRequest(http.MethodPost, "/v1/messages", nil)
300+
301+
setOpsEndpointContext(c, "", int16(1))
302+
303+
_, ok := c.Get(opsUpstreamModelKey)
304+
require.False(t, ok, "empty upstream model should not be stored")
305+
306+
rt, ok := c.Get(opsRequestTypeKey)
307+
require.True(t, ok)
308+
require.Equal(t, int16(1), rt.(int16))
309+
}
310+
311+
func TestSetOpsEndpointContext_NilContext(t *testing.T) {
312+
require.NotPanics(t, func() {
313+
setOpsEndpointContext(nil, "model", int16(1))
314+
})
315+
}

backend/internal/service/ops_upstream_context_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,27 @@ import (
88
"github.com/stretchr/testify/require"
99
)
1010

11+
func TestSafeUpstreamURL(t *testing.T) {
12+
tests := []struct {
13+
name string
14+
input string
15+
want string
16+
}{
17+
{"strips query", "https://api.anthropic.com/v1/messages?beta=true", "https://api.anthropic.com/v1/messages"},
18+
{"strips fragment", "https://api.openai.com/v1/responses#frag", "https://api.openai.com/v1/responses"},
19+
{"strips both", "https://host/path?token=secret#x", "https://host/path"},
20+
{"no query or fragment", "https://host/path", "https://host/path"},
21+
{"empty string", "", ""},
22+
{"whitespace only", " ", ""},
23+
{"query before fragment", "https://h/p?a=1#f", "https://h/p"},
24+
}
25+
for _, tt := range tests {
26+
t.Run(tt.name, func(t *testing.T) {
27+
require.Equal(t, tt.want, safeUpstreamURL(tt.input))
28+
})
29+
}
30+
}
31+
1132
func TestAppendOpsUpstreamError_UsesRequestBodyBytesFromContext(t *testing.T) {
1233
gin.SetMode(gin.TestMode)
1334
rec := httptest.NewRecorder()

0 commit comments

Comments
 (0)