Skip to content

Commit dfec4bd

Browse files
committed
wip: get basics of first major test in place
1 parent 222f9cf commit dfec4bd

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

coderd/httpapi/httpapi_test.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"context"
77
"encoding/json"
88
"fmt"
9+
"io"
910
"net"
1011
"net/http"
1112
"net/http/httptest"
@@ -162,10 +163,11 @@ func TestWebsocketCloseMsg(t *testing.T) {
162163
// Our WebSocket library accepts any arbitrary ResponseWriter at the type level,
163164
// but it must also implement http.Hijack
164165
type mockWsResponseWriter struct {
165-
recorder http.ResponseWriter
166+
recorder *httptest.ResponseRecorder
166167
clientConn net.Conn
167168
serverConn net.Conn
168169
serverReadWriter *bufio.ReadWriter
170+
close func()
169171
}
170172

171173
func (m mockWsResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
@@ -233,6 +235,11 @@ func TestOneWayWebSocket(t *testing.T) {
233235
bufio.NewReader(server),
234236
bufio.NewWriter(write),
235237
),
238+
close: func() {
239+
_ = recorder.Result().Body.Close()
240+
_ = server.Close()
241+
_ = client.Close()
242+
},
236243
}
237244
}
238245

@@ -256,6 +263,7 @@ func TestOneWayWebSocket(t *testing.T) {
256263
writer := newWebsocketWriter()
257264
_, _, err := httpapi.OneWayWebSocket[any](writer, req)
258265
require.ErrorContains(t, err, p.proto)
266+
writer.close()
259267
}
260268
})
261269

@@ -264,15 +272,26 @@ func TestOneWayWebSocket(t *testing.T) {
264272

265273
req := newBaseRequest(t)
266274
writer := newWebsocketWriter()
275+
defer writer.close()
267276
send, _, err := httpapi.OneWayWebSocket[codersdk.ServerSentEvent](writer, req)
268277
require.NoError(t, err)
269278

270-
payload := codersdk.ServerSentEvent{
279+
serverPayload := codersdk.ServerSentEvent{
271280
Type: codersdk.ServerSentEventTypeData,
272281
Data: "Blah",
273282
}
274-
err = send(payload)
283+
err = send(serverPayload)
275284
require.NoError(t, err)
285+
286+
b, err := io.ReadAll(writer.clientConn)
287+
require.NoError(t, err)
288+
clientPayload := codersdk.ServerSentEvent{}
289+
err = json.Unmarshal(b, &clientPayload)
290+
require.NoError(t, err)
291+
require.Equal(t, serverPayload.Type, clientPayload.Type)
292+
cb, ok := clientPayload.Data.([]byte)
293+
require.True(t, ok)
294+
require.Equal(t, serverPayload.Data, string(cb))
276295
})
277296

278297
t.Run("Signals to an outside consumer when the socket has been closed", func(t *testing.T) {

0 commit comments

Comments
 (0)