mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-10-31 22:25:25 -04:00
tests: add test_usleep and test_sleep functions
The former one was already used in tests, but was private. These functions can be shared across the tests, so make them public. Signed-off-by: Marek Chalupa <mchqwerty@gmail.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
parent
7bf8049c48
commit
6ebe55060e
3 changed files with 44 additions and 15 deletions
|
|
@ -333,21 +333,6 @@ register_reading(struct wl_display *display)
|
||||||
assert(wl_display_flush(display) >= 0);
|
assert(wl_display_flush(display) >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define USEC_TO_NSEC(n) (1000 * (n))
|
|
||||||
|
|
||||||
/* since we are using alarm() and SIGABRT, we can not
|
|
||||||
* use usleep function (see 'man usleep') */
|
|
||||||
static void
|
|
||||||
test_usleep(useconds_t usec)
|
|
||||||
{
|
|
||||||
struct timespec ts = {
|
|
||||||
.tv_sec = 0,
|
|
||||||
.tv_nsec = USEC_TO_NSEC(usec)
|
|
||||||
};
|
|
||||||
|
|
||||||
assert(nanosleep(&ts, NULL) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* create thread that will call prepare+read so that
|
/* create thread that will call prepare+read so that
|
||||||
* it will block */
|
* it will block */
|
||||||
static pthread_t
|
static pthread_t
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#include "test-runner.h"
|
#include "test-runner.h"
|
||||||
|
|
||||||
|
|
@ -62,3 +63,34 @@ exec_fd_leak_check(int nr_expected_fds)
|
||||||
execl(exe, exe, number, (char *)NULL);
|
execl(exe, exe, number, (char *)NULL);
|
||||||
assert(0 && "execing fd leak checker failed");
|
assert(0 && "execing fd leak checker failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define USEC_TO_NSEC(n) (1000 * (n))
|
||||||
|
|
||||||
|
/* our implementation of usleep and sleep functions that are safe to use with
|
||||||
|
* timeouts (timeouts are implemented using alarm(), so it is not safe use
|
||||||
|
* usleep and sleep. See man pages of these functions)
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
test_usleep(useconds_t usec)
|
||||||
|
{
|
||||||
|
struct timespec ts = {
|
||||||
|
.tv_sec = 0,
|
||||||
|
.tv_nsec = USEC_TO_NSEC(usec)
|
||||||
|
};
|
||||||
|
|
||||||
|
assert(nanosleep(&ts, NULL) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* we must write the whole function instead of
|
||||||
|
* wrapping test_usleep, because useconds_t may not
|
||||||
|
* be able to contain such a big number of microseconds */
|
||||||
|
void
|
||||||
|
test_sleep(unsigned int sec)
|
||||||
|
{
|
||||||
|
struct timespec ts = {
|
||||||
|
.tv_sec = sec,
|
||||||
|
.tv_nsec = 0
|
||||||
|
};
|
||||||
|
|
||||||
|
assert(nanosleep(&ts, NULL) == 0);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@
|
||||||
#error "Tests must not be built with NDEBUG defined, they rely on assert()."
|
#error "Tests must not be built with NDEBUG defined, they rely on assert()."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
struct test {
|
struct test {
|
||||||
const char *name;
|
const char *name;
|
||||||
void (*run)(void);
|
void (*run)(void);
|
||||||
|
|
@ -44,4 +46,14 @@ exec_fd_leak_check(int nr_expected_fds); /* never returns */
|
||||||
void
|
void
|
||||||
test_set_timeout(unsigned int);
|
test_set_timeout(unsigned int);
|
||||||
|
|
||||||
|
/* test-runner uses alarm() and SIGALRM, so we can not
|
||||||
|
* use usleep and sleep functions in tests (see 'man usleep'
|
||||||
|
* or 'man sleep', respectively). Following functions are safe
|
||||||
|
* to use in tests */
|
||||||
|
void
|
||||||
|
test_usleep(useconds_t);
|
||||||
|
|
||||||
|
void
|
||||||
|
test_sleep(unsigned int);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue