1
我正在爲一個函數寫一堆測試,我們必須檢查套接字是否準備好讀取。我們正在使用功能輪詢http://man7.org/linux/man-pages/man2/poll.2.html。測試C++輪詢套接字函數
我們面臨的問題是模擬一些套接字狀態,如等待超時,套接字錯誤等。
我們有這樣
bool wait_for_socket_data(int fd, int timeout_millisecs) {
if (fd < 0 or timeout_millisecs < 0)
return false;
struct pollfd fds[1];
fds[0].fd = fd;
fds[0].events = POLLIN;
const int poll_response = poll(fds, sizeof(fds)/sizeof(struct pollfd), timeout_millisecs);
std::cout << poll_response;
if (poll_response <= 0)
return false;
//here we will check different values in event inside struct
return true;
}
我們在我們的測試函數來創建這樣一個插座定義一個很簡單的功能:
const int fd = socket(AF_INET6, SOCK_STREAM, 0);
memset(&addr, 0, sizeof(addr));
addr.sin6_family = AF_INET6;
memcpy(&addr.sin6_addr, &in6addr_any, sizeof(in6addr_any));
addr.sin6_port = htons(server_port);
const int rc = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
問題呼籲調查總是返回一個值> 0我們試圖測試得到0的情況,這是一個超時,而負的情況是一個錯誤。我們試圖嘲笑這一點,但我們不能這樣做,因爲它不在類內部繼承並創建模擬或使用GMock框架。僅爲此方法創建類是過度的。我們可以以任何方式模擬這些不同的套接字狀態嗎?
謝謝!
工作就像一個魅力。非常感謝你! – acostela