From 49e580122a1d280b920210ef2d47b1fbacbd1b16 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Tue, 27 Nov 2018 19:43:08 -0600 Subject: [PATCH] ntoskrnl.exe/tests: Add tests for waiting on timers. Signed-off-by: Zebediah Figura Signed-off-by: Alexandre Julliard --- 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 82948823c54..17e54cd508a 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)