написал некие обработчики, которые могут работать в блокирующем и неблокирующем режиме.
Например, обработчик кладёт данные в буферезированный канал. В некоторых случаях он должен быть неблокирующим, т.е. если весь буфер канала забит, то новые данные просто игнорируются через select/chan write/default. Это для случаев когда поток данных не критичен и если неуспевают их обрабатывать, то можно новые просто игнорировать, чтобы не блокировался сервис, который их считывает и кладёт в канал.
Но есть случаи когда данные критично важно и если вдруг буфер забился и не успевает вычитываться и обрабатываться, то сервис их генерирующий должен заблокироваться и ждать.
Как написать тест, который проверит что в одном случае функция висит в блоке, а другом случае нет?
Мне пришла мысль с каким-то контест-таймаутом и проверять, что если сработал таймаут, значит функция в блокировке.
Может есть более верный вараинт как тестировать блокирующие операции?
https://github.com/NOPandJMP/TestTask/blob/493cfdbd9b8498a7d3f85d0e24e05b7990e451d4/server/handlers.go#L42 –после Error надо return И в нескольких других местах тоже.
Вот эта функция явна должна ошибку возвращать: https://github.com/NOPandJMP/TestTask/blob/493cfdbd9b8498a7d3f85d0e24e05b7990e451d4/server/handlers.go#L90
https://github.com/NOPandJMP/TestTask/blob/493cfdbd9b8498a7d3f85d0e24e05b7990e451d4/server/handlers.go#L87 – это лучше через defer делать в начале функции
Обсуждают сегодня