fix(coderd/httpapi): stop writing websocket frames to ResponseRecorder in test (#25284)

The `mockEventSenderWrite` function in `newOneWayWriter()` wrote
WebSocket frame data to both the `net.Pipe` and the
`httptest.ResponseRecorder`. After `websocket.Accept()` calls
`WriteHeader(101)`, the recorder rejects body writes with `"response
status code does not allow body"`. When `HeartbeatClose` sends a ping,
the control frame flush routes through the recorder, producing an
ERROR-level log that `slogtest` catches as a test failure.

Removed the `recorder.Write(b)` call from the write function. The
recorder is only needed for header/status inspection; WebSocket frame
data should only go through the `net.Pipe`.

Closes https://github.com/coder/internal/issues/1521

> 🤖 Generated by Coder Agents
This commit is contained in:
Cian Johnston
2026-05-14 09:15:14 +01:00
committed by GitHub
parent 024132e8a4
commit 581f3bdd14
+1 -19
View File
@@ -193,12 +193,6 @@ func (m mockOneWaySocketWriter) WriteHeader(code int) {
m.serverRecorder.WriteHeader(code)
}
type mockEventSenderWrite func(b []byte) (int, error)
func (w mockEventSenderWrite) Write(b []byte) (int, error) {
return w(b)
}
func TestOneWayWebSocketEventSender(t *testing.T) {
t.Parallel()
@@ -220,18 +214,6 @@ func TestOneWayWebSocketEventSender(t *testing.T) {
mockServer, mockClient := net.Pipe()
recorder := httptest.NewRecorder()
var write mockEventSenderWrite = func(b []byte) (int, error) {
serverCount, err := mockServer.Write(b)
if err != nil {
return 0, err
}
recorderCount, err := recorder.Write(b)
if err != nil {
return 0, err
}
return min(serverCount, recorderCount), nil
}
return mockOneWaySocketWriter{
testContext: t,
serverConn: mockServer,
@@ -239,7 +221,7 @@ func TestOneWayWebSocketEventSender(t *testing.T) {
serverRecorder: recorder,
serverReadWriter: bufio.NewReadWriter(
bufio.NewReader(mockServer),
bufio.NewWriter(write),
bufio.NewWriter(mockServer),
),
}
}