From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Jackson Subject: [PATCH 7/9] libxl: event tests: Provide miniature poll machinery Date: Thu, 9 Jul 2015 18:47:55 +0100 Message-ID: <1436464077-2752-8-git-send-email-ian.jackson@eu.citrix.com> References: <1436464077-2752-1-git-send-email-ian.jackson@eu.citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1436464077-2752-1-git-send-email-ian.jackson@eu.citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xensource.com Cc: Wei Liu , Ian Jackson , Ian Campbell List-Id: xen-devel@lists.xenproject.org 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 --- 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 #include #include +#include +#include +#include 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