Merge 2591a34c1dd1b8139e3e7b36386f203ea60a8bbf into d9e5cdf9c6f9c1643be6e081516469c71645d93d

This commit is contained in:
smoky 2026-01-24 19:55:09 +08:00 committed by GitHub
commit 03658229de
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 5 additions and 7 deletions

View File

@ -1314,10 +1314,9 @@ func (c *Context) SSEvent(name string, message any) {
// indicates "Is client disconnected in middle of stream"
func (c *Context) Stream(step func(w io.Writer) bool) bool {
w := c.Writer
clientGone := w.CloseNotify()
for {
select {
case <-clientGone:
case <-c.Request.Context().Done():
return true
default:
keepOpen := step(w)

View File

@ -2974,10 +2974,6 @@ func (r *TestResponseRecorder) CloseNotify() <-chan bool {
return r.closeChannel
}
func (r *TestResponseRecorder) closeClient() {
r.closeChannel <- true
}
func CreateTestResponseRecorder() *TestResponseRecorder {
return &TestResponseRecorder{
httptest.NewRecorder(),
@ -2988,6 +2984,7 @@ func CreateTestResponseRecorder() *TestResponseRecorder {
func TestContextStream(t *testing.T) {
w := CreateTestResponseRecorder()
c, _ := CreateTestContext(w)
c.Request, _ = http.NewRequest(http.MethodGet, "", nil)
stopStream := true
c.Stream(func(w io.Writer) bool {
@ -3007,10 +3004,12 @@ func TestContextStream(t *testing.T) {
func TestContextStreamWithClientGone(t *testing.T) {
w := CreateTestResponseRecorder()
c, _ := CreateTestContext(w)
done, cancel := context.WithCancel(context.Background())
c.Request, _ = http.NewRequestWithContext(done, http.MethodGet, "", nil)
c.Stream(func(writer io.Writer) bool {
defer func() {
w.closeClient()
cancel()
}()
_, err := writer.Write([]byte("test"))