Ich schreibe eine Reihe von Tests für eine Funktion, die wir prüfen müssen, ob ein Socket zum Lesen bereit ist. Wir verwenden die Funktion poll http://man7.org/linux/man-pages/man2/poll.2.html.Test C++ Poll-Socket-Funktion
Das Problem, dem wir gegenüberstehen, emuliert einige Sockets-Zustände, wie Warten auf ein Timeout, Socket-Fehler und so weiter.
Wir haben eine sehr einfache Funktion wie diese
definiertbool 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;
}
Wir in unserem Test Funktion wie diese eine Fassung zu erstellen:
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));
Das Problem Umfrage ruft die immer einen Wert zurückgibt> 0 Wir versuchen zu testen, ob wir den 0-Fall erhalten, der ein Timeout ist, und den negativen, der ein Fehler ist. Wir haben versucht, dies zu verspotten, aber wir können es nicht, da es nicht in einer Klasse ist, um von einem GMock-Framework zu übernehmen und es zu erstellen oder ein Mock zu verwenden. Das Erstellen einer Klasse nur für diese Methode ist übermäßig. Können wir diese verschiedenen Socket-Zustände in irgendeiner Weise nachbilden?
Danke!
wie ein Zauber funktioniert. Vielen Dank! – acostela