Я пытаюсь написать модульный тест для моего приложения ZeroMQ (которое я использую через слой cppzmq
C ++). Моя проблема в том, что когда я пытаюсь закрыть свой контекст, это иногда (на первый взгляд случайно) дает сбой. Я не знаю, почему именно, за исключением того, что код ошибки установлен в EINTR, что означает прерванный системный вызов.
Чтобы написать (провальный) модульный тест для этого поведения (который я могу затем попытаться исправить), я подумал ( см. Также этот PR ), было бы полезно, если бы я мог каким-то образом подделать эти системы. звонки, которые прерываются. Внутри этого поддельного системного вызова я могу сначала просто вызвать обычный системный вызов, но затем перед возвратом вручную установить код ошибки в EINTR. Например, я хотел бы заменить recv
на что-то вроде:
ssize_t recv(int sockfd, void *buf, size_t len, int flags) {
ssize_t result = ::recv(sockfd, buf, len, flags);
errno = EINTR;
return result;
}
Возможно ли это? Разумно ли это (можно ли ожидать проблем и если да, то какие)? Есть ли другой способ решить мою проблему с модульным тестированием?