Skip to content

Commit 2be6d56

Browse files
committed
chore: get another test working
1 parent dfec4bd commit 2be6d56

File tree

1 file changed

+38
-12
lines changed

1 file changed

+38
-12
lines changed

coderd/httpapi/httpapi_test.go

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"net/http/httptest"
1313
"strings"
1414
"testing"
15+
"time"
1516

1617
"github.com/stretchr/testify/assert"
1718
"github.com/stretchr/testify/require"
@@ -199,9 +200,8 @@ func (w mockWsResponseWrite) Write(b []byte) (int, error) {
199200
func TestOneWayWebSocket(t *testing.T) {
200201
t.Parallel()
201202

202-
newBaseRequest := func(t *testing.T) *http.Request {
203+
newBaseRequest := func(ctx context.Context) *http.Request {
203204
url := "ws://www.fake-website.com/logs"
204-
ctx := testutil.Context(t, testutil.WaitShort)
205205
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
206206
require.NoError(t, err)
207207

@@ -243,7 +243,7 @@ func TestOneWayWebSocket(t *testing.T) {
243243
}
244244
}
245245

246-
t.Run("Produces an error if the socket connection could not be established", func(t *testing.T) {
246+
t.Run("Produces error if the socket connection could not be established", func(t *testing.T) {
247247
t.Parallel()
248248

249249
incorrectProtocols := []struct {
@@ -255,24 +255,26 @@ func TestOneWayWebSocket(t *testing.T) {
255255
{1, 0, "HTTP/1.0"},
256256
}
257257
for _, p := range incorrectProtocols {
258-
req := newBaseRequest(t)
258+
ctx := testutil.Context(t, testutil.WaitShort)
259+
req := newBaseRequest(ctx)
259260
req.ProtoMajor = p.major
260261
req.ProtoMinor = p.minor
261262
req.Proto = p.proto
262263

263264
writer := newWebsocketWriter()
264265
_, _, err := httpapi.OneWayWebSocket[any](writer, req)
265266
require.ErrorContains(t, err, p.proto)
266-
writer.close()
267+
t.Cleanup(writer.close)
267268
}
268269
})
269270

270-
t.Run("Returned callback can publish a new event to the WebSocket connection", func(t *testing.T) {
271+
t.Run("Returned callback can publish new event to WebSocket connection", func(t *testing.T) {
271272
t.Parallel()
272273

273-
req := newBaseRequest(t)
274+
ctx := testutil.Context(t, testutil.WaitShort)
275+
req := newBaseRequest(ctx)
274276
writer := newWebsocketWriter()
275-
defer writer.close()
277+
t.Cleanup(writer.close)
276278
send, _, err := httpapi.OneWayWebSocket[codersdk.ServerSentEvent](writer, req)
277279
require.NoError(t, err)
278280

@@ -285,20 +287,44 @@ func TestOneWayWebSocket(t *testing.T) {
285287

286288
b, err := io.ReadAll(writer.clientConn)
287289
require.NoError(t, err)
290+
fmt.Printf("-----------%q\n", b) // todo: Figure out why junk characters are added to JSON
288291
clientPayload := codersdk.ServerSentEvent{}
289292
err = json.Unmarshal(b, &clientPayload)
290293
require.NoError(t, err)
291294
require.Equal(t, serverPayload.Type, clientPayload.Type)
292-
cb, ok := clientPayload.Data.([]byte)
295+
data, ok := clientPayload.Data.([]byte)
293296
require.True(t, ok)
294-
require.Equal(t, serverPayload.Data, string(cb))
297+
require.Equal(t, serverPayload.Data, string(data))
295298
})
296299

297-
t.Run("Signals to an outside consumer when the socket has been closed", func(t *testing.T) {
300+
t.Run("Signals to outside consumer when socket has been closed", func(t *testing.T) {
298301
t.Parallel()
302+
303+
rootCtx := testutil.Context(t, testutil.WaitShort)
304+
cancelCtx, cancel := context.WithCancel(rootCtx)
305+
306+
req := newBaseRequest(cancelCtx)
307+
writer := newWebsocketWriter()
308+
t.Cleanup(writer.close)
309+
_, done, err := httpapi.OneWayWebSocket[codersdk.ServerSentEvent](writer, req)
310+
require.NoError(t, err)
311+
312+
successC := make(chan bool)
313+
ticker := time.NewTicker(testutil.WaitShort)
314+
go func() {
315+
select {
316+
case <-done:
317+
successC <- true
318+
case <-ticker.C:
319+
successC <- false
320+
}
321+
}()
322+
323+
cancel()
324+
require.True(t, <-successC)
299325
})
300326

301-
t.Run("Socket will automatically close if client sends a single message", func(t *testing.T) {
327+
t.Run("Socket will immediately close if client sends any message", func(t *testing.T) {
302328
t.Parallel()
303329
})
304330

0 commit comments

Comments
 (0)