Commit e2e58817 authored by Nick Mathewson's avatar Nick Mathewson 🎨
Browse files

New testing-only tor_sleep_msec function

In the unit tests I want to loop with a delay, but I want less than
a 1 second delay.  This, sadly, requires compatibility code.
parent 34f8723d
......@@ -355,6 +355,7 @@ AC_CHECK_FUNCS(
sysconf \
sysctl \
uname \
usleep \
vasprintf \
_vscprintf
)
......@@ -885,6 +886,7 @@ AC_CHECK_HEADERS(
sys/param.h \
sys/prctl.h \
sys/resource.h \
sys/select.h \
sys/socket.h \
sys/sysctl.h \
sys/syslimits.h \
......
......@@ -114,6 +114,12 @@
/* Only use the linux prctl; the IRIX prctl is totally different */
#include <sys/prctl.h>
#endif
#ifdef TOR_UNIT_TESTS
#if !defined(HAVE_USLEEP) && defined(HAVE_SYS_SELECT_H)
/* as fallback implementation for tor_sleep_msec */
#include <sys/select.h>
#endif
#endif
#include "torlog.h"
#include "util.h"
......@@ -3450,3 +3456,23 @@ get_total_system_memory(size_t *mem_out)
return -1;
}
#ifdef TOR_UNIT_TESTS
/** Delay for <b>msec</b> milliseconds. Only used in tests. */
void
tor_sleep_msec(int msec)
{
#ifdef _WIN32
Sleep(msec);
#elif defined(HAVE_USLEEP)
sleep(msec / 1000);
/* Some usleep()s hate sleeping more than 1 sec */
usleep((msec % 1000) * 1000);
#elif defined(HAVE_SYS_SELECT_H)
struct timeval tv = { msec / 1000, (msec % 1000) * 1000};
select(0, NULL, NULL, NULL, &tv);
#else
sleep(CEIL_DIV(msec, 1000));
#endif
}
#endif
......@@ -744,6 +744,10 @@ char *format_win32_error(DWORD err);
#endif
#ifdef TOR_UNIT_TESTS
void tor_sleep_msec(int msec);
#endif
#ifdef COMPAT_PRIVATE
#if !defined(HAVE_SOCKETPAIR) || defined(_WIN32) || defined(TOR_UNIT_TESTS)
#define NEED_ERSATZ_SOCKETPAIR
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment