Improved runtime of unit tests

This commit is contained in:
Armin Novak 2021-06-02 15:46:27 +02:00 committed by akallabeth
parent 2a91afb0cf
commit c5fded2d83
18 changed files with 93 additions and 58 deletions

View File

@ -133,7 +133,7 @@ static BOOL run_encode_decode(UINT16 bpp, BITMAP_INTERLEAVED_CONTEXT* encoder,
PROFILER_CREATE(profiler_comp, get_profiler_name(TRUE, bpp)) PROFILER_CREATE(profiler_comp, get_profiler_name(TRUE, bpp))
PROFILER_CREATE(profiler_decomp, get_profiler_name(FALSE, bpp)) PROFILER_CREATE(profiler_decomp, get_profiler_name(FALSE, bpp))
for (x = 0; x < 500; x++) for (x = 0; x < 50; x++)
{ {
if (!run_encode_decode_single(bpp, encoder, decoder if (!run_encode_decode_single(bpp, encoder, decoder
#if defined(WITH_PROFILER) #if defined(WITH_PROFILER)

View File

@ -5547,9 +5547,9 @@ static BOOL RunTestPlanarSingleColor(BITMAP_PLANAR_CONTEXT* planar, const UINT32
FreeRDPGetColorFormatName(dstFormat)); FreeRDPGetColorFormatName(dstFormat));
fflush(stdout); fflush(stdout);
for (j = 0; j < 100; j += 8) for (j = 0; j < 32; j += 8)
{ {
for (i = 4; i < 64; i += 8) for (i = 4; i < 32; i += 8)
{ {
UINT32 compressedSize; UINT32 compressedSize;
const UINT32 fill = j; const UINT32 fill = j;
@ -5670,7 +5670,7 @@ static BOOL FuzzPlanar(void)
if (!planar) if (!planar)
goto fail; goto fail;
for (x = 0; x < 10000; x++) for (x = 0; x < 100; x++)
{ {
BYTE data[0x10000] = { 0 }; BYTE data[0x10000] = { 0 };
size_t dataSize = 0x10000; size_t dataSize = 0x10000;

View File

@ -6,7 +6,7 @@
static HANDLE s_sync = NULL; static HANDLE s_sync = NULL;
static int runInstance(int argc, char* argv[], freerdp** inst) static int runInstance(int argc, char* argv[], freerdp** inst, DWORD timeout)
{ {
int rc = -1; int rc = -1;
RDP_CLIENT_ENTRY_POINTS clientEntryPoints; RDP_CLIENT_ENTRY_POINTS clientEntryPoints;
@ -25,6 +25,9 @@ static int runInstance(int argc, char* argv[], freerdp** inst)
if (freerdp_client_settings_parse_command_line(context->settings, argc, argv, FALSE) < 0) if (freerdp_client_settings_parse_command_line(context->settings, argc, argv, FALSE) < 0)
goto finish; goto finish;
if (!freerdp_settings_set_uint32(context->settings, FreeRDP_TcpConnectTimeout, timeout))
goto finish;
if (!freerdp_client_load_addins(context->channels, context->settings)) if (!freerdp_client_load_addins(context->channels, context->settings))
goto finish; goto finish;
@ -52,14 +55,15 @@ finish:
static int testTimeout(int port) static int testTimeout(int port)
{ {
const DWORD timeout = 200;
DWORD start, end, diff; DWORD start, end, diff;
char arg1[] = "/v:192.0.2.1:XXXXX"; char arg1[] = "/v:192.0.2.1:XXXXX";
char* argv[] = { "test", "/v:192.0.2.1:XXXXX", NULL }; char* argv[] = { "test", "/v:192.0.2.1:XXXXX" };
int rc; int rc;
_snprintf(arg1, 18, "/v:192.0.2.1:%d", port); _snprintf(arg1, 18, "/v:192.0.2.1:%d", port);
argv[1] = arg1; argv[1] = arg1;
start = GetTickCount(); start = GetTickCount();
rc = runInstance(2, argv, NULL); rc = runInstance(ARRAYSIZE(argv), argv, NULL, timeout);
end = GetTickCount(); end = GetTickCount();
if (rc != 1) if (rc != 1)
@ -67,10 +71,10 @@ static int testTimeout(int port)
diff = end - start; diff = end - start;
if (diff > 16000) if (diff > 4 * timeout)
return -1; return -1;
if (diff < 14000) if (diff < timeout)
return -1; return -1;
printf("%s: Success!\n", __FUNCTION__); printf("%s: Success!\n", __FUNCTION__);
@ -86,12 +90,12 @@ struct testThreadArgs
static DWORD WINAPI testThread(LPVOID arg) static DWORD WINAPI testThread(LPVOID arg)
{ {
char arg1[] = "/v:192.0.2.1:XXXXX"; char arg1[] = "/v:192.0.2.1:XXXXX";
char* argv[] = { "test", "/v:192.0.2.1:XXXXX", NULL }; char* argv[] = { "test", "/v:192.0.2.1:XXXXX" };
int rc; int rc;
struct testThreadArgs* args = arg; struct testThreadArgs* args = arg;
_snprintf(arg1, 18, "/v:192.0.2.1:%d", args->port); _snprintf(arg1, 18, "/v:192.0.2.1:%d", args->port);
argv[1] = arg1; argv[1] = arg1;
rc = runInstance(2, argv, args->arg); rc = runInstance(ARRAYSIZE(argv), argv, args->arg, 5000);
if (rc != 1) if (rc != 1)
ExitThread(-1); ExitThread(-1);
@ -125,7 +129,7 @@ static int testAbort(int port)
} }
WaitForSingleObject(s_sync, INFINITE); WaitForSingleObject(s_sync, INFINITE);
Sleep(1000); /* Wait until freerdp_connect has been called */ Sleep(100); /* Wait until freerdp_connect has been called */
freerdp_abort_connect(instance); freerdp_abort_connect(instance);
status = WaitForSingleObject(instance->context->abortEvent, 0); status = WaitForSingleObject(instance->context->abortEvent, 0);
@ -211,8 +215,8 @@ static int testSuccess(int port)
if (!CreateProcessA(exe, commandLine, NULL, NULL, FALSE, 0, NULL, wpath, &si, &process)) if (!CreateProcessA(exe, commandLine, NULL, NULL, FALSE, 0, NULL, wpath, &si, &process))
goto fail; goto fail;
Sleep(3 * 1000); /* let the server start */ Sleep(600); /* let the server start */
r = runInstance(argc, clientArgs, NULL); r = runInstance(argc, clientArgs, NULL, 5000);
if (!TerminateProcess(process.hProcess, 0)) if (!TerminateProcess(process.hProcess, 0))
goto fail; goto fail;

View File

@ -57,6 +57,7 @@ static void test_dump_data(unsigned char* p, int len, int width, const char* nam
{ {
unsigned char* line = p; unsigned char* line = p;
int i, thisline, offset = 0; int i, thisline, offset = 0;
return; // TODO: Activate this manually if required. Improves test speed
printf("\n%s[%d][%d]:\n", name, len / width, width); printf("\n%s[%d][%d]:\n", name, len / width, width);
while (offset < len) while (offset < len)

View File

@ -263,7 +263,7 @@ int TestPrimitivesColors(int argc, char* argv[])
PIXEL_FORMAT_XBGR32, PIXEL_FORMAT_RGBA32, PIXEL_FORMAT_RGBX32, PIXEL_FORMAT_XBGR32, PIXEL_FORMAT_RGBA32, PIXEL_FORMAT_RGBX32,
PIXEL_FORMAT_BGRA32, PIXEL_FORMAT_BGRX32 }; PIXEL_FORMAT_BGRA32, PIXEL_FORMAT_BGRX32 };
DWORD x; DWORD x;
prim_size_t roi = { 1920, 1080 }; prim_size_t roi = { 1920 / 4, 1080 / 4 };
WINPR_UNUSED(argc); WINPR_UNUSED(argc);
WINPR_UNUSED(argv); WINPR_UNUSED(argv);
prim_test_setup(FALSE); prim_test_setup(FALSE);

View File

@ -1720,6 +1720,8 @@ int TestPrimitivesYCbCr(int argc, char* argv[])
const primitives_t* generics = primitives_get_generic(); const primitives_t* generics = primitives_get_generic();
UINT32 x; UINT32 x;
WINPR_UNUSED(argv);
if (argc < 2) if (argc < 2)
{ {
{ {
@ -1757,13 +1759,13 @@ int TestPrimitivesYCbCr(int argc, char* argv[])
do do
{ {
winpr_RAND((BYTE*)&roi.width, sizeof(roi.width)); winpr_RAND((BYTE*)&roi.width, sizeof(roi.width));
roi.width %= 2048; roi.width %= 2048 / 4;
} while (roi.width < 16); } while (roi.width < 16);
do do
{ {
winpr_RAND((BYTE*)&roi.height, sizeof(roi.height)); winpr_RAND((BYTE*)&roi.height, sizeof(roi.height));
roi.height %= 2048; roi.height %= 2048 / 4;
} while (roi.height < 16); } while (roi.height < 16);
for (x = 0; x < sizeof(formats) / sizeof(formats[0]); x++) for (x = 0; x < sizeof(formats) / sizeof(formats[0]); x++)
@ -1795,7 +1797,7 @@ int TestPrimitivesYCbCr(int argc, char* argv[])
/* Do a performance run with full HD */ /* Do a performance run with full HD */
else else
{ {
prim_size_t roi = { 1928, 1080 }; prim_size_t roi = { 1928 / 8, 1080 / 8 };
for (x = 0; x < sizeof(formats) / sizeof(formats[0]); x++) for (x = 0; x < sizeof(formats) / sizeof(formats[0]); x++)
{ {

View File

@ -127,13 +127,13 @@ int TestPrimitivesYCoCg(int argc, char* argv[])
do do
{ {
winpr_RAND((BYTE*)&w, sizeof(w)); winpr_RAND((BYTE*)&w, sizeof(w));
w %= 2048; w %= 2048 / 4;
} while (w < 16); } while (w < 16);
do do
{ {
winpr_RAND((BYTE*)&h, sizeof(h)); winpr_RAND((BYTE*)&h, sizeof(h));
h %= 2048; h %= 2048 / 4;
} while (h < 16); } while (h < 16);
if (!test_YCoCgRToRGB_8u_AC4R_func(w, h)) if (!test_YCoCgRToRGB_8u_AC4R_func(w, h))
@ -141,8 +141,8 @@ int TestPrimitivesYCoCg(int argc, char* argv[])
} }
} }
/* Test once with full HD */ /* Test once with full HD/4 */
if (!test_YCoCgRToRGB_8u_AC4R_func(1920, 1080)) if (!test_YCoCgRToRGB_8u_AC4R_func(1920 / 4, 1080 / 4))
return 1; return 1;
return 0; return 0;

View File

@ -863,7 +863,7 @@ int TestPrimitivesYUV(int argc, char* argv[])
prim_test_setup(FALSE); prim_test_setup(FALSE);
primitives_t* prims = primitives_get(); primitives_t* prims = primitives_get();
for (x = 0; x < 10; x++) for (x = 0; x < 5; x++)
{ {
prim_size_t roi; prim_size_t roi;

View File

@ -41,7 +41,7 @@ static DWORD WINAPI test_error_thread(LPVOID arg)
do do
{ {
dwErrorSet = (DWORD)rand(); dwErrorSet = (DWORD)abs(rand()) + 1;
SetLastError(dwErrorSet); SetLastError(dwErrorSet);
if ((dwErrorGet = GetLastError()) != dwErrorSet) if ((dwErrorGet = GetLastError()) != dwErrorSet)
{ {
@ -64,6 +64,9 @@ int TestErrorSetLastError(int argc, char* argv[])
HANDLE threads[4]; HANDLE threads[4];
int i; int i;
WINPR_UNUSED(argc);
WINPR_UNUSED(argv);
/* We must initialize WLog here. It will check for settings /* We must initialize WLog here. It will check for settings
* in the environment and if the variables are not set, the last * in the environment and if the variables are not set, the last
* error state is changed... */ * error state is changed... */
@ -97,8 +100,8 @@ int TestErrorSetLastError(int argc, char* argv[])
} }
} }
// let the threads run for at least 2 seconds // let the threads run for at least 0.2 seconds
Sleep(2000); Sleep(200);
bStopTest = TRUE; bStopTest = TRUE;
WaitForSingleObject(threads[0], INFINITE); WaitForSingleObject(threads[0], INFINITE);

View File

@ -11,7 +11,7 @@ static SYNCHRONIZATION_BARRIER gBarrier;
static HANDLE gStartEvent = NULL; static HANDLE gStartEvent = NULL;
static LONG gErrorCount = 0; static LONG gErrorCount = 0;
#define MAX_SLEEP_MS 32 #define MAX_SLEEP_MS 22
struct test_params struct test_params
{ {
@ -181,7 +181,7 @@ int TestSynchBarrier(int argc, char* argv[])
SYSTEM_INFO sysinfo; SYSTEM_INFO sysinfo;
DWORD dwMaxThreads; DWORD dwMaxThreads;
DWORD dwMinThreads; DWORD dwMinThreads;
DWORD dwNumLoops = 200; DWORD dwNumLoops = 10;
WINPR_UNUSED(argc); WINPR_UNUSED(argc);
WINPR_UNUSED(argv); WINPR_UNUSED(argv);

View File

@ -7,7 +7,7 @@
#include <winpr/thread.h> #include <winpr/thread.h>
#include <winpr/interlocked.h> #include <winpr/interlocked.h>
#define TEST_SYNC_CRITICAL_TEST1_RUNTIME_MS 500 #define TEST_SYNC_CRITICAL_TEST1_RUNTIME_MS 50
#define TEST_SYNC_CRITICAL_TEST1_RUNS 4 #define TEST_SYNC_CRITICAL_TEST1_RUNS 4
static CRITICAL_SECTION critical; static CRITICAL_SECTION critical;
@ -86,6 +86,7 @@ static DWORD WINAPI TestSynchCritical_Test1(LPVOID arg)
*/ */
static DWORD WINAPI TestSynchCritical_Test2(LPVOID arg) static DWORD WINAPI TestSynchCritical_Test2(LPVOID arg)
{ {
WINPR_UNUSED(arg);
if (TryEnterCriticalSection(&critical) == TRUE) if (TryEnterCriticalSection(&critical) == TRUE)
{ {
LeaveCriticalSection(&critical); LeaveCriticalSection(&critical);
@ -155,7 +156,7 @@ static DWORD WINAPI TestSynchCritical_Main(LPVOID arg)
InitializeCriticalSection(&critical); InitializeCriticalSection(&critical);
for (i = 0; i < 1000; i++) for (i = 0; i < 10; i++)
{ {
if (critical.RecursionCount != i) if (critical.RecursionCount != i)
{ {
@ -216,7 +217,7 @@ static DWORD WINAPI TestSynchCritical_Main(LPVOID arg)
for (j = 0; j < TEST_SYNC_CRITICAL_TEST1_RUNS; j++) for (j = 0; j < TEST_SYNC_CRITICAL_TEST1_RUNS; j++)
{ {
dwSpinCount = j * 1000; dwSpinCount = j * 100;
InitializeCriticalSectionAndSpinCount(&critical, dwSpinCount); InitializeCriticalSectionAndSpinCount(&critical, dwSpinCount);
gTestValueVulnerable = 0; gTestValueVulnerable = 0;
@ -319,7 +320,7 @@ int TestSynchCritical(int argc, char* argv[])
WINPR_UNUSED(argv); WINPR_UNUSED(argv);
dwDeadLockDetectionTimeMs = dwDeadLockDetectionTimeMs =
6 * TEST_SYNC_CRITICAL_TEST1_RUNTIME_MS * TEST_SYNC_CRITICAL_TEST1_RUNS; 2 * TEST_SYNC_CRITICAL_TEST1_RUNTIME_MS * TEST_SYNC_CRITICAL_TEST1_RUNS;
printf("Deadlock will be assumed after %" PRIu32 " ms.\n", dwDeadLockDetectionTimeMs); printf("Deadlock will be assumed after %" PRIu32 " ms.\n", dwDeadLockDetectionTimeMs);
@ -337,12 +338,12 @@ int TestSynchCritical(int argc, char* argv[])
* Workaround checking the value of bThreadTerminated which is passed in the thread arg * Workaround checking the value of bThreadTerminated which is passed in the thread arg
*/ */
for (i = 0; i < dwDeadLockDetectionTimeMs; i += 100) for (i = 0; i < dwDeadLockDetectionTimeMs; i += 10)
{ {
if (bThreadTerminated) if (bThreadTerminated)
break; break;
Sleep(100); Sleep(10);
} }
if (!bThreadTerminated) if (!bThreadTerminated)

View File

@ -19,8 +19,12 @@ static BOOL CALLBACK TestOnceFunction(PINIT_ONCE once, PVOID param, PVOID* conte
{ {
LONG calls = InterlockedIncrement(pTestOnceFunctionCalls) - 1; LONG calls = InterlockedIncrement(pTestOnceFunctionCalls) - 1;
WINPR_UNUSED(once);
WINPR_UNUSED(param);
WINPR_UNUSED(context);
/* simulate execution time */ /* simulate execution time */
Sleep(100 + rand() % 400); Sleep(30 + rand() % 40);
if (calls < TEST_NUM_FAILURES) if (calls < TEST_NUM_FAILURES)
{ {
@ -40,6 +44,9 @@ static DWORD WINAPI TestThreadFunction(LPVOID lpParam)
{ {
LONG calls; LONG calls;
BOOL ok; BOOL ok;
WINPR_UNUSED(lpParam);
InterlockedIncrement(pTestThreadFunctionCalls); InterlockedIncrement(pTestThreadFunctionCalls);
if (WaitForSingleObject(hStartEvent, INFINITE) != WAIT_OBJECT_0) if (WaitForSingleObject(hStartEvent, INFINITE) != WAIT_OBJECT_0)
{ {
@ -65,6 +72,9 @@ int TestSynchInit(int argc, char* argv[])
DWORD i; DWORD i;
BOOL result = FALSE; BOOL result = FALSE;
WINPR_UNUSED(argc);
WINPR_UNUSED(argv);
pErrors = _aligned_malloc(sizeof(LONG), sizeof(LONG)); pErrors = _aligned_malloc(sizeof(LONG), sizeof(LONG));
pTestThreadFunctionCalls = _aligned_malloc(sizeof(LONG), sizeof(LONG)); pTestThreadFunctionCalls = _aligned_malloc(sizeof(LONG), sizeof(LONG));
pTestOnceFunctionCalls = _aligned_malloc(sizeof(LONG), sizeof(LONG)); pTestOnceFunctionCalls = _aligned_malloc(sizeof(LONG), sizeof(LONG));

View File

@ -9,7 +9,7 @@
static DWORD WINAPI test_thread(LPVOID arg) static DWORD WINAPI test_thread(LPVOID arg)
{ {
long timeout = 300 + (rand() % 1000); long timeout = 30 + (rand() % 100);
WINPR_UNUSED(arg); WINPR_UNUSED(arg);
Sleep(timeout); Sleep(timeout);
ExitThread(0); ExitThread(0);
@ -62,7 +62,7 @@ static BOOL TestWaitForAll(void)
return FALSE; return FALSE;
} }
ret = WaitForMultipleObjects(THREADS, threads, TRUE, 50); ret = WaitForMultipleObjects(THREADS, threads, TRUE, 10);
if (ret != WAIT_TIMEOUT) if (ret != WAIT_TIMEOUT)
{ {
fprintf(stderr, "%s: WaitForMultipleObjects bWaitAll, timeout 50 failed, ret=%d\n", fprintf(stderr, "%s: WaitForMultipleObjects bWaitAll, timeout 50 failed, ret=%d\n",
@ -135,7 +135,7 @@ static BOOL TestWaitOneTimeout(void)
return FALSE; return FALSE;
} }
ret = WaitForMultipleObjects(THREADS, threads, FALSE, 50); ret = WaitForMultipleObjects(THREADS, threads, FALSE, 10);
if (ret != WAIT_TIMEOUT) if (ret != WAIT_TIMEOUT)
{ {
fprintf(stderr, "%s: WaitForMultipleObjects timeout 50 failed, ret=%d\n", __FUNCTION__, fprintf(stderr, "%s: WaitForMultipleObjects timeout 50 failed, ret=%d\n", __FUNCTION__,

View File

@ -5,7 +5,8 @@
static DWORD WINAPI test_thread(LPVOID arg) static DWORD WINAPI test_thread(LPVOID arg)
{ {
Sleep(1000); WINPR_UNUSED(arg);
Sleep(100);
ExitThread(0); ExitThread(0);
return 0; return 0;
} }
@ -14,6 +15,10 @@ int TestSynchThread(int argc, char* argv[])
{ {
DWORD rc; DWORD rc;
HANDLE thread; HANDLE thread;
WINPR_UNUSED(argc);
WINPR_UNUSED(argv);
thread = CreateThread(NULL, 0, test_thread, NULL, 0, NULL); thread = CreateThread(NULL, 0, test_thread, NULL, 0, NULL);
if (!thread) if (!thread)
@ -64,7 +69,7 @@ int TestSynchThread(int argc, char* argv[])
} }
/* TryJoin should now fail. */ /* TryJoin should now fail. */
rc = WaitForSingleObject(thread, 50); rc = WaitForSingleObject(thread, 10);
if (WAIT_TIMEOUT != rc) if (WAIT_TIMEOUT != rc)
{ {

View File

@ -19,13 +19,15 @@ struct apc_data
}; };
typedef struct apc_data APC_DATA; typedef struct apc_data APC_DATA;
VOID CALLBACK TimerRoutine(PVOID lpParam, BOOLEAN TimerOrWaitFired) static VOID CALLBACK TimerRoutine(PVOID lpParam, BOOLEAN TimerOrWaitFired)
{ {
UINT32 TimerTime; UINT32 TimerTime;
APC_DATA* apcData; APC_DATA* apcData;
UINT32 expectedTime; UINT32 expectedTime;
UINT32 CurrentTime = GetTickCount(); UINT32 CurrentTime = GetTickCount();
WINPR_UNUSED(TimerOrWaitFired);
if (!lpParam) if (!lpParam)
return; return;
@ -40,7 +42,7 @@ VOID CALLBACK TimerRoutine(PVOID lpParam, BOOLEAN TimerOrWaitFired)
" ExpectedTime: %" PRIu32 " Discrepancy: %" PRIu32 "\n", " ExpectedTime: %" PRIu32 " Discrepancy: %" PRIu32 "\n",
apcData->TimerId, apcData->FireCount, TimerTime, expectedTime, TimerTime - expectedTime); apcData->TimerId, apcData->FireCount, TimerTime, expectedTime, TimerTime - expectedTime);
Sleep(50); Sleep(11);
if (apcData->FireCount == apcData->MaxFireCount) if (apcData->FireCount == apcData->MaxFireCount)
{ {
@ -55,6 +57,9 @@ int TestSynchTimerQueue(int argc, char* argv[])
HANDLE hTimers[TIMER_COUNT]; HANDLE hTimers[TIMER_COUNT];
APC_DATA apcData[TIMER_COUNT]; APC_DATA apcData[TIMER_COUNT];
WINPR_UNUSED(argc);
WINPR_UNUSED(argv);
hTimerQueue = CreateTimerQueue(); hTimerQueue = CreateTimerQueue();
if (!hTimerQueue) if (!hTimerQueue)
@ -67,8 +72,8 @@ int TestSynchTimerQueue(int argc, char* argv[])
{ {
apcData[index].TimerId = index; apcData[index].TimerId = index;
apcData[index].StartTime = GetTickCount(); apcData[index].StartTime = GetTickCount();
apcData[index].DueTime = (index * 100) + 500; apcData[index].DueTime = (index * 10) + 50;
apcData[index].Period = 1000; apcData[index].Period = 100;
apcData[index].FireCount = 0; apcData[index].FireCount = 0;
apcData[index].MaxFireCount = FIRE_COUNT; apcData[index].MaxFireCount = FIRE_COUNT;
@ -79,9 +84,8 @@ int TestSynchTimerQueue(int argc, char* argv[])
return -1; return -1;
} }
if (!CreateTimerQueueTimer(&hTimers[index], hTimerQueue, (WAITORTIMERCALLBACK)TimerRoutine, if (!CreateTimerQueueTimer(&hTimers[index], hTimerQueue, TimerRoutine, &apcData[index],
&apcData[index], apcData[index].DueTime, apcData[index].Period, apcData[index].DueTime, apcData[index].Period, 0))
0))
{ {
printf("CreateTimerQueueTimer failed (%" PRIu32 ")\n", GetLastError()); printf("CreateTimerQueueTimer failed (%" PRIu32 ")\n", GetLastError());
return -1; return -1;
@ -90,7 +94,7 @@ int TestSynchTimerQueue(int argc, char* argv[])
for (index = 0; index < TIMER_COUNT; index++) for (index = 0; index < TIMER_COUNT; index++)
{ {
if (WaitForSingleObject(apcData[index].CompletionEvent, 20000) != WAIT_OBJECT_0) if (WaitForSingleObject(apcData[index].CompletionEvent, 2000) != WAIT_OBJECT_0)
{ {
printf("Failed to wait for timer queue timer #%" PRIu32 " (%" PRIu32 ")\n", index, printf("Failed to wait for timer queue timer #%" PRIu32 " (%" PRIu32 ")\n", index,
GetLastError()); GetLastError());

View File

@ -19,7 +19,7 @@ int TestSynchWaitableTimer(int argc, char* argv[])
goto out; goto out;
} }
due.QuadPart = -15000000LL; /* 1.5 seconds */ due.QuadPart = -1500000LL; /* 0.15 seconds */
if (!SetWaitableTimer(timer, &due, 0, NULL, NULL, 0)) if (!SetWaitableTimer(timer, &due, 0, NULL, NULL, 0))
{ {
@ -36,18 +36,18 @@ int TestSynchWaitableTimer(int argc, char* argv[])
} }
printf("Timer Signaled\n"); printf("Timer Signaled\n");
status = WaitForSingleObject(timer, 2000); status = WaitForSingleObject(timer, 200);
if (status != WAIT_TIMEOUT) if (status != WAIT_TIMEOUT)
{ {
printf("WaitForSingleObject(timer, 2000) failure: Actual: 0x%08" PRIX32 printf("WaitForSingleObject(timer, 200) failure: Actual: 0x%08" PRIX32
", Expected: 0x%08X\n", ", Expected: 0x%08X\n",
status, WAIT_TIMEOUT); status, WAIT_TIMEOUT);
goto out; goto out;
} }
due.QuadPart = 0; due.QuadPart = 0;
period = 1200; /* 1.2 seconds */ period = 120; /* 0.12 seconds */
if (!SetWaitableTimer(timer, &due, period, NULL, NULL, 0)) if (!SetWaitableTimer(timer, &due, period, NULL, NULL, 0))
{ {

View File

@ -54,15 +54,15 @@ int TestSynchWaitableTimerAPC(int argc, char* argv[])
if (!hTimer) if (!hTimer)
goto cleanup; goto cleanup;
due.QuadPart = -1000 * 1000LL; /* 1 seconds */ due.QuadPart = -1000 * 100LL; /* 0.1 seconds */
apcData.StartTime = GetTickCount(); apcData.StartTime = GetTickCount();
bSuccess = SetWaitableTimer(hTimer, &due, 100, TimerAPCProc, &apcData, FALSE); bSuccess = SetWaitableTimer(hTimer, &due, 10, TimerAPCProc, &apcData, FALSE);
if (!bSuccess) if (!bSuccess)
goto cleanup; goto cleanup;
/* nothing shall happen after 1.2 second, because thread is not in alertable state */ /* nothing shall happen after 0.12 second, because thread is not in alertable state */
rc = WaitForSingleObject(g_Event, 1200); rc = WaitForSingleObject(g_Event, 120);
if (rc != WAIT_TIMEOUT) if (rc != WAIT_TIMEOUT)
goto cleanup; goto cleanup;

View File

@ -6,6 +6,8 @@
static DWORD WINAPI thread_func(LPVOID arg) static DWORD WINAPI thread_func(LPVOID arg)
{ {
WINPR_UNUSED(arg);
/* exists of the thread the quickest as possible */ /* exists of the thread the quickest as possible */
ExitThread(0); ExitThread(0);
return 0; return 0;
@ -17,9 +19,12 @@ int TestThreadExitThread(int argc, char* argv[])
DWORD waitResult; DWORD waitResult;
int i; int i;
WINPR_UNUSED(argc);
WINPR_UNUSED(argv);
/* FIXME: create some noise to better guaranty the test validity and /* FIXME: create some noise to better guaranty the test validity and
* decrease the number of loops */ * decrease the number of loops */
for (i = 0; i < 50000; i++) for (i = 0; i < 5000; i++)
{ {
thread = CreateThread(NULL, 0, thread_func, NULL, 0, NULL); thread = CreateThread(NULL, 0, thread_func, NULL, 0, NULL);
@ -29,7 +34,7 @@ int TestThreadExitThread(int argc, char* argv[])
return -1; return -1;
} }
waitResult = WaitForSingleObject(thread, 1000); waitResult = WaitForSingleObject(thread, 100);
if (waitResult != WAIT_OBJECT_0) if (waitResult != WAIT_OBJECT_0)
{ {
/* When the thread exits before the internal thread_list /* When the thread exits before the internal thread_list