Skip to content

Commit 09c70d6

Browse files
refactor(extproc): enhance utilities and testing infrastructure
- Update utility functions to support image generation processing - Add comprehensive mock implementations for testing - Improve test infrastructure for image generation components Signed-off-by: Hrushikesh Patil <[email protected]>
1 parent 19a00f9 commit 09c70d6

File tree

2 files changed

+60
-1
lines changed

2 files changed

+60
-1
lines changed

internal/extproc/mocks_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,3 +396,55 @@ type mockBackendAuthHandler struct{}
396396
func (m *mockBackendAuthHandler) Do(context.Context, map[string]string, *extprocv3.HeaderMutation, *extprocv3.BodyMutation) error {
397397
return nil
398398
}
399+
400+
// mockImageGenerationMetrics implements [metrics.ImageGenerationMetrics] for testing.
401+
type mockImageGenerationMetrics struct {
402+
requestSuccessCount int
403+
requestErrorCount int
404+
model string
405+
backend string
406+
tokenUsageCount int
407+
}
408+
409+
func (m *mockImageGenerationMetrics) StartRequest(map[string]string) {}
410+
func (m *mockImageGenerationMetrics) SetModel(requestModel, responseModel string) {
411+
m.model = responseModel
412+
}
413+
func (m *mockImageGenerationMetrics) SetBackend(b *filterapi.Backend) { m.backend = b.Name }
414+
func (m *mockImageGenerationMetrics) RecordTokenUsage(_ context.Context, _ uint32, _ uint32, _ map[string]string) {
415+
m.tokenUsageCount++
416+
}
417+
func (m *mockImageGenerationMetrics) RecordRequestCompletion(_ context.Context, success bool, _ map[string]string) {
418+
if success {
419+
m.requestSuccessCount++
420+
} else {
421+
m.requestErrorCount++
422+
}
423+
}
424+
func (m *mockImageGenerationMetrics) RecordImageGeneration(_ context.Context, _ int, _ string, _ string, _ map[string]string) {
425+
}
426+
427+
func (m *mockImageGenerationMetrics) RequireRequestFailure(t *testing.T) {
428+
require.Equal(t, 0, m.requestSuccessCount)
429+
require.Equal(t, 1, m.requestErrorCount)
430+
}
431+
func (m *mockImageGenerationMetrics) RequireRequestNotCompleted(t *testing.T) {
432+
require.Equal(t, 0, m.requestSuccessCount)
433+
require.Equal(t, 0, m.requestErrorCount)
434+
}
435+
func (m *mockImageGenerationMetrics) RequireRequestSuccess(t *testing.T) {
436+
require.Equal(t, 1, m.requestSuccessCount)
437+
require.Equal(t, 0, m.requestErrorCount)
438+
}
439+
func (m *mockImageGenerationMetrics) RequireSelectedModel(t *testing.T, model string) {
440+
require.Equal(t, model, m.model)
441+
}
442+
func (m *mockImageGenerationMetrics) RequireSelectedBackend(t *testing.T, backend string) {
443+
require.Equal(t, backend, m.backend)
444+
}
445+
func (m *mockImageGenerationMetrics) RequireTokensRecorded(t *testing.T, count int) {
446+
require.Equal(t, count, m.tokenUsageCount)
447+
}
448+
449+
// Ensure mock implements the interface at compile-time.
450+
var _ metrics.ImageGenerationMetrics = &mockImageGenerationMetrics{}

internal/extproc/util.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"fmt"
1212
"io"
1313

14+
"github.com/andybalholm/brotli"
1415
extprocv3 "github.com/envoyproxy/go-control-plane/envoy/service/ext_proc/v3"
1516
)
1617

@@ -21,7 +22,7 @@ type contentDecodingResult struct {
2122
}
2223

2324
// decodeContentIfNeeded decompresses the response body based on the content-encoding header.
24-
// Currently, supports gzip encoding, but can be extended to support other encodings in the future.
25+
// Currently, supports gzip and brotli encoding, but can be extended to support other encodings in the future.
2526
// Returns a reader for the (potentially decompressed) body and metadata about the encoding.
2627
func decodeContentIfNeeded(body []byte, contentEncoding string) (contentDecodingResult, error) {
2728
switch contentEncoding {
@@ -34,6 +35,12 @@ func decodeContentIfNeeded(body []byte, contentEncoding string) (contentDecoding
3435
reader: reader,
3536
isEncoded: true,
3637
}, nil
38+
case "br":
39+
reader := brotli.NewReader(bytes.NewReader(body))
40+
return contentDecodingResult{
41+
reader: reader,
42+
isEncoded: true,
43+
}, nil
3744
default:
3845
return contentDecodingResult{
3946
reader: bytes.NewReader(body),

0 commit comments

Comments
 (0)