summaryrefslogtreecommitdiffstats
path: root/test/asynctest.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/asynctest.c')
-rw-r--r--test/asynctest.c139
1 files changed, 87 insertions, 52 deletions
diff --git a/test/asynctest.c b/test/asynctest.c
index ddff70cde6..bfdf441e7c 100644
--- a/test/asynctest.c
+++ b/test/asynctest.c
@@ -103,12 +103,24 @@ static int save_current(void *args)
return 1;
}
-static int wake(void *args)
+#define MAGIC_WAIT_FD ((OSSL_ASYNC_FD)99)
+static int waitfd(void *args)
{
+ ASYNC_JOB *job;
+ ASYNC_WAIT_CTX *waitctx;
ASYNC_pause_job();
- ASYNC_wake(ASYNC_get_current_job());
+ job = ASYNC_get_current_job();
+ if (job == NULL)
+ return 0;
+ waitctx = ASYNC_get_wait_ctx(job);
+ if (waitctx == NULL)
+ return 0;
+ if(!ASYNC_WAIT_CTX_set_wait_fd(waitctx, waitctx, MAGIC_WAIT_FD, NULL, NULL))
+ return 0;
ASYNC_pause_job();
- ASYNC_clear_wake(ASYNC_get_current_job());
+
+ if (!ASYNC_WAIT_CTX_clear_fd(waitctx, waitctx))
+ return 0;
return 1;
}
@@ -127,30 +139,34 @@ static int test_ASYNC_init_thread()
{
ASYNC_JOB *job1 = NULL, *job2 = NULL, *job3 = NULL;
int funcret1, funcret2, funcret3;
+ ASYNC_WAIT_CTX *waitctx;
if ( !ASYNC_init_thread(2, 0)
- || ASYNC_start_job(&job1, &funcret1, only_pause, NULL, 0)
+ || (waitctx = ASYNC_WAIT_CTX_new()) == NULL
+ || ASYNC_start_job(&job1, waitctx, &funcret1, only_pause, NULL, 0)
!= ASYNC_PAUSE
- || ASYNC_start_job(&job2, &funcret2, only_pause, NULL, 0)
+ || ASYNC_start_job(&job2, waitctx, &funcret2, only_pause, NULL, 0)
!= ASYNC_PAUSE
- || ASYNC_start_job(&job3, &funcret3, only_pause, NULL, 0)
+ || ASYNC_start_job(&job3, waitctx, &funcret3, only_pause, NULL, 0)
!= ASYNC_NO_JOBS
- || ASYNC_start_job(&job1, &funcret1, only_pause, NULL, 0)
+ || ASYNC_start_job(&job1, waitctx, &funcret1, only_pause, NULL, 0)
!= ASYNC_FINISH
- || ASYNC_start_job(&job3, &funcret3, only_pause, NULL, 0)
+ || ASYNC_start_job(&job3, waitctx, &funcret3, only_pause, NULL, 0)
!= ASYNC_PAUSE
- || ASYNC_start_job(&job2, &funcret2, only_pause, NULL, 0)
+ || ASYNC_start_job(&job2, waitctx, &funcret2, only_pause, NULL, 0)
!= ASYNC_FINISH
- || ASYNC_start_job(&job3, &funcret3, only_pause, NULL, 0)
+ || ASYNC_start_job(&job3, waitctx, &funcret3, only_pause, NULL, 0)
!= ASYNC_FINISH
|| funcret1 != 1
|| funcret2 != 1
|| funcret3 != 1) {
fprintf(stderr, "test_ASYNC_init_thread() failed\n");
+ ASYNC_WAIT_CTX_free(waitctx);
ASYNC_cleanup_thread();
return 0;
}
+ ASYNC_WAIT_CTX_free(waitctx);
ASYNC_cleanup_thread();
return 1;
}
@@ -159,20 +175,26 @@ static int test_ASYNC_start_job()
{
ASYNC_JOB *job = NULL;
int funcret;
+ ASYNC_WAIT_CTX *waitctx;
ctr = 0;
if ( !ASYNC_init_thread(1, 0)
- || ASYNC_start_job(&job, &funcret, add_two, NULL, 0) != ASYNC_PAUSE
+ || (waitctx = ASYNC_WAIT_CTX_new()) == NULL
+ || ASYNC_start_job(&job, waitctx, &funcret, add_two, NULL, 0)
+ != ASYNC_PAUSE
|| ctr != 1
- || ASYNC_start_job(&job, &funcret, add_two, NULL, 0) != ASYNC_FINISH
+ || ASYNC_start_job(&job, waitctx, &funcret, add_two, NULL, 0)
+ != ASYNC_FINISH
|| ctr != 2
|| funcret != 2) {
fprintf(stderr, "test_ASYNC_start_job() failed\n");
+ ASYNC_WAIT_CTX_free(waitctx);
ASYNC_cleanup_thread();
return 0;
}
+ ASYNC_WAIT_CTX_free(waitctx);
ASYNC_cleanup_thread();
return 1;
}
@@ -181,74 +203,83 @@ static int test_ASYNC_get_current_job()
{
ASYNC_JOB *job = NULL;
int funcret;
+ ASYNC_WAIT_CTX *waitctx;
currjob = NULL;
if ( !ASYNC_init_thread(1, 0)
- || ASYNC_start_job(&job, &funcret, save_current, NULL, 0)
+ || (waitctx = ASYNC_WAIT_CTX_new()) == NULL
+ || ASYNC_start_job(&job, waitctx, &funcret, save_current, NULL, 0)
!= ASYNC_PAUSE
|| currjob != job
- || ASYNC_start_job(&job, &funcret, save_current, NULL, 0)
+ || ASYNC_start_job(&job, waitctx, &funcret, save_current, NULL, 0)
!= ASYNC_FINISH
|| funcret != 1) {
fprintf(stderr, "test_ASYNC_get_current_job() failed\n");
+ ASYNC_WAIT_CTX_free(waitctx);
ASYNC_cleanup_thread();
return 0;
}
+ ASYNC_WAIT_CTX_free(waitctx);
ASYNC_cleanup_thread();
return 1;
}
-static int hasdata(OSSL_ASYNC_FD fd)
-{
-#ifdef ASYNC_POSIX
- fd_set checkfds;
- struct timeval tv;
- FD_ZERO(&checkfds);
- openssl_fdset(fd, &checkfds);
- memset(&tv, 0, sizeof tv);
- if (select(fd + 1, (void *)&checkfds, NULL, NULL, &tv) < 0)
- return -1;
- if (FD_ISSET(fd, &checkfds))
- return 1;
- return 0;
-#else
- DWORD avail = 0;
-
- if (PeekNamedPipe(fd, NULL, 0, NULL, &avail, NULL) && avail > 0)
- return 1;
-
- return 0;
-#endif
-}
-
-static int test_ASYNC_get_wait_fd()
+static int test_ASYNC_WAIT_CTX_get_all_fds()
{
ASYNC_JOB *job = NULL;
int funcret;
- OSSL_ASYNC_FD fd;
+ ASYNC_WAIT_CTX *waitctx;
+ OSSL_ASYNC_FD fd = OSSL_BAD_ASYNC_FD, delfd = OSSL_BAD_ASYNC_FD;
+ size_t numfds, numdelfds;
if ( !ASYNC_init_thread(1, 0)
- || ASYNC_start_job(&job, &funcret, wake, NULL, 0)
+ || (waitctx = ASYNC_WAIT_CTX_new()) == NULL
+ /* On first run we're not expecting any wait fds */
+ || ASYNC_start_job(&job, waitctx, &funcret, waitfd, NULL, 0)
!= ASYNC_PAUSE
- || (fd = ASYNC_get_wait_fd(job)) < 0
- || hasdata(fd) != 0
- || ASYNC_start_job(&job, &funcret, save_current, NULL, 0)
+ || !ASYNC_WAIT_CTX_get_all_fds(waitctx, NULL, &numfds)
+ || numfds != 0
+ || !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, NULL,
+ &numdelfds)
+ || numfds != 0
+ || numdelfds != 0
+ /* On second run we're expecting one added fd */
+ || ASYNC_start_job(&job, waitctx, &funcret, waitfd, NULL, 0)
!= ASYNC_PAUSE
- || hasdata(fd) != 1
- || (ASYNC_clear_wake(job), 0)
- || hasdata(fd) != 0
- || (ASYNC_wake(job), 0)
- || hasdata(fd) != 1
- || ASYNC_start_job(&job, &funcret, save_current, NULL, 0)
+ || !ASYNC_WAIT_CTX_get_all_fds(waitctx, NULL, &numfds)
+ || numfds != 1
+ || !ASYNC_WAIT_CTX_get_all_fds(waitctx, &fd, &numfds)
+ || fd != MAGIC_WAIT_FD
+ || (fd = OSSL_BAD_ASYNC_FD, 0) /* Assign to something else */
+ || !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, NULL,
+ &numdelfds)
+ || numfds != 1
+ || numdelfds != 0
+ || !ASYNC_WAIT_CTX_get_changed_fds(waitctx, &fd, &numfds, NULL,
+ &numdelfds)
+ || fd != MAGIC_WAIT_FD
+ /* On final run we expect one deleted fd */
+ || ASYNC_start_job(&job, waitctx, &funcret, waitfd, NULL, 0)
!= ASYNC_FINISH
+ || !ASYNC_WAIT_CTX_get_all_fds(waitctx, NULL, &numfds)
+ || numfds != 0
+ || !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, NULL,
+ &numdelfds)
+ || numfds != 0
+ || numdelfds != 1
+ || !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, &delfd,
+ &numdelfds)
+ || delfd != MAGIC_WAIT_FD
|| funcret != 1) {
fprintf(stderr, "test_ASYNC_get_wait_fd() failed\n");
+ ASYNC_WAIT_CTX_free(waitctx);
ASYNC_cleanup_thread();
return 0;
}
+ ASYNC_WAIT_CTX_free(waitctx);
ASYNC_cleanup_thread();
return 1;
}
@@ -257,18 +288,22 @@ static int test_ASYNC_block_pause()
{
ASYNC_JOB *job = NULL;
int funcret;
+ ASYNC_WAIT_CTX *waitctx;
if ( !ASYNC_init_thread(1, 0)
- || ASYNC_start_job(&job, &funcret, blockpause, NULL, 0)
+ || (waitctx = ASYNC_WAIT_CTX_new()) == NULL
+ || ASYNC_start_job(&job, waitctx, &funcret, blockpause, NULL, 0)
!= ASYNC_PAUSE
- || ASYNC_start_job(&job, &funcret, blockpause, NULL, 0)
+ || ASYNC_start_job(&job, waitctx, &funcret, blockpause, NULL, 0)
!= ASYNC_FINISH
|| funcret != 1) {
fprintf(stderr, "test_ASYNC_block_pause() failed\n");
+ ASYNC_WAIT_CTX_free(waitctx);
ASYNC_cleanup_thread();
return 0;
}
+ ASYNC_WAIT_CTX_free(waitctx);
ASYNC_cleanup_thread();
return 1;
}
@@ -287,7 +322,7 @@ int main(int argc, char **argv)
if ( !test_ASYNC_init_thread()
|| !test_ASYNC_start_job()
|| !test_ASYNC_get_current_job()
- || !test_ASYNC_get_wait_fd()
+ || !test_ASYNC_WAIT_CTX_get_all_fds()
|| !test_ASYNC_block_pause()) {
return 1;
}