// Tests receive timeout. The timing verification logic must be very coarse to make sure different // systems running different loads can all pass these tests. TEST_F(SocketTest, ReceiveTimeout) { time_t start_time; ASSERT_TRUE(StartServer()); // Make sure a 20ms timeout completes in 1 second or less. start_time = time(nullptr); EXPECT_TRUE(ReceiveTimeout(server_.get(), 20)); EXPECT_LE(difftime(time(nullptr), start_time), 1.0); // Make sure a 1250ms timeout takes 1 second or more. start_time = time(nullptr); EXPECT_TRUE(ReceiveTimeout(server_.get(), 1250)); EXPECT_LE(1.0, difftime(time(nullptr), start_time)); }
void Pololu::Serial::Interface::receive(std::vector<unsigned char>& data) { if (handle) { size_t i = 0; struct timeval time; fd_set set; int error; while (i < data.size()) { time.tv_sec = 0; time.tv_usec = timeout*1e6; FD_ZERO(&set); FD_SET(handle, &set); error = select(handle+1, &set, NULL, NULL, &time); if (error == 0) throw ReceiveTimeout(address); else if (error < 0) throw ReceiveError(address); ssize_t result; result = ::read(handle, &data[i], data.size()-i); if ((result < 0) && (result != EWOULDBLOCK)) throw ReceiveError(address); else if (result > 0) i += result; } } else throw OperationError(); }
TEST(BlockRecv, ReceiveTimeoutDelay) { usrsocktest_daemon_config = usrsocktest_daemon_defconf; usrsocktest_daemon_config.delay_all_responses = true; ReceiveTimeout(&usrsocktest_daemon_config); }
TEST(BlockRecv, ReceiveTimeout) { usrsocktest_daemon_config = usrsocktest_daemon_defconf; ReceiveTimeout(&usrsocktest_daemon_config); }