Prevent possible race condition on SetPingHandler
conn.ReadMessage and conn.SetPingHandler are executed in different goroutines.
This commit is contained in:
parent
60141d398f
commit
a992bc1506
|
|
@ -108,7 +108,7 @@ func TestPing(t *testing.T) {
|
|||
|
||||
wsURL := wsURL(server.URL)
|
||||
|
||||
user := testClient(t, wsURL)
|
||||
user := createClient(t, wsURL)
|
||||
defer user.conn.Close()
|
||||
|
||||
ping := make(chan bool)
|
||||
|
|
@ -119,6 +119,8 @@ func TestPing(t *testing.T) {
|
|||
return err
|
||||
})
|
||||
|
||||
startReading(user)
|
||||
|
||||
expectNoMessage(user)
|
||||
|
||||
select {
|
||||
|
|
@ -438,14 +440,15 @@ func clients(api *API, user uint) []*client {
|
|||
}
|
||||
|
||||
func testClient(t *testing.T, url string) *testingClient {
|
||||
ws, _, err := websocket.DefaultDialer.Dial(url, nil)
|
||||
assert.Nil(t, err)
|
||||
|
||||
readMessages := make(chan model.Message)
|
||||
client := createClient(t, url)
|
||||
startReading(client)
|
||||
return client
|
||||
}
|
||||
|
||||
func startReading(client *testingClient) {
|
||||
go func() {
|
||||
for {
|
||||
_, payload, err := ws.ReadMessage()
|
||||
_, payload, err := client.conn.ReadMessage()
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
|
|
@ -453,16 +456,23 @@ func testClient(t *testing.T, url string) *testingClient {
|
|||
|
||||
actual := &model.Message{}
|
||||
json.NewDecoder(bytes.NewBuffer(payload)).Decode(actual)
|
||||
readMessages <- *actual
|
||||
client.readMessage <- *actual
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func createClient(t *testing.T, url string) *testingClient {
|
||||
ws, _, err := websocket.DefaultDialer.Dial(url, nil)
|
||||
assert.Nil(t, err)
|
||||
|
||||
readMessages := make(chan model.Message)
|
||||
|
||||
return &testingClient{conn: ws, readMessage: readMessages, t: t}
|
||||
}
|
||||
|
||||
type testingClient struct {
|
||||
conn *websocket.Conn
|
||||
readMessage <-chan model.Message
|
||||
readMessage chan model.Message
|
||||
t *testing.T
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue