Skip to content

Commit f7c7884

Browse files
committed
fix: WebSocketRoute connect to server synchronously
1 parent 59ce07d commit f7c7884

File tree

3 files changed

+30
-17
lines changed

3 files changed

+30
-17
lines changed

tests/route_web_socket_test.go

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func assertSlicesEqual(t *testing.T, expected []interface{}, cb func() (interfac
1919
require.EventuallyWithT(t, func(collect *assert.CollectT) {
2020
actual, err := cb()
2121
require.NoError(t, err)
22-
assert.EqualValues(t, expected, actual)
22+
require.EqualValues(t, expected, actual)
2323
}, 5*time.Second, 200*time.Millisecond)
2424
}
2525

@@ -157,7 +157,8 @@ func TestRouteWebSocketShouldWorkWithServer(t *testing.T) {
157157
wsRouteChan := make(chan playwright.WebSocketRoute, 1)
158158

159159
handleWS := func(ws playwright.WebSocketRoute) {
160-
server, _ := ws.ConnectToServer()
160+
server, err := ws.ConnectToServer()
161+
require.NoError(t, err)
161162

162163
ws.OnMessage(func(message interface{}) {
163164
msg := message.(string)
@@ -192,24 +193,23 @@ func TestRouteWebSocketShouldWorkWithServer(t *testing.T) {
192193
wsRouteChan <- ws
193194
}
194195

195-
require.NoError(t, page.RouteWebSocket(regexp.MustCompile(".*"), handleWS))
196-
197-
wsConnChan := server.WaitForWebSocketConnection()
198196
log := newSyncSlice[string]()
199197

200-
server.OnceWebSocketConnection(func(c *websocket.Conn, r *http.Request) {
201-
server.OnWebSocketMessage(func(c *websocket.Conn, r *http.Request, msgType websocket.MessageType, msg []byte) {
202-
log.Append(fmt.Sprintf("message: %s", msg))
203-
})
204-
server.OnWebSocketClose(func(err *websocket.CloseError) {
205-
log.Append(fmt.Sprintf("close: code=%d reason=%s", err.Code, err.Reason))
206-
})
198+
server.OnWebSocketMessage(func(c *websocket.Conn, r *http.Request, msgType websocket.MessageType, msg []byte) {
199+
log.Append(fmt.Sprintf("message: %s", msg))
200+
})
201+
server.OnWebSocketClose(func(err *websocket.CloseError) {
202+
log.Append(fmt.Sprintf("close: code=%d reason=%s", err.Code, err.Reason))
207203
})
208204

205+
require.NoError(t, page.RouteWebSocket(regexp.MustCompile(".*"), handleWS))
206+
207+
wsConnChan := server.WaitForWebSocketConnection()
208+
209209
setupWS(t, page, server.PORT, "blob")
210210
ws := <-wsConnChan
211211
require.EventuallyWithT(t, func(collect *assert.CollectT) {
212-
assert.EqualValues(t, []string{"message: fake"}, log.Get())
212+
require.EqualValues(t, []string{"message: fake"}, log.Get())
213213
}, 5*time.Second, 200*time.Millisecond)
214214

215215
ws.SendMessage(websocket.MessageText, []byte("to-modify"))
@@ -234,7 +234,7 @@ func TestRouteWebSocketShouldWorkWithServer(t *testing.T) {
234234
require.NoError(t, err)
235235

236236
require.EventuallyWithT(t, func(collect *assert.CollectT) {
237-
assert.EqualValues(t, []string{"message: fake", "message: modified", "message: pass-client"}, log.Get())
237+
require.EqualValues(t, []string{"message: fake", "message: modified", "message: pass-client"}, log.Get())
238238
}, 5*time.Second, 200*time.Millisecond)
239239

240240
assertSlicesEqual(t, []interface{}{
@@ -246,14 +246,26 @@ func TestRouteWebSocketShouldWorkWithServer(t *testing.T) {
246246
return page.Evaluate(`window.log`)
247247
})
248248

249+
route := <-wsRouteChan
250+
route.Send("another")
251+
assertSlicesEqual(t, []interface{}{
252+
"open",
253+
"message: data=modified origin=ws://localhost:" + server.PORT + " lastEventId=",
254+
"message: data=pass-server origin=ws://localhost:" + server.PORT + " lastEventId=",
255+
"message: data=response origin=ws://localhost:" + server.PORT + " lastEventId=",
256+
"message: data=another origin=ws://localhost:" + server.PORT + " lastEventId=",
257+
}, func() (interface{}, error) {
258+
return page.Evaluate(`window.log`)
259+
})
260+
249261
_, err = page.Evaluate(`
250262
() => {
251263
window.ws.send('pass-client-2');
252264
}`)
253265
require.NoError(t, err)
254266

255267
require.EventuallyWithT(t, func(collect *assert.CollectT) {
256-
assert.EqualValues(t, []string{"message: fake", "message: modified", "message: pass-client", "message: pass-client-2"}, log.Get())
268+
require.EqualValues(t, []string{"message: fake", "message: modified", "message: pass-client", "message: pass-client-2"}, log.Get())
257269
}, 5*time.Second, 200*time.Millisecond)
258270

259271
_, err = page.Evaluate(`
@@ -263,7 +275,7 @@ func TestRouteWebSocketShouldWorkWithServer(t *testing.T) {
263275
require.NoError(t, err)
264276

265277
require.EventuallyWithT(t, func(collect *assert.CollectT) {
266-
assert.EqualValues(t, []string{
278+
require.EqualValues(t, []string{
267279
"message: fake",
268280
"message: modified",
269281
"message: pass-client",

tests/utils_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ func (t *testServer) AfterEach() {
8686
t.requestSubscriberes = make(map[string][]chan *http.Request)
8787
t.eventEmitter.RemoveListeners("connection")
8888
t.eventEmitter.RemoveListeners("message")
89+
t.eventEmitter.RemoveListeners("close")
8990
t.testServer.CloseClientConnections()
9091
}
9192

websocket_route.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ func (r *webSocketRouteImpl) ConnectToServer() (WebSocketRoute, error) {
7777
if r.connected.Load() {
7878
return nil, fmt.Errorf("Already connected to the server")
7979
}
80-
go r.channel.SendNoReply("connect")
80+
r.channel.SendNoReply("connect")
8181
r.connected.Store(true)
8282
return r.server, nil
8383
}

0 commit comments

Comments
 (0)