mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-01 23:15:27 +08:00
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package stream
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
|
|
"ds2api/internal/sse"
|
|
)
|
|
|
|
func TestConsumeSSEPrefersContextCancellationOverReadyParsedLines(t *testing.T) {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
cancel()
|
|
|
|
var finalized bool
|
|
var contextDone bool
|
|
var parsedCalled bool
|
|
|
|
ConsumeSSE(ConsumeConfig{
|
|
Context: ctx,
|
|
Body: strings.NewReader("data: {\"p\":\"response/content\",\"v\":\"hello\"}\n\ndata: [DONE]\n"),
|
|
ThinkingEnabled: false,
|
|
InitialType: "text",
|
|
KeepAliveInterval: 0,
|
|
}, ConsumeHooks{
|
|
OnParsed: func(_ sse.LineResult) ParsedDecision {
|
|
parsedCalled = true
|
|
return ParsedDecision{}
|
|
},
|
|
OnFinalize: func(_ StopReason, _ error) {
|
|
finalized = true
|
|
},
|
|
OnContextDone: func() {
|
|
contextDone = true
|
|
},
|
|
})
|
|
|
|
if !contextDone {
|
|
t.Fatal("expected OnContextDone to run for an already-cancelled context")
|
|
}
|
|
if finalized {
|
|
t.Fatal("expected OnFinalize not to run after context cancellation wins")
|
|
}
|
|
if parsedCalled {
|
|
t.Fatal("expected parsed lines not to be processed after context cancellation wins")
|
|
}
|
|
}
|