[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 7/9] libxl: event tests: Provide miniature poll machinery
This allows a test case to have a poll-based event loop with exact control of the sequence of operations. Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> --- tools/libxl/test_common.c | 44 +++++++++++++++++++++++++++++++++++++++++++- tools/libxl/test_common.h | 15 +++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/tools/libxl/test_common.c b/tools/libxl/test_common.c index 83b94eb..c6bbbab 100644 --- a/tools/libxl/test_common.c +++ b/tools/libxl/test_common.c @@ -12,4 +12,46 @@ void test_common_setup(int level) int rc = libxl_ctx_alloc(&ctx, LIBXL_VERSION, 0, logger); assert(!rc); -} +} + +struct timeval now; + +void test_common_get_now(void) +{ + int r = gettimeofday(&now, 0); assert(!r); +} + +int poll_nfds, poll_nfds_allocd; +struct pollfd *poll_fds; +int poll_timeout; + +void test_common_beforepoll(void) +{ + for (;;) { + test_common_get_now(); + + poll_timeout = -1; + poll_nfds = poll_nfds_allocd; + int rc = libxl_osevent_beforepoll(ctx, &poll_nfds, poll_fds, + &poll_timeout, now); + if (!rc) return; + assert(rc == ERROR_BUFFERFULL); + + assert(poll_nfds > poll_nfds_allocd); + poll_fds = realloc(poll_fds, poll_nfds * sizeof(poll_fds[0])); + assert(poll_fds); + poll_nfds_allocd = poll_nfds; + } +} + +void test_common_dopoll(void) { + errno = 0; + int r = poll(poll_fds, poll_nfds, poll_timeout); + fprintf(stderr, "poll: r=%d errno=%s\n", r, strerror(errno)); +} + +void test_common_afterpoll(void) +{ + test_common_get_now(); + libxl_osevent_afterpoll(ctx, poll_nfds, poll_fds, now); +} diff --git a/tools/libxl/test_common.h b/tools/libxl/test_common.h index 8b2471e..10c7166 100644 --- a/tools/libxl/test_common.h +++ b/tools/libxl/test_common.h @@ -6,9 +6,24 @@ #include <assert.h> #include <stdlib.h> #include <unistd.h> +#include <fcntl.h> +#include <sys/stat.h> +#include <sys/types.h> void test_common_setup(int level); extern libxl_ctx *ctx; +void test_common_get_now(void); + +extern struct timeval now; + +void test_common_beforepoll(void); +void test_common_dopoll(void); +void test_common_afterpoll(void); + +extern int poll_nfds, poll_nfds_allocd; +extern struct pollfd *poll_fds; +extern int poll_timeout; + #endif /*TEST_COMMON_H*/ -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |