Как правильно тестировать получение нужного ответа на вебсокете в массе ответов с сервера
В тесте поднимается сервер который реализует API на вебсокетах. Допустим я делаю тестовый запрос и жду ответа, но он может прийти в массе ответов с общей информацией, которая отдается на сокет сервером. Я хочу проверить есть ли в ответах сервера нужный за определенный промежуток времени.
func check(t *testing.T, c engine.Client, req []byte, expectedSocketResponse []byte) {
if err := c.Conn.WriteMessage(websocket.TextMessage, req); err != nil {
t.Fatalf("Error socket writing: %v", err)
}
exist := false
assert.Nil(t, c.Conn.SetReadDeadline(time.Now().Add(5 * time.Second)))
for {
_, actualSocketResponse, err := c.Conn.ReadMessage() //wait for response
if err != nil {
break
}
log.Printf("Actual socket response: %s\n", string(actualSocketResponse))
if reflect.DeepEqual(actualSocketResponse, expectedSocketResponse) {
exist = true
break
}
}
assert.True(t, exist)
return
}
Но, поскольку операция блокирующая я не знаю как правильно это написать, код выше не работает правильно и в тестах все висит в ожидании сообщения с сокета.