31 # include <netinet/in.h>    33 # include <sys/socket.h>    36 # include <winsock2.h>     37 # include <ws2tcpip.h>     38 typedef unsigned long int nfds_t;
    41 #include <sys/types.h>    48 #include <gtest/gtest.h>    57 int __wrap_poll(
struct pollfd *fds, nfds_t nfds, 
int timeout) {
    72 int mock_poll(
struct pollfd *fds, nfds_t nfds, 
int timeout) {
    79   for(nfds_t i=0; i<nfds && i<
poll_fds.size(); i++) {
    80     EXPECT_EQ(
poll_fds[i].fd, fds[i].fd);
    81     EXPECT_EQ(
poll_fds[i].events, fds[i].events);
    82     fds[i].revents = 
poll_fds[i].revents;
    92     ts.tv_sec = timeout / 1000;
    93     ts.tv_nsec = (timeout % 1000) * 1000000;
    99       ret = nanosleep(&ts, &ts);
   103     } 
while( ret != 0 && errno == EINTR);
   110 void Expect_poll(std::vector<pollfd> fds, 
int timeout, 
int _errno, 
int ret) {
   111   EXPECT_EQ(0, 
poll_calls) << 
"Test bug: Cannot expect more than one call to poll";
   124     : handleEvent_calls(0), last_event(0), event_result(0), 
close_calls(0) {
   133     last_event = eventType;
   149 #define EXPECT_CLOSE_CALLS(n)                                                  \   151     EXPECT_EQ(m.close_calls, n);                                               \   155 #define EXPECT_EVENTS(n)                                                       \   157     EXPECT_EQ(m.handleEvent_calls, n);                                         \   158     m.handleEvent_calls = 0;                                                   \   161 #define EXPECT_EVENT(event)                                                    \   163     EXPECT_EQ(m.last_event, event);                                            \   164     EXPECT_EQ(m.handleEvent_calls, 1);                                         \   165     m.handleEvent_calls = 0;                                                   \   172       pollfd f = { .fd = 4, .events = 0, .revents = 0 };
   231   EXPECT_EQ(dispatch._sources.size(), 1u);
   234   fds[0].events = POLLIN;
   243   fds[0].events = POLLIN;
   244   fds[0].revents = POLLIN;
   255   EXPECT_EQ(dispatch._sources.size(), 1u);
   258   fds[0].events = POLLOUT;
   259   fds[0].revents = POLLOUT;
   267   EXPECT_EQ(dispatch._sources.size(), 0u);
   279   EXPECT_EQ(dispatch._sources.size(), 1u);
   282   fds[0].events = POLLOUT;
   288   EXPECT_EQ(dispatch._sources.size(), 1u);
   294   EXPECT_EQ(dispatch._sources.size(), 1u);
   298   fds[0].events = POLLOUT;
   299   fds[0].revents = POLLOUT;
   308   EXPECT_EQ(dispatch._sources.size(), 0u);
   320   EXPECT_EQ(dispatch._sources.size(), 1u);
   323   fds[0].events = POLLPRI;
   331   fds[0].events = POLLPRI;
   332   fds[0].revents = POLLPRI;
   344   EXPECT_EQ(dispatch._sources.size(), 1u);
   348   fds[0].events = POLLOUT;
   349   fds[0].revents = POLLOUT;
   354   EXPECT_EQ(dispatch._sources.size(), 1u);
   357 int main(
int argc, 
char **argv)
   359   ::testing::InitGoogleTest(&argc, argv);
   360   return RUN_ALL_TESTS();
 
connected/data can be written without blocking 
TEST_F(MockSourceTest, ReadEvent)
int mock_poll(struct pollfd *fds, nfds_t nfds, int timeout)
void Expect_poll(std::vector< pollfd > fds, int timeout, int _errno, int ret)
An RPC source represents a file descriptor to monitor. 
std::deque< int > close_calls
std::vector< pollfd > fds
virtual unsigned handleEvent(unsigned eventType)
Return true to continue monitoring this source. 
#define EXPECT_CLOSE_CALLS(n)
int(* fake_poll)(struct pollfd *, nfds_t, int)=0
std::vector< pollfd > poll_fds
int main(int argc, char **argv)
out-of-band data has arrived 
#define EXPECT_EVENT(event)
virtual void close()
Close the owned fd. If deleteOnClose was specified at construction, the object is deleted...
int __wrap_poll(struct pollfd *fds, nfds_t nfds, int timeout)