Skip to content

Commit 3058105

Browse files
authored
Merge pull request #8 from launchdarkly/eb/ch81628/empty-stream-fix
ensure that stream handler starts response even if there's no data yet
2 parents 450a950 + 076e07d commit 3058105

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

httphelpers/handlers_streaming.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,8 @@ func (s *chunkedStreamingHandlerImpl) ServeHTTP(w http.ResponseWriter, r *http.R
184184
flusher.Flush()
185185
}
186186

187+
flusher.Flush()
188+
187189
var closeNotifyCh <-chan bool
188190
// CloseNotifier is deprecated but there's no way to use Context in this case
189191
if closeNotifier, ok := w.(http.CloseNotifier); ok { //nolint:megacheck

httphelpers/handlers_streaming_test.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,25 @@ import (
1313
helpers "github.com/launchdarkly/go-test-helpers/v2"
1414
)
1515

16+
func TestChunkedStreamingHandlerReturnsResponseBeforeFirstData(t *testing.T) {
17+
handler, stream := ChunkedStreamingHandler(nil, "text/plain")
18+
defer stream.Close()
19+
20+
WithServer(handler, func(server *httptest.Server) {
21+
resp, err := http.DefaultClient.Get(server.URL)
22+
require.NoError(t, err)
23+
defer resp.Body.Close()
24+
assert.Equal(t, 200, resp.StatusCode)
25+
})
26+
}
27+
1628
func TestChunkedStreamingHandlerSend(t *testing.T) {
1729
initialData := []byte("hello,")
1830
handler, stream := ChunkedStreamingHandler(initialData, "text/plain")
1931
defer stream.Close()
2032

2133
stream.Enqueue([]byte("first,"))
22-
stream.Send([]byte("this isn't sent becauset here are no connections"))
34+
stream.Send([]byte("this isn't sent because there are no connections"))
2335
stream.Enqueue([]byte("second,"))
2436

2537
WithServer(handler, func(server *httptest.Server) {

0 commit comments

Comments
 (0)