Как правильно тестировать получение нужного ответа на вебсокете в массе ответов с сервера

В тесте поднимается сервер который реализует 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
}

Но, поскольку операция блокирующая я не знаю как правильно это написать, код выше не работает правильно и в тестах все висит в ожидании сообщения с сокета.


Ответы (0 шт):