rpcrt4/tests: Add I_RpcBindingInqLocalClientPID() tests.
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
This commit is contained in:
parent
e613992cee
commit
056dbb04de
2 changed files with 101 additions and 7 deletions
|
@ -40,10 +40,11 @@
|
|||
|
||||
#define INT_CODE 4198
|
||||
|
||||
static const char *progname;
|
||||
static const char *progname, *client_test_name;
|
||||
static BOOL old_windows_version;
|
||||
|
||||
static HANDLE stop_event, stop_wait_event;
|
||||
static PROCESS_INFORMATION client_info;
|
||||
|
||||
static void (WINAPI *pNDRSContextMarshall2)(RPC_BINDING_HANDLE, NDR_SCONTEXT, void*, NDR_RUNDOWN, void*, ULONG);
|
||||
static NDR_SCONTEXT (WINAPI *pNDRSContextUnmarshall2)(RPC_BINDING_HANDLE, void*, ULONG, void*, ULONG);
|
||||
|
@ -147,6 +148,7 @@ static int (__cdecl *sum_array_ptr)(int (*a)[2]);
|
|||
static ctx_handle_t (__cdecl *get_handle)(void);
|
||||
static void (__cdecl *get_handle_by_ptr)(ctx_handle_t *r);
|
||||
static void (__cdecl *test_handle)(ctx_handle_t ctx_handle);
|
||||
static void (__cdecl *test_I_RpcBindingInqLocalClientPID)(unsigned int protseq, RPC_BINDING_HANDLE binding);
|
||||
|
||||
#define SERVER_FUNCTIONS \
|
||||
X(int_return) \
|
||||
|
@ -240,7 +242,8 @@ static void (__cdecl *test_handle)(ctx_handle_t ctx_handle);
|
|||
X(sum_array_ptr) \
|
||||
X(get_handle) \
|
||||
X(get_handle_by_ptr) \
|
||||
X(test_handle)
|
||||
X(test_handle) \
|
||||
X(test_I_RpcBindingInqLocalClientPID)
|
||||
|
||||
/* type check statements generated in header file */
|
||||
fnprintf *p_printf = printf;
|
||||
|
@ -1122,6 +1125,88 @@ void __cdecl s_test_handle(ctx_handle_t ctx_handle)
|
|||
ok(ctx_handle == (ctx_handle_t)0xdeadbeef, "Unexpected ctx_handle %p\n", ctx_handle);
|
||||
}
|
||||
|
||||
struct test_thread_params
|
||||
{
|
||||
unsigned int protseq;
|
||||
RPC_BINDING_HANDLE binding;
|
||||
};
|
||||
|
||||
static DWORD CALLBACK test_I_RpcBindingInqLocalClientPID_thread_func(void *args)
|
||||
{
|
||||
struct test_thread_params *params = (struct test_thread_params *)args;
|
||||
RPC_STATUS status;
|
||||
ULONG pid;
|
||||
|
||||
winetest_push_context("%s", client_test_name);
|
||||
|
||||
status = I_RpcBindingInqLocalClientPID(NULL, &pid);
|
||||
todo_wine
|
||||
ok(status == RPC_S_NO_CALL_ACTIVE, "Got unexpected %ld.\n", status);
|
||||
|
||||
/* Other protocol sequences throw exceptions */
|
||||
if (params->protseq == RPC_PROTSEQ_LRPC)
|
||||
{
|
||||
status = I_RpcBindingInqLocalClientPID(params->binding, &pid);
|
||||
todo_wine
|
||||
ok(status == RPC_S_OK, "Got unexpected %ld.\n", status);
|
||||
todo_wine
|
||||
ok(pid == client_info.dwProcessId, "Got unexpected pid.\n");
|
||||
}
|
||||
|
||||
winetest_pop_context();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void __cdecl s_test_I_RpcBindingInqLocalClientPID(unsigned int protseq, RPC_BINDING_HANDLE binding)
|
||||
{
|
||||
struct test_thread_params params;
|
||||
RPC_STATUS status;
|
||||
HANDLE thread;
|
||||
ULONG pid;
|
||||
|
||||
winetest_push_context("%s", client_test_name);
|
||||
|
||||
/* Crash on Windows */
|
||||
if (0)
|
||||
{
|
||||
status = I_RpcBindingInqLocalClientPID(NULL, NULL);
|
||||
ok(status == RPC_S_INVALID_ARG, "Got unexpected %ld.\n", status);
|
||||
|
||||
status = I_RpcBindingInqLocalClientPID(binding, NULL);
|
||||
ok(status == RPC_S_INVALID_ARG, "Got unexpected %ld.\n", status);
|
||||
}
|
||||
|
||||
status = I_RpcBindingInqLocalClientPID(NULL, &pid);
|
||||
if (protseq == RPC_PROTSEQ_LRPC)
|
||||
{
|
||||
todo_wine
|
||||
ok(status == RPC_S_OK, "Got unexpected %ld.\n", status);
|
||||
todo_wine
|
||||
ok(pid == client_info.dwProcessId, "Got unexpected pid.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
ok(status == RPC_S_INVALID_BINDING, "Got unexpected %ld.\n", status);
|
||||
}
|
||||
|
||||
if (protseq == RPC_PROTSEQ_LRPC) /* Other protocol sequences throw exceptions */
|
||||
{
|
||||
status = I_RpcBindingInqLocalClientPID(binding, &pid);
|
||||
todo_wine
|
||||
ok(status == RPC_S_OK, "Got unexpected %ld.\n", status);
|
||||
todo_wine
|
||||
ok(pid == client_info.dwProcessId, "Got unexpected pid.\n");
|
||||
}
|
||||
|
||||
params.protseq = protseq;
|
||||
params.binding = binding;
|
||||
thread = CreateThread(NULL, 0, test_I_RpcBindingInqLocalClientPID_thread_func, ¶ms, 0, NULL);
|
||||
WaitForSingleObject(thread, INFINITE);
|
||||
CloseHandle(thread);
|
||||
|
||||
winetest_pop_context();
|
||||
}
|
||||
|
||||
void __RPC_USER ctx_handle_t_rundown(ctx_handle_t ctx_handle)
|
||||
{
|
||||
ok(ctx_handle == (ctx_handle_t)0xdeadbeef, "Unexpected ctx_handle %p\n", ctx_handle);
|
||||
|
@ -1137,17 +1222,17 @@ static void
|
|||
run_client(const char *test)
|
||||
{
|
||||
char cmdline[MAX_PATH];
|
||||
PROCESS_INFORMATION info;
|
||||
STARTUPINFOA startup;
|
||||
|
||||
memset(&startup, 0, sizeof startup);
|
||||
startup.cb = sizeof startup;
|
||||
|
||||
client_test_name = test;
|
||||
make_cmdline(cmdline, test);
|
||||
ok(CreateProcessA(NULL, cmdline, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n");
|
||||
wait_child_process( info.hProcess );
|
||||
ok(CloseHandle(info.hProcess), "CloseHandle\n");
|
||||
ok(CloseHandle(info.hThread), "CloseHandle\n");
|
||||
ok(CreateProcessA(NULL, cmdline, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &client_info), "CreateProcess\n");
|
||||
wait_child_process(client_info.hProcess);
|
||||
ok(CloseHandle(client_info.hProcess), "CloseHandle\n");
|
||||
ok(CloseHandle(client_info.hThread), "CloseHandle\n");
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1964,6 +2049,7 @@ client(const char *test)
|
|||
|
||||
run_tests();
|
||||
authinfo_test(RPC_PROTSEQ_TCP, 0);
|
||||
test_I_RpcBindingInqLocalClientPID(RPC_PROTSEQ_TCP, IMixedServer_IfHandle);
|
||||
test_is_server_listening2(IMixedServer_IfHandle, RPC_S_OK, RPC_S_ACCESS_DENIED);
|
||||
|
||||
ok(RPC_S_OK == RpcStringFreeA(&binding), "RpcStringFree\n");
|
||||
|
@ -1976,6 +2062,7 @@ client(const char *test)
|
|||
|
||||
set_auth_info(IMixedServer_IfHandle);
|
||||
authinfo_test(RPC_PROTSEQ_TCP, 1);
|
||||
test_I_RpcBindingInqLocalClientPID(RPC_PROTSEQ_TCP, IMixedServer_IfHandle);
|
||||
test_is_server_listening(IMixedServer_IfHandle, RPC_S_ACCESS_DENIED);
|
||||
|
||||
ok(RPC_S_OK == RpcStringFreeA(&binding), "RpcStringFree\n");
|
||||
|
@ -1988,6 +2075,7 @@ client(const char *test)
|
|||
|
||||
run_tests(); /* can cause RPC_X_BAD_STUB_DATA exception */
|
||||
authinfo_test(RPC_PROTSEQ_LRPC, 0);
|
||||
test_I_RpcBindingInqLocalClientPID(RPC_PROTSEQ_LRPC, IMixedServer_IfHandle);
|
||||
test_is_server_listening(IMixedServer_IfHandle, RPC_S_OK);
|
||||
|
||||
ok(RPC_S_OK == RpcStringFreeA(&binding), "RpcStringFree\n");
|
||||
|
@ -2000,6 +2088,7 @@ client(const char *test)
|
|||
|
||||
run_tests();
|
||||
authinfo_test(RPC_PROTSEQ_LRPC, 0);
|
||||
test_I_RpcBindingInqLocalClientPID(RPC_PROTSEQ_LRPC, IMixedServer_IfHandle);
|
||||
todo_wine
|
||||
test_is_server_listening(IMixedServer_IfHandle, RPC_S_NOT_LISTENING);
|
||||
|
||||
|
@ -2016,6 +2105,7 @@ client(const char *test)
|
|||
|
||||
set_auth_info(IMixedServer_IfHandle);
|
||||
authinfo_test(RPC_PROTSEQ_LRPC, 1);
|
||||
test_I_RpcBindingInqLocalClientPID(RPC_PROTSEQ_LRPC, IMixedServer_IfHandle);
|
||||
test_is_server_listening(IMixedServer_IfHandle, RPC_S_OK);
|
||||
|
||||
ok(RPC_S_OK == RpcStringFreeA(&binding), "RpcStringFree\n");
|
||||
|
@ -2029,6 +2119,7 @@ client(const char *test)
|
|||
test_is_server_listening(IMixedServer_IfHandle, RPC_S_OK);
|
||||
run_tests();
|
||||
authinfo_test(RPC_PROTSEQ_NMP, 0);
|
||||
test_I_RpcBindingInqLocalClientPID(RPC_PROTSEQ_NMP, IMixedServer_IfHandle);
|
||||
test_is_server_listening(IMixedServer_IfHandle, RPC_S_OK);
|
||||
stop();
|
||||
test_is_server_listening(IMixedServer_IfHandle, RPC_S_NOT_LISTENING);
|
||||
|
@ -2046,6 +2137,7 @@ client(const char *test)
|
|||
test_is_server_listening(IInterpServer_IfHandle, RPC_S_OK);
|
||||
run_tests();
|
||||
authinfo_test(RPC_PROTSEQ_NMP, 0);
|
||||
test_I_RpcBindingInqLocalClientPID(RPC_PROTSEQ_NMP, IInterpServer_IfHandle);
|
||||
test_is_server_listening(IInterpServer_IfHandle, RPC_S_OK);
|
||||
|
||||
ok(RPC_S_OK == RpcStringFreeA(&binding), "RpcStringFree\n");
|
||||
|
|
|
@ -485,4 +485,6 @@ cpp_quote("#endif")
|
|||
ctx_handle_t get_handle();
|
||||
void get_handle_by_ptr([out] ctx_handle_t *r);
|
||||
void test_handle(ctx_handle_t ctx_handle);
|
||||
|
||||
void test_I_RpcBindingInqLocalClientPID([in] unsigned int protseq, [in] handle_t binding);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue