mirror of
https://github.com/reactos/reactos.git
synced 2025-01-03 21:09:19 +00:00
[KERNEL32_APITEST]
Add a test for CORE-10188 (which was fixed by Thomas in r69236). It is based on Nikita Pechenkin's patch with a few modifications by me to avoid race condition on start (and avoid flappy test) and to match more closely our coding style ROSTESTS-190 #resolve #comment Committed in r69351. Thanks! svn path=/trunk/; revision=69351
This commit is contained in:
parent
c83ceb5eaf
commit
2f233ce1f9
3 changed files with 87 additions and 1 deletions
|
@ -13,7 +13,8 @@ list(APPEND SOURCE
|
|||
SetUnhandledExceptionFilter.c
|
||||
TerminateProcess.c
|
||||
TunnelCache.c
|
||||
testlist.c)
|
||||
testlist.c
|
||||
Mailslot.c)
|
||||
|
||||
add_executable(kernel32_apitest ${SOURCE})
|
||||
target_link_libraries(kernel32_apitest wine ${PSEH_LIB})
|
||||
|
|
83
rostests/apitests/kernel32/Mailslot.c
Normal file
83
rostests/apitests/kernel32/Mailslot.c
Normal file
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
* PROJECT: ReactOS api tests
|
||||
* LICENSE: GNU GPLv2 only as published by the Free Software Foundation
|
||||
* PURPOSE: Test for mailslot (CORE-10188)
|
||||
* PROGRAMMER: Nikita Pechenkin (n.pechenkin@mail.ru)
|
||||
*/
|
||||
|
||||
#include <apitest.h>
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#include <stdio.h>
|
||||
|
||||
#define LMS TEXT("\\\\.\\mailslot\\rostest_slot")
|
||||
#define MSG (0x50DA)
|
||||
|
||||
static DWORD dInMsg = MSG;
|
||||
static DWORD dOutMsg = 0x0;
|
||||
|
||||
DWORD
|
||||
WINAPI
|
||||
MailSlotWriter(
|
||||
LPVOID lpParam)
|
||||
{
|
||||
DWORD cbWritten;
|
||||
HANDLE hMailslot;
|
||||
|
||||
hMailslot = CreateFile(LMS, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
ok(hMailslot != INVALID_HANDLE_VALUE, "CreateFile failed, results might not be accurate\n");
|
||||
if (hMailslot != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
Sleep(1000);
|
||||
ok(WriteFile(hMailslot, &dInMsg, sizeof(dInMsg), &cbWritten, (LPOVERLAPPED) NULL), "Slot write failed\n");
|
||||
CloseHandle(hMailslot);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD
|
||||
WINAPI
|
||||
MailSlotReader(
|
||||
LPVOID lpParam)
|
||||
{
|
||||
HANDLE hMailslotClient;
|
||||
DWORD cbRead;
|
||||
HANDLE hThread;
|
||||
|
||||
hMailslotClient = CreateMailslot(LMS, 0L, MAILSLOT_WAIT_FOREVER, (LPSECURITY_ATTRIBUTES) NULL);
|
||||
ok(hMailslotClient != INVALID_HANDLE_VALUE, "CreateMailslot failed\n");
|
||||
if (hMailslotClient != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
hThread = CreateThread(NULL,0, MailSlotWriter, NULL, 0, NULL);
|
||||
ok(hThread != INVALID_HANDLE_VALUE, "CreateThread failed\n");
|
||||
if (hThread != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
ok(ReadFile(hMailslotClient, &dOutMsg, sizeof(dOutMsg), &cbRead, NULL), "Slot read failed\n");
|
||||
WaitForSingleObject(hThread, INFINITE);
|
||||
CloseHandle(hThread);
|
||||
}
|
||||
CloseHandle(hMailslotClient);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
VOID
|
||||
StartTestCORE10188(VOID)
|
||||
{
|
||||
HANDLE hThread;
|
||||
|
||||
hThread = CreateThread(NULL,0, MailSlotReader, NULL, 0, NULL);
|
||||
ok(hThread != INVALID_HANDLE_VALUE, "CreateThread failed\n");
|
||||
if (hThread != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
WaitForSingleObject(hThread, INFINITE);
|
||||
CloseHandle(hThread);
|
||||
}
|
||||
ok(dInMsg == dOutMsg, "Transfer data failed\n");
|
||||
}
|
||||
|
||||
START_TEST(Mailslot)
|
||||
{
|
||||
StartTestCORE10188();
|
||||
}
|
|
@ -10,6 +10,7 @@ extern void func_GetDriveType(void);
|
|||
extern void func_GetModuleFileName(void);
|
||||
extern void func_interlck(void);
|
||||
extern void func_lstrcpynW(void);
|
||||
extern void func_Mailslot(void);
|
||||
extern void func_MultiByteToWideChar(void);
|
||||
extern void func_PrivMoveFileIdentityW(void);
|
||||
extern void func_SetCurrentDirectory(void);
|
||||
|
@ -26,6 +27,7 @@ const struct test winetest_testlist[] =
|
|||
{ "GetModuleFileName", func_GetModuleFileName },
|
||||
{ "interlck", func_interlck },
|
||||
{ "lstrcpynW", func_lstrcpynW },
|
||||
{ "Mailslot", func_Mailslot },
|
||||
{ "MultiByteToWideChar", func_MultiByteToWideChar },
|
||||
{ "PrivMoveFileIdentityW", func_PrivMoveFileIdentityW },
|
||||
{ "SetCurrentDirectory", func_SetCurrentDirectory },
|
||||
|
|
Loading…
Reference in a new issue