Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
29fafd55
Commit
29fafd55
authored
Apr 28, 2021
by
Zebediah Figura
Committed by
Alexandre Julliard
Apr 29, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ws2_32/tests: Move service lookup tests to protocol.c.
Signed-off-by:
Zebediah Figura
<
z.figura12@gmail.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
1699d4b7
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
328 additions
and
323 deletions
+328
-323
protocol.c
dlls/ws2_32/tests/protocol.c
+328
-2
sock.c
dlls/ws2_32/tests/sock.c
+0
-321
No files found.
dlls/ws2_32/tests/protocol.c
View file @
29fafd55
...
...
@@ -24,6 +24,7 @@
#include <winbase.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <mswsock.h>
#include <iphlpapi.h>
#include "wine/test.h"
...
...
@@ -288,19 +289,339 @@ static void test_getprotobynumber(void)
continue
;
}
ok
((
ent
&&
ent
->
p_name
&&
strcmp
(
ent
->
p_name
,
ref
->
names
[
0
])
==
0
)
||
ok
((
ent
&&
ent
->
p_name
&&
!
strcmp
(
ent
->
p_name
,
ref
->
names
[
0
])
)
||
broken
(
!
ent
&&
ref
->
missing_from_xp
),
"Expected protocol number %d to be %s, got %s
\n
"
,
i
,
ref
->
names
[
0
],
wine_dbgstr_a
(
ent
?
ent
->
p_name
:
NULL
));
ok
((
ent
&&
ent
->
p_aliases
&&
ent
->
p_aliases
[
0
]
&&
strcmp
(
ent
->
p_aliases
[
0
],
ref
->
names
[
1
])
==
0
)
||
!
strcmp
(
ent
->
p_aliases
[
0
],
ref
->
names
[
1
])
)
||
broken
(
!
ent
&&
ref
->
missing_from_xp
),
"Expected protocol number %d alias 0 to be %s, got %s
\n
"
,
i
,
ref
->
names
[
0
],
wine_dbgstr_a
(
ent
&&
ent
->
p_aliases
?
ent
->
p_aliases
[
0
]
:
NULL
));
}
}
#define NUM_THREADS 3
/* Number of threads to run getservbyname */
#define NUM_QUERIES 250
/* Number of getservbyname queries per thread */
static
DWORD
WINAPI
do_getservbyname
(
void
*
param
)
{
struct
{
const
char
*
name
;
const
char
*
proto
;
int
port
;
}
serv
[
2
]
=
{
{
"domain"
,
"udp"
,
53
},
{
"telnet"
,
"tcp"
,
23
},
};
HANDLE
*
starttest
=
param
;
int
i
,
j
;
struct
servent
*
pserv
[
2
];
ok
(
WaitForSingleObject
(
*
starttest
,
30
*
1000
)
!=
WAIT_TIMEOUT
,
"test_getservbyname: timeout waiting for start signal
\n
"
);
/* ensure that necessary buffer resizes are completed */
for
(
j
=
0
;
j
<
2
;
j
++
)
pserv
[
j
]
=
getservbyname
(
serv
[
j
].
name
,
serv
[
j
].
proto
);
for
(
i
=
0
;
i
<
NUM_QUERIES
/
2
;
i
++
)
{
for
(
j
=
0
;
j
<
2
;
j
++
)
{
pserv
[
j
]
=
getservbyname
(
serv
[
j
].
name
,
serv
[
j
].
proto
);
ok
(
pserv
[
j
]
!=
NULL
||
broken
(
pserv
[
j
]
==
NULL
)
/* win8, fixed in win81 */
,
"getservbyname could not retrieve information for %s: %d
\n
"
,
serv
[
j
].
name
,
WSAGetLastError
()
);
if
(
!
pserv
[
j
]
)
continue
;
ok
(
pserv
[
j
]
->
s_port
==
htons
(
serv
[
j
].
port
),
"getservbyname returned the wrong port for %s: %d
\n
"
,
serv
[
j
].
name
,
ntohs
(
pserv
[
j
]
->
s_port
)
);
ok
(
!
strcmp
(
pserv
[
j
]
->
s_proto
,
serv
[
j
].
proto
),
"getservbyname returned the wrong protocol for %s: %s
\n
"
,
serv
[
j
].
name
,
pserv
[
j
]
->
s_proto
);
ok
(
!
strcmp
(
pserv
[
j
]
->
s_name
,
serv
[
j
].
name
),
"getservbyname returned the wrong name for %s: %s
\n
"
,
serv
[
j
].
name
,
pserv
[
j
]
->
s_name
);
}
ok
(
pserv
[
0
]
==
pserv
[
1
]
||
broken
(
pserv
[
0
]
!=
pserv
[
1
])
/* win8, fixed in win81 */
,
"getservbyname: winsock resized servent buffer when not necessary
\n
"
);
}
return
0
;
}
static
void
test_getservbyname
(
void
)
{
int
i
;
HANDLE
starttest
,
thread
[
NUM_THREADS
];
starttest
=
CreateEventA
(
NULL
,
1
,
0
,
"test_getservbyname_starttest"
);
/* create threads */
for
(
i
=
0
;
i
<
NUM_THREADS
;
i
++
)
thread
[
i
]
=
CreateThread
(
NULL
,
0
,
do_getservbyname
,
&
starttest
,
0
,
NULL
);
/* signal threads to start */
SetEvent
(
starttest
);
for
(
i
=
0
;
i
<
NUM_THREADS
;
i
++
)
WaitForSingleObject
(
thread
[
i
],
30
*
1000
);
}
static
void
test_WSALookupService
(
void
)
{
char
buffer
[
4096
],
strbuff
[
128
];
WSAQUERYSETW
*
qs
=
NULL
;
HANDLE
handle
;
PNLA_BLOB
netdata
;
int
ret
;
DWORD
error
,
offset
,
size
;
qs
=
(
WSAQUERYSETW
*
)
buffer
;
memset
(
qs
,
0
,
sizeof
(
*
qs
));
/* invalid parameter tests */
ret
=
WSALookupServiceBeginW
(
NULL
,
0
,
&
handle
);
error
=
WSAGetLastError
();
ok
(
ret
==
SOCKET_ERROR
,
"WSALookupServiceBeginW should have failed
\n
"
);
todo_wine
ok
(
error
==
WSAEFAULT
,
"expected 10014, got %d
\n
"
,
error
);
ret
=
WSALookupServiceBeginW
(
qs
,
0
,
NULL
);
error
=
WSAGetLastError
();
ok
(
ret
==
SOCKET_ERROR
,
"WSALookupServiceBeginW should have failed
\n
"
);
todo_wine
ok
(
error
==
WSAEFAULT
,
"expected 10014, got %d
\n
"
,
error
);
ret
=
WSALookupServiceBeginW
(
qs
,
0
,
&
handle
);
ok
(
ret
==
SOCKET_ERROR
,
"WSALookupServiceBeginW should have failed
\n
"
);
todo_wine
ok
(
WSAGetLastError
()
==
ERROR_INVALID_PARAMETER
||
broken
(
WSAGetLastError
()
==
WSASERVICE_NOT_FOUND
)
/* win10 1809 */
,
"got error %u
\n
"
,
WSAGetLastError
());
ret
=
WSALookupServiceEnd
(
NULL
);
error
=
WSAGetLastError
();
todo_wine
ok
(
ret
==
SOCKET_ERROR
,
"WSALookupServiceEnd should have failed
\n
"
);
todo_wine
ok
(
error
==
ERROR_INVALID_HANDLE
,
"expected 6, got %d
\n
"
,
error
);
/* standard network list query */
qs
->
dwSize
=
sizeof
(
*
qs
);
handle
=
(
HANDLE
)
0xdeadbeef
;
ret
=
WSALookupServiceBeginW
(
qs
,
LUP_RETURN_ALL
|
LUP_DEEP
,
&
handle
);
error
=
WSAGetLastError
();
if
(
ret
&&
error
==
ERROR_INVALID_PARAMETER
)
{
win_skip
(
"the current WSALookupServiceBeginW test is not supported in win <= 2000
\n
"
);
return
;
}
todo_wine
ok
(
!
ret
,
"WSALookupServiceBeginW failed unexpectedly with error %d
\n
"
,
error
);
todo_wine
ok
(
handle
!=
(
HANDLE
)
0xdeadbeef
,
"Handle was not filled
\n
"
);
offset
=
0
;
do
{
memset
(
qs
,
0
,
sizeof
(
*
qs
));
size
=
sizeof
(
buffer
);
if
(
WSALookupServiceNextW
(
handle
,
0
,
&
size
,
qs
)
==
SOCKET_ERROR
)
{
ok
(
WSAGetLastError
()
==
WSA_E_NO_MORE
,
"got error %u
\n
"
,
WSAGetLastError
());
break
;
}
if
(
winetest_debug
<=
1
)
continue
;
WideCharToMultiByte
(
CP_ACP
,
0
,
qs
->
lpszServiceInstanceName
,
-
1
,
strbuff
,
sizeof
(
strbuff
),
NULL
,
NULL
);
trace
(
"Network Name: %s
\n
"
,
strbuff
);
/* network data is written in the blob field */
if
(
qs
->
lpBlob
)
{
/* each network may have multiple NLA_BLOB information structures */
do
{
netdata
=
(
PNLA_BLOB
)
&
qs
->
lpBlob
->
pBlobData
[
offset
];
switch
(
netdata
->
header
.
type
)
{
case
NLA_RAW_DATA
:
trace
(
"
\t
NLA Data Type: NLA_RAW_DATA
\n
"
);
break
;
case
NLA_INTERFACE
:
trace
(
"
\t
NLA Data Type: NLA_INTERFACE
\n
"
);
trace
(
"
\t\t
Type: %d
\n
"
,
netdata
->
data
.
interfaceData
.
dwType
);
trace
(
"
\t\t
Speed: %d
\n
"
,
netdata
->
data
.
interfaceData
.
dwSpeed
);
trace
(
"
\t\t
Adapter Name: %s
\n
"
,
netdata
->
data
.
interfaceData
.
adapterName
);
break
;
case
NLA_802_1X_LOCATION
:
trace
(
"
\t
NLA Data Type: NLA_802_1X_LOCATION
\n
"
);
trace
(
"
\t\t
Information: %s
\n
"
,
netdata
->
data
.
locationData
.
information
);
break
;
case
NLA_CONNECTIVITY
:
switch
(
netdata
->
data
.
connectivity
.
type
)
{
case
NLA_NETWORK_AD_HOC
:
trace
(
"
\t\t
Network Type: AD HOC
\n
"
);
break
;
case
NLA_NETWORK_MANAGED
:
trace
(
"
\t\t
Network Type: Managed
\n
"
);
break
;
case
NLA_NETWORK_UNMANAGED
:
trace
(
"
\t\t
Network Type: Unmanaged
\n
"
);
break
;
case
NLA_NETWORK_UNKNOWN
:
trace
(
"
\t\t
Network Type: Unknown
\n
"
);
}
switch
(
netdata
->
data
.
connectivity
.
internet
)
{
case
NLA_INTERNET_NO
:
trace
(
"
\t\t
Internet connectivity: No
\n
"
);
break
;
case
NLA_INTERNET_YES
:
trace
(
"
\t\t
Internet connectivity: Yes
\n
"
);
break
;
case
NLA_INTERNET_UNKNOWN
:
trace
(
"
\t\t
Internet connectivity: Unknown
\n
"
);
break
;
}
break
;
case
NLA_ICS
:
trace
(
"
\t
NLA Data Type: NLA_ICS
\n
"
);
trace
(
"
\t\t
Speed: %d
\n
"
,
netdata
->
data
.
ICS
.
remote
.
speed
);
trace
(
"
\t\t
Type: %d
\n
"
,
netdata
->
data
.
ICS
.
remote
.
type
);
trace
(
"
\t\t
State: %d
\n
"
,
netdata
->
data
.
ICS
.
remote
.
state
);
WideCharToMultiByte
(
CP_ACP
,
0
,
netdata
->
data
.
ICS
.
remote
.
machineName
,
-
1
,
strbuff
,
sizeof
(
strbuff
),
NULL
,
NULL
);
trace
(
"
\t\t
Machine Name: %s
\n
"
,
strbuff
);
WideCharToMultiByte
(
CP_ACP
,
0
,
netdata
->
data
.
ICS
.
remote
.
sharedAdapterName
,
-
1
,
strbuff
,
sizeof
(
strbuff
),
NULL
,
NULL
);
trace
(
"
\t\t
Shared Adapter Name: %s
\n
"
,
strbuff
);
break
;
default:
trace
(
"
\t
NLA Data Type: Unknown
\n
"
);
break
;
}
}
while
(
offset
);
}
}
while
(
1
);
ret
=
WSALookupServiceEnd
(
handle
);
ok
(
!
ret
,
"WSALookupServiceEnd failed unexpectedly
\n
"
);
}
#define WM_ASYNCCOMPLETE (WM_USER + 100)
static
HWND
create_async_message_window
(
void
)
{
static
const
char
class_name
[]
=
"ws2_32 async message window class"
;
WNDCLASSEXA
wndclass
;
HWND
hWnd
;
wndclass
.
cbSize
=
sizeof
(
wndclass
);
wndclass
.
style
=
CS_HREDRAW
|
CS_VREDRAW
;
wndclass
.
lpfnWndProc
=
DefWindowProcA
;
wndclass
.
cbClsExtra
=
0
;
wndclass
.
cbWndExtra
=
0
;
wndclass
.
hInstance
=
GetModuleHandleA
(
NULL
);
wndclass
.
hIcon
=
LoadIconA
(
NULL
,
(
LPCSTR
)
IDI_APPLICATION
);
wndclass
.
hIconSm
=
LoadIconA
(
NULL
,
(
LPCSTR
)
IDI_APPLICATION
);
wndclass
.
hCursor
=
LoadCursorA
(
NULL
,
(
LPCSTR
)
IDC_ARROW
);
wndclass
.
hbrBackground
=
(
HBRUSH
)(
COLOR_WINDOW
+
1
);
wndclass
.
lpszClassName
=
class_name
;
wndclass
.
lpszMenuName
=
NULL
;
RegisterClassExA
(
&
wndclass
);
hWnd
=
CreateWindowA
(
class_name
,
"ws2_32 async message window"
,
WS_OVERLAPPEDWINDOW
,
0
,
0
,
500
,
500
,
NULL
,
NULL
,
GetModuleHandleA
(
NULL
),
NULL
);
ok
(
!!
hWnd
,
"failed to create window
\n
"
);
return
hWnd
;
}
static
void
wait_for_async_message
(
HWND
hwnd
,
HANDLE
handle
)
{
BOOL
ret
;
MSG
msg
;
while
((
ret
=
GetMessageA
(
&
msg
,
0
,
0
,
0
))
&&
!
(
msg
.
hwnd
==
hwnd
&&
msg
.
message
==
WM_ASYNCCOMPLETE
))
{
TranslateMessage
(
&
msg
);
DispatchMessageA
(
&
msg
);
}
ok
(
ret
,
"did not expect WM_QUIT message
\n
"
);
ok
(
msg
.
wParam
==
(
WPARAM
)
handle
,
"expected wParam = %p, got %lx
\n
"
,
handle
,
msg
.
wParam
);
}
static
void
test_WSAAsyncGetServByPort
(
void
)
{
HWND
hwnd
=
create_async_message_window
();
HANDLE
ret
;
char
buffer
[
MAXGETHOSTSTRUCT
];
/* FIXME: The asynchronous window messages should be tested. */
/* Parameters are not checked when initiating the asynchronous operation. */
ret
=
WSAAsyncGetServByPort
(
NULL
,
0
,
0
,
NULL
,
NULL
,
0
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByPort returned NULL
\n
"
);
ret
=
WSAAsyncGetServByPort
(
hwnd
,
WM_ASYNCCOMPLETE
,
0
,
NULL
,
NULL
,
0
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByPort returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
ret
=
WSAAsyncGetServByPort
(
hwnd
,
WM_ASYNCCOMPLETE
,
htons
(
80
),
NULL
,
NULL
,
0
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByPort returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
ret
=
WSAAsyncGetServByPort
(
hwnd
,
WM_ASYNCCOMPLETE
,
htons
(
80
),
NULL
,
buffer
,
MAXGETHOSTSTRUCT
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByPort returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
DestroyWindow
(
hwnd
);
}
static
void
test_WSAAsyncGetServByName
(
void
)
{
HWND
hwnd
=
create_async_message_window
();
HANDLE
ret
;
char
buffer
[
MAXGETHOSTSTRUCT
];
/* FIXME: The asynchronous window messages should be tested. */
/* Parameters are not checked when initiating the asynchronous operation. */
ret
=
WSAAsyncGetServByName
(
hwnd
,
WM_ASYNCCOMPLETE
,
""
,
NULL
,
NULL
,
0
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByName returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
ret
=
WSAAsyncGetServByName
(
hwnd
,
WM_ASYNCCOMPLETE
,
""
,
""
,
buffer
,
MAXGETHOSTSTRUCT
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByName returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
ret
=
WSAAsyncGetServByName
(
hwnd
,
WM_ASYNCCOMPLETE
,
"http"
,
NULL
,
NULL
,
0
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByName returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
ret
=
WSAAsyncGetServByName
(
hwnd
,
WM_ASYNCCOMPLETE
,
"http"
,
"tcp"
,
buffer
,
MAXGETHOSTSTRUCT
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByName returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
DestroyWindow
(
hwnd
);
}
/* Tests used in both getaddrinfo and GetAddrInfoW */
static
const
struct
addr_hint_tests
{
...
...
@@ -1357,6 +1678,11 @@ START_TEST( protocol )
test_getprotobyname
();
test_getprotobynumber
();
test_getservbyname
();
test_WSALookupService
();
test_WSAAsyncGetServByPort
();
test_WSAAsyncGetServByName
();
test_GetAddrInfoW
();
test_GetAddrInfoExW
();
test_getaddrinfo
();
...
...
dlls/ws2_32/tests/sock.c
View file @
29fafd55
...
...
@@ -44,9 +44,6 @@
#define NUM_UDP_PEERS 3
/* Number of UDP sockets to create and test > 1 */
#define NUM_THREADS 3
/* Number of threads to run getservbyname */
#define NUM_QUERIES 250
/* Number of getservbyname queries per thread */
#define SERVERIP "127.0.0.1"
/* IP to bind to */
#define SERVERPORT 9374
/* Port number to bind to */
...
...
@@ -2135,68 +2132,6 @@ static void test_UDP(void)
}
}
static
DWORD
WINAPI
do_getservbyname
(
void
*
param
)
{
struct
{
const
char
*
name
;
const
char
*
proto
;
int
port
;
}
serv
[
2
]
=
{
{
"domain"
,
"udp"
,
53
},
{
"telnet"
,
"tcp"
,
23
}
};
HANDLE
*
starttest
=
param
;
int
i
,
j
;
struct
servent
*
pserv
[
2
];
ok
(
WaitForSingleObject
(
*
starttest
,
TEST_TIMEOUT
*
1000
)
!=
WAIT_TIMEOUT
,
"test_getservbyname: timeout waiting for start signal
\n
"
);
/* ensure that necessary buffer resizes are completed */
for
(
j
=
0
;
j
<
2
;
j
++
)
{
pserv
[
j
]
=
getservbyname
(
serv
[
j
].
name
,
serv
[
j
].
proto
);
}
for
(
i
=
0
;
i
<
NUM_QUERIES
/
2
;
i
++
)
{
for
(
j
=
0
;
j
<
2
;
j
++
)
{
pserv
[
j
]
=
getservbyname
(
serv
[
j
].
name
,
serv
[
j
].
proto
);
ok
(
pserv
[
j
]
!=
NULL
||
broken
(
pserv
[
j
]
==
NULL
)
/* win8, fixed in win81 */
,
"getservbyname could not retrieve information for %s: %d
\n
"
,
serv
[
j
].
name
,
WSAGetLastError
()
);
if
(
!
pserv
[
j
]
)
continue
;
ok
(
pserv
[
j
]
->
s_port
==
htons
(
serv
[
j
].
port
),
"getservbyname returned the wrong port for %s: %d
\n
"
,
serv
[
j
].
name
,
ntohs
(
pserv
[
j
]
->
s_port
)
);
ok
(
!
strcmp
(
pserv
[
j
]
->
s_proto
,
serv
[
j
].
proto
),
"getservbyname returned the wrong protocol for %s: %s
\n
"
,
serv
[
j
].
name
,
pserv
[
j
]
->
s_proto
);
ok
(
!
strcmp
(
pserv
[
j
]
->
s_name
,
serv
[
j
].
name
),
"getservbyname returned the wrong name for %s: %s
\n
"
,
serv
[
j
].
name
,
pserv
[
j
]
->
s_name
);
}
ok
(
pserv
[
0
]
==
pserv
[
1
]
||
broken
(
pserv
[
0
]
!=
pserv
[
1
])
/* win8, fixed in win81 */
,
"getservbyname: winsock resized servent buffer when not necessary
\n
"
);
}
return
0
;
}
static
void
test_getservbyname
(
void
)
{
int
i
;
HANDLE
starttest
,
thread
[
NUM_THREADS
];
DWORD
thread_id
[
NUM_THREADS
];
starttest
=
CreateEventA
(
NULL
,
1
,
0
,
"test_getservbyname_starttest"
);
/* create threads */
for
(
i
=
0
;
i
<
NUM_THREADS
;
i
++
)
{
thread
[
i
]
=
CreateThread
(
NULL
,
0
,
do_getservbyname
,
&
starttest
,
0
,
&
thread_id
[
i
]
);
}
/* signal threads to start */
SetEvent
(
starttest
);
for
(
i
=
0
;
i
<
NUM_THREADS
;
i
++
)
{
WaitForSingleObject
(
thread
[
i
],
TEST_TIMEOUT
*
1000
);
}
}
static
void
test_WSASocket
(
void
)
{
SOCKET
sock
=
INVALID_SOCKET
;
...
...
@@ -7534,107 +7469,6 @@ static void test_synchronous_WSAIoctl(void)
CloseHandle
(
previous_port
);
}
#define WM_ASYNCCOMPLETE (WM_USER + 100)
static
HWND
create_async_message_window
(
void
)
{
static
const
char
class_name
[]
=
"ws2_32 async message window class"
;
WNDCLASSEXA
wndclass
;
HWND
hWnd
;
wndclass
.
cbSize
=
sizeof
(
wndclass
);
wndclass
.
style
=
CS_HREDRAW
|
CS_VREDRAW
;
wndclass
.
lpfnWndProc
=
DefWindowProcA
;
wndclass
.
cbClsExtra
=
0
;
wndclass
.
cbWndExtra
=
0
;
wndclass
.
hInstance
=
GetModuleHandleA
(
NULL
);
wndclass
.
hIcon
=
LoadIconA
(
NULL
,
(
LPCSTR
)
IDI_APPLICATION
);
wndclass
.
hIconSm
=
LoadIconA
(
NULL
,
(
LPCSTR
)
IDI_APPLICATION
);
wndclass
.
hCursor
=
LoadCursorA
(
NULL
,
(
LPCSTR
)
IDC_ARROW
);
wndclass
.
hbrBackground
=
(
HBRUSH
)(
COLOR_WINDOW
+
1
);
wndclass
.
lpszClassName
=
class_name
;
wndclass
.
lpszMenuName
=
NULL
;
RegisterClassExA
(
&
wndclass
);
hWnd
=
CreateWindowA
(
class_name
,
"ws2_32 async message window"
,
WS_OVERLAPPEDWINDOW
,
0
,
0
,
500
,
500
,
NULL
,
NULL
,
GetModuleHandleA
(
NULL
),
NULL
);
ok
(
!!
hWnd
,
"failed to create window
\n
"
);
return
hWnd
;
}
static
void
wait_for_async_message
(
HWND
hwnd
,
HANDLE
handle
)
{
BOOL
ret
;
MSG
msg
;
while
((
ret
=
GetMessageA
(
&
msg
,
0
,
0
,
0
))
&&
!
(
msg
.
hwnd
==
hwnd
&&
msg
.
message
==
WM_ASYNCCOMPLETE
))
{
TranslateMessage
(
&
msg
);
DispatchMessageA
(
&
msg
);
}
ok
(
ret
,
"did not expect WM_QUIT message
\n
"
);
ok
(
msg
.
wParam
==
(
WPARAM
)
handle
,
"expected wParam = %p, got %lx
\n
"
,
handle
,
msg
.
wParam
);
}
static
void
test_WSAAsyncGetServByPort
(
void
)
{
HWND
hwnd
=
create_async_message_window
();
HANDLE
ret
;
char
buffer
[
MAXGETHOSTSTRUCT
];
/* FIXME: The asynchronous window messages should be tested. */
/* Parameters are not checked when initiating the asynchronous operation. */
ret
=
WSAAsyncGetServByPort
(
NULL
,
0
,
0
,
NULL
,
NULL
,
0
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByPort returned NULL
\n
"
);
ret
=
WSAAsyncGetServByPort
(
hwnd
,
WM_ASYNCCOMPLETE
,
0
,
NULL
,
NULL
,
0
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByPort returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
ret
=
WSAAsyncGetServByPort
(
hwnd
,
WM_ASYNCCOMPLETE
,
htons
(
80
),
NULL
,
NULL
,
0
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByPort returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
ret
=
WSAAsyncGetServByPort
(
hwnd
,
WM_ASYNCCOMPLETE
,
htons
(
80
),
NULL
,
buffer
,
MAXGETHOSTSTRUCT
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByPort returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
DestroyWindow
(
hwnd
);
}
static
void
test_WSAAsyncGetServByName
(
void
)
{
HWND
hwnd
=
create_async_message_window
();
HANDLE
ret
;
char
buffer
[
MAXGETHOSTSTRUCT
];
/* FIXME: The asynchronous window messages should be tested. */
/* Parameters are not checked when initiating the asynchronous operation. */
ret
=
WSAAsyncGetServByName
(
hwnd
,
WM_ASYNCCOMPLETE
,
""
,
NULL
,
NULL
,
0
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByName returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
ret
=
WSAAsyncGetServByName
(
hwnd
,
WM_ASYNCCOMPLETE
,
""
,
""
,
buffer
,
MAXGETHOSTSTRUCT
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByName returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
ret
=
WSAAsyncGetServByName
(
hwnd
,
WM_ASYNCCOMPLETE
,
"http"
,
NULL
,
NULL
,
0
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByName returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
ret
=
WSAAsyncGetServByName
(
hwnd
,
WM_ASYNCCOMPLETE
,
"http"
,
"tcp"
,
buffer
,
MAXGETHOSTSTRUCT
);
ok
(
ret
!=
NULL
,
"WSAAsyncGetServByName returned NULL
\n
"
);
wait_for_async_message
(
hwnd
,
ret
);
DestroyWindow
(
hwnd
);
}
/*
* Provide consistent initialization for the AcceptEx IOCP tests.
*/
...
...
@@ -8508,157 +8342,6 @@ static void test_inet_ntoa(void)
CloseHandle
(
thread
);
}
static
void
test_WSALookupService
(
void
)
{
char
buffer
[
4096
],
strbuff
[
128
];
WSAQUERYSETW
*
qs
=
NULL
;
HANDLE
hnd
;
PNLA_BLOB
netdata
;
int
ret
;
DWORD
error
,
offset
,
bsize
;
qs
=
(
WSAQUERYSETW
*
)
buffer
;
memset
(
qs
,
0
,
sizeof
(
*
qs
));
/* invalid parameter tests */
ret
=
WSALookupServiceBeginW
(
NULL
,
0
,
&
hnd
);
error
=
WSAGetLastError
();
ok
(
ret
==
SOCKET_ERROR
,
"WSALookupServiceBeginW should have failed
\n
"
);
todo_wine
ok
(
error
==
WSAEFAULT
,
"expected 10014, got %d
\n
"
,
error
);
ret
=
WSALookupServiceBeginW
(
qs
,
0
,
NULL
);
error
=
WSAGetLastError
();
ok
(
ret
==
SOCKET_ERROR
,
"WSALookupServiceBeginW should have failed
\n
"
);
todo_wine
ok
(
error
==
WSAEFAULT
,
"expected 10014, got %d
\n
"
,
error
);
ret
=
WSALookupServiceBeginW
(
qs
,
0
,
&
hnd
);
ok
(
ret
==
SOCKET_ERROR
,
"WSALookupServiceBeginW should have failed
\n
"
);
todo_wine
ok
(
WSAGetLastError
()
==
ERROR_INVALID_PARAMETER
||
broken
(
WSAGetLastError
()
==
WSASERVICE_NOT_FOUND
)
/* win10 1809 */
,
"got error %u
\n
"
,
WSAGetLastError
());
ret
=
WSALookupServiceEnd
(
NULL
);
error
=
WSAGetLastError
();
todo_wine
ok
(
ret
==
SOCKET_ERROR
,
"WSALookupServiceEnd should have failed
\n
"
);
todo_wine
ok
(
error
==
ERROR_INVALID_HANDLE
,
"expected 6, got %d
\n
"
,
error
);
/* standard network list query */
qs
->
dwSize
=
sizeof
(
*
qs
);
hnd
=
(
HANDLE
)
0xdeadbeef
;
ret
=
WSALookupServiceBeginW
(
qs
,
LUP_RETURN_ALL
|
LUP_DEEP
,
&
hnd
);
error
=
WSAGetLastError
();
if
(
ret
&&
error
==
ERROR_INVALID_PARAMETER
)
{
win_skip
(
"the current WSALookupServiceBeginW test is not supported in win <= 2000
\n
"
);
return
;
}
todo_wine
ok
(
!
ret
,
"WSALookupServiceBeginW failed unexpectedly with error %d
\n
"
,
error
);
todo_wine
ok
(
hnd
!=
(
HANDLE
)
0xdeadbeef
,
"Handle was not filled
\n
"
);
offset
=
0
;
do
{
memset
(
qs
,
0
,
sizeof
(
*
qs
));
bsize
=
sizeof
(
buffer
);
if
(
WSALookupServiceNextW
(
hnd
,
0
,
&
bsize
,
qs
)
==
SOCKET_ERROR
)
{
ok
(
WSAGetLastError
()
==
WSA_E_NO_MORE
,
"got error %u
\n
"
,
WSAGetLastError
());
break
;
}
if
(
winetest_debug
<=
1
)
continue
;
WideCharToMultiByte
(
CP_ACP
,
0
,
qs
->
lpszServiceInstanceName
,
-
1
,
strbuff
,
sizeof
(
strbuff
),
NULL
,
NULL
);
trace
(
"Network Name: %s
\n
"
,
strbuff
);
/* network data is written in the blob field */
if
(
qs
->
lpBlob
)
{
/* each network may have multiple NLA_BLOB information structures */
do
{
netdata
=
(
PNLA_BLOB
)
&
qs
->
lpBlob
->
pBlobData
[
offset
];
switch
(
netdata
->
header
.
type
)
{
case
NLA_RAW_DATA
:
trace
(
"
\t
NLA Data Type: NLA_RAW_DATA
\n
"
);
break
;
case
NLA_INTERFACE
:
trace
(
"
\t
NLA Data Type: NLA_INTERFACE
\n
"
);
trace
(
"
\t\t
Type: %d
\n
"
,
netdata
->
data
.
interfaceData
.
dwType
);
trace
(
"
\t\t
Speed: %d
\n
"
,
netdata
->
data
.
interfaceData
.
dwSpeed
);
trace
(
"
\t\t
Adapter Name: %s
\n
"
,
netdata
->
data
.
interfaceData
.
adapterName
);
break
;
case
NLA_802_1X_LOCATION
:
trace
(
"
\t
NLA Data Type: NLA_802_1X_LOCATION
\n
"
);
trace
(
"
\t\t
Information: %s
\n
"
,
netdata
->
data
.
locationData
.
information
);
break
;
case
NLA_CONNECTIVITY
:
switch
(
netdata
->
data
.
connectivity
.
type
)
{
case
NLA_NETWORK_AD_HOC
:
trace
(
"
\t\t
Network Type: AD HOC
\n
"
);
break
;
case
NLA_NETWORK_MANAGED
:
trace
(
"
\t\t
Network Type: Managed
\n
"
);
break
;
case
NLA_NETWORK_UNMANAGED
:
trace
(
"
\t\t
Network Type: Unmanaged
\n
"
);
break
;
case
NLA_NETWORK_UNKNOWN
:
trace
(
"
\t\t
Network Type: Unknown
\n
"
);
}
switch
(
netdata
->
data
.
connectivity
.
internet
)
{
case
NLA_INTERNET_NO
:
trace
(
"
\t\t
Internet connectivity: No
\n
"
);
break
;
case
NLA_INTERNET_YES
:
trace
(
"
\t\t
Internet connectivity: Yes
\n
"
);
break
;
case
NLA_INTERNET_UNKNOWN
:
trace
(
"
\t\t
Internet connectivity: Unknown
\n
"
);
break
;
}
break
;
case
NLA_ICS
:
trace
(
"
\t
NLA Data Type: NLA_ICS
\n
"
);
trace
(
"
\t\t
Speed: %d
\n
"
,
netdata
->
data
.
ICS
.
remote
.
speed
);
trace
(
"
\t\t
Type: %d
\n
"
,
netdata
->
data
.
ICS
.
remote
.
type
);
trace
(
"
\t\t
State: %d
\n
"
,
netdata
->
data
.
ICS
.
remote
.
state
);
WideCharToMultiByte
(
CP_ACP
,
0
,
netdata
->
data
.
ICS
.
remote
.
machineName
,
-
1
,
strbuff
,
sizeof
(
strbuff
),
NULL
,
NULL
);
trace
(
"
\t\t
Machine Name: %s
\n
"
,
strbuff
);
WideCharToMultiByte
(
CP_ACP
,
0
,
netdata
->
data
.
ICS
.
remote
.
sharedAdapterName
,
-
1
,
strbuff
,
sizeof
(
strbuff
),
NULL
,
NULL
);
trace
(
"
\t\t
Shared Adapter Name: %s
\n
"
,
strbuff
);
break
;
default:
trace
(
"
\t
NLA Data Type: Unknown
\n
"
);
break
;
}
}
while
(
offset
);
}
}
while
(
1
);
ret
=
WSALookupServiceEnd
(
hnd
);
ok
(
!
ret
,
"WSALookupServiceEnd failed unexpectedly
\n
"
);
}
static
void
test_WSAEnumNameSpaceProvidersA
(
void
)
{
LPWSANAMESPACE_INFOA
name
=
NULL
;
...
...
@@ -9581,7 +9264,6 @@ START_TEST( sock )
test_UDP
();
test_getservbyname
();
test_WSASocket
();
test_WSADuplicateSocket
();
test_WSAEnumNetworkEvents
();
...
...
@@ -9617,12 +9299,9 @@ START_TEST( sock )
test_sioRoutingInterfaceQuery
();
test_sioAddressListChange
();
test_WSALookupService
();
test_WSAEnumNameSpaceProvidersA
();
test_WSAEnumNameSpaceProvidersW
();
test_WSAAsyncGetServByPort
();
test_WSAAsyncGetServByName
();
test_completion_port
();
test_address_list_query
();
...
...
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