Module: wine Branch: master Commit: 49e580122a1d280b920210ef2d47b1fbacbd1b16 URL: https://source.winehq.org/git/wine.git/?a=commit;h=49e580122a1d280b920210ef2...
Author: Zebediah Figura z.figura12@gmail.com Date: Tue Nov 27 19:43:08 2018 -0600
ntoskrnl.exe/tests: Add tests for waiting on timers.
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntoskrnl.exe/tests/driver.c | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+)
diff --git a/dlls/ntoskrnl.exe/tests/driver.c b/dlls/ntoskrnl.exe/tests/driver.c index 8294882..17e54cd 100644 --- a/dlls/ntoskrnl.exe/tests/driver.c +++ b/dlls/ntoskrnl.exe/tests/driver.c @@ -260,6 +260,8 @@ static void test_sync(void) { KSEMAPHORE semaphore, semaphore2; KEVENT manual_event, auto_event; + KTIMER timer; + LARGE_INTEGER timeout; void *objs[2]; NTSTATUS ret; int i; @@ -444,6 +446,55 @@ static void test_sync(void) ok(ret == 0, "got %#x\n", ret);
run_thread(mutex_thread, (void *)0); + + /* test timers */ + KeInitializeTimerEx(&timer, NotificationTimer); + + timeout.QuadPart = -100; + KeSetTimerEx(&timer, timeout, 0, NULL); + + ret = wait_single(&timer, 0); + ok(ret == WAIT_TIMEOUT, "got %#x\n", ret); + + ret = wait_single(&timer, -200); + ok(ret == 0, "got %#x\n", ret); + + ret = wait_single(&timer, 0); + ok(ret == 0, "got %#x\n", ret); + + KeCancelTimer(&timer); + KeInitializeTimerEx(&timer, SynchronizationTimer); + + KeSetTimerEx(&timer, timeout, 0, NULL); + + ret = wait_single(&timer, 0); + ok(ret == WAIT_TIMEOUT, "got %#x\n", ret); + + ret = wait_single(&timer, -200); + ok(ret == 0, "got %#x\n", ret); + + ret = wait_single(&timer, 0); + ok(ret == WAIT_TIMEOUT, "got %#x\n", ret); + + KeCancelTimer(&timer); + KeSetTimerEx(&timer, timeout, 10, NULL); + + ret = wait_single(&timer, 0); + ok(ret == WAIT_TIMEOUT, "got %#x\n", ret); + + ret = wait_single(&timer, -200); + ok(ret == 0, "got %#x\n", ret); + + ret = wait_single(&timer, 0); + ok(ret == WAIT_TIMEOUT, "got %#x\n", ret); + + ret = wait_single(&timer, -20 * 10000); + ok(ret == 0, "got %#x\n", ret); + + ret = wait_single(&timer, -20 * 10000); + ok(ret == 0, "got %#x\n", ret); + + KeCancelTimer(&timer); }
static NTSTATUS main_test(IRP *irp, IO_STACK_LOCATION *stack, ULONG_PTR *info)