Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
18fb5d25
Commit
18fb5d25
authored
May 31, 2017
by
Jacek Caban
Committed by
Alexandre Julliard
May 31, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rpcrt4/tests: Added more server stopping tests.
Signed-off-by:
Jacek Caban
<
jacek@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
09e98be2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
110 additions
and
3 deletions
+110
-3
server.c
dlls/rpcrt4/tests/server.c
+110
-3
No files found.
dlls/rpcrt4/tests/server.c
View file @
18fb5d25
...
...
@@ -41,7 +41,7 @@
static
const
char
*
progname
;
static
BOOL
old_windows_version
;
static
HANDLE
stop_event
;
static
HANDLE
stop_event
,
stop_wait_event
;
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
);
...
...
@@ -830,9 +830,18 @@ void __cdecl s_full_pointer_null_test(int *a, int *b)
void
__cdecl
s_stop
(
void
)
{
ok
(
RPC_S_OK
==
RpcMgmtStopServerListening
(
NULL
),
"RpcMgmtStopServerListening
\n
"
);
ok
(
RPC_S_OK
==
RpcServerUnregisterIf
(
NULL
,
NULL
,
FALSE
),
"RpcServerUnregisterIf
\n
"
);
if
(
!
stop_wait_event
)
{
ok
(
RPC_S_OK
==
RpcMgmtStopServerListening
(
NULL
),
"RpcMgmtStopServerListening
\n
"
);
ok
(
RPC_S_OK
==
RpcServerUnregisterIf
(
NULL
,
NULL
,
FALSE
),
"RpcServerUnregisterIf
\n
"
);
}
ok
(
SetEvent
(
stop_event
),
"SetEvent
\n
"
);
if
(
stop_wait_event
)
{
DWORD
ret
;
ret
=
WaitForSingleObject
(
stop_wait_event
,
10000
);
ok
(
WAIT_OBJECT_0
==
ret
,
"WaitForSingleObject
\n
"
);
}
}
static
void
...
...
@@ -1759,10 +1768,87 @@ server(void)
stop_event
=
NULL
;
}
static
DWORD
WINAPI
listen_test_client_thread
(
void
*
binding
)
{
RPC_STATUS
status
;
status
=
RpcBindingFromStringBindingA
(
binding
,
&
IServer_IfHandle
);
ok
(
status
==
RPC_S_OK
,
"RpcBindingFromStringBinding
\n
"
);
test_is_server_listening
(
IServer_IfHandle
,
RPC_S_OK
);
stop
();
trace
(
"stopped
\n
"
);
status
=
RpcBindingFree
(
&
IServer_IfHandle
);
ok
(
status
==
RPC_S_OK
,
"RpcBindingFree
\n
"
);
return
0
;
}
static
DWORD
WINAPI
wait_listen_proc
(
void
*
arg
)
{
RPC_STATUS
status
;
trace
(
"waiting
\n
"
);
status
=
RpcMgmtWaitServerListen
();
ok
(
status
==
RPC_S_OK
,
"RpcMgmtWaitServerListening failed with status %d
\n
"
,
status
);
trace
(
"done
\n
"
);
return
0
;
}
static
void
test_stop_wait_for_call
(
unsigned
char
*
binding
)
{
HANDLE
client_thread
,
wait_listen_thread
;
RPC_STATUS
status
;
DWORD
ret
;
status
=
RpcServerListen
(
1
,
20
,
TRUE
);
ok
(
status
==
RPC_S_OK
,
"RpcServerListen failed with status %d
\n
"
,
status
);
test_is_server_listening
(
NULL
,
RPC_S_OK
);
stop_wait_event
=
CreateEventW
(
NULL
,
FALSE
,
FALSE
,
NULL
);
ok
(
stop_wait_event
!=
NULL
,
"CreateEvent failed with error %d
\n
"
,
GetLastError
());
stop_event
=
CreateEventW
(
NULL
,
FALSE
,
FALSE
,
NULL
);
ok
(
stop_event
!=
NULL
,
"CreateEvent failed with error %d
\n
"
,
GetLastError
());
wait_listen_thread
=
CreateThread
(
NULL
,
0
,
wait_listen_proc
,
0
,
0
,
NULL
);
ok
(
wait_listen_thread
!=
NULL
,
"CreateThread failed
\n
"
);
client_thread
=
CreateThread
(
NULL
,
0
,
listen_test_client_thread
,
binding
,
0
,
NULL
);
ok
(
client_thread
!=
NULL
,
"CreateThread failed
\n
"
);
CloseHandle
(
client_thread
);
ret
=
WaitForSingleObject
(
stop_event
,
10000
);
ok
(
WAIT_OBJECT_0
==
ret
,
"WaitForSingleObject
\n
"
);
status
=
RpcMgmtStopServerListening
(
NULL
);
ok
(
status
==
RPC_S_OK
,
"RpcMgmtStopServerListening
\n
"
);
test_is_server_listening
(
NULL
,
RPC_S_NOT_LISTENING
);
ret
=
WaitForSingleObject
(
wait_listen_thread
,
500
);
ok
(
WAIT_TIMEOUT
==
ret
,
"WaitForSingleObject
\n
"
);
SetEvent
(
stop_wait_event
);
ret
=
WaitForSingleObject
(
wait_listen_thread
,
10000
);
ok
(
WAIT_OBJECT_0
==
ret
,
"WaitForSingleObject returned %u
\n
"
,
ret
);
CloseHandle
(
wait_listen_thread
);
CloseHandle
(
stop_wait_event
);
stop_wait_event
=
NULL
;
CloseHandle
(
stop_event
);
stop_event
=
NULL
;
}
static
void
test_server_listening
(
void
)
{
static
unsigned
char
np
[]
=
"ncacn_np"
;
static
unsigned
char
address_np
[]
=
"
\\\\
."
;
static
unsigned
char
pipe
[]
=
PIPE
"listen_test"
;
static
unsigned
char
ncalrpc
[]
=
"ncalrpc"
;
static
unsigned
char
guid
[]
=
"00000000-4114-0704-2302-000000000000"
;
unsigned
char
*
binding
;
RPC_STATUS
status
;
status
=
RpcServerUseProtseqEpA
(
np
,
0
,
pipe
,
NULL
);
...
...
@@ -1788,6 +1874,27 @@ static void test_server_listening(void)
status
=
RpcMgmtWaitServerListen
();
ok
(
status
==
RPC_S_NOT_LISTENING
,
"RpcMgmtWaitServerListening failed with status %d
\n
"
,
status
);
/* test that server stop waits for a call in progress */
status
=
RpcStringBindingComposeA
(
NULL
,
np
,
address_np
,
pipe
,
NULL
,
&
binding
);
ok
(
status
==
RPC_S_OK
,
"RpcStringBindingCompose
\n
"
);
test_stop_wait_for_call
(
binding
);
status
=
RpcStringFreeA
(
&
binding
);
ok
(
status
==
RPC_S_OK
,
"RpcStringFree
\n
"
);
/* repeat the test using ncalrpc */
status
=
RpcServerUseProtseqEpA
(
ncalrpc
,
0
,
guid
,
NULL
);
ok
(
status
==
RPC_S_OK
,
"RpcServerUseProtseqEp(ncalrpc) failed with status %d
\n
"
,
status
);
status
=
RpcStringBindingComposeA
(
NULL
,
ncalrpc
,
NULL
,
guid
,
NULL
,
&
binding
);
ok
(
status
==
RPC_S_OK
,
"RpcStringBindingCompose
\n
"
);
test_stop_wait_for_call
(
binding
);
status
=
RpcStringFreeA
(
&
binding
);
ok
(
status
==
RPC_S_OK
,
"RpcStringFree
\n
"
);
}
static
BOOL
is_process_elevated
(
void
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment