Zebediah Figura : ws2_32/tests: Add more tests for WSASocket() parameters.
Alexandre Julliard
julliard at winehq.org
Fri Sep 25 14:52:53 CDT 2020
Module: wine
Branch: master
Commit: 088b7c5814e8aee5676d0c999a2995533f21a4ed
URL: https://source.winehq.org/git/wine.git/?a=commit;h=088b7c5814e8aee5676d0c999a2995533f21a4ed
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Thu Sep 24 22:21:03 2020 -0500
ws2_32/tests: Add more tests for WSASocket() parameters.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ws2_32/tests/sock.c | 165 +++++++++++++++++++----------------------------
1 file changed, 68 insertions(+), 97 deletions(-)
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index 7835246397..cbbc1db1ee 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -2471,107 +2471,78 @@ static void test_WSASocket(void)
int items, err, size, socktype, i, j;
UINT pi_size;
- SetLastError(0xdeadbeef);
- ok(WSASocketA(0, 0, 0, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAEINVAL, "Expected 10022, received %d\n", err);
-
- sock = WSASocketA(AF_INET, 0, 0, NULL, 0, 0);
- ok(sock != INVALID_SOCKET, "WSASocketA should have succeeded\n");
- closesocket(sock);
-
- sock = WSASocketA(AF_INET, SOCK_STREAM, 0, NULL, 0, 0);
- ok(sock != INVALID_SOCKET, "WSASocketA should have succeeded\n");
- closesocket(sock);
-
- SetLastError(0xdeadbeef);
- ok(WSASocketA(0, SOCK_STREAM, -1, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAEPROTONOSUPPORT, "Expected 10043, received %d\n", err);
-
- SetLastError(0xdeadbeef);
- ok(WSASocketA(0, -1, IPPROTO_UDP, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAESOCKTNOSUPPORT, "Expected 10044, received %d\n", err);
-
- SetLastError(0xdeadbeef);
- ok(WSASocketA(0, -1, 0, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAEINVAL, "Expected 10022, received %d\n", err);
-
- SetLastError(0xdeadbeef);
- ok(WSASocketA(AF_INET, -1, 0, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAESOCKTNOSUPPORT, "Expected 10044, received %d\n", err);
-
- SetLastError(0xdeadbeef);
- ok(WSASocketA(AF_INET, 0, -1, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAEPROTONOSUPPORT, "Expected 10043, received %d\n", err);
-
- SetLastError(0xdeadbeef);
- ok(WSASocketA(0, -1, -1, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAESOCKTNOSUPPORT, "Expected 10044, received %d\n", err);
-
- SetLastError(0xdeadbeef);
- ok(WSASocketA(-1, SOCK_STREAM, IPPROTO_UDP, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAEAFNOSUPPORT, "Expected 10047, received %d\n", err);
-
- sock = WSASocketA(AF_INET, 0, IPPROTO_TCP, NULL, 0, 0);
- ok(sock != INVALID_SOCKET, "WSASocketA should have succeeded\n");
- closesocket(sock);
-
- SetLastError(0xdeadbeef);
- ok(WSASocketA(0, SOCK_STREAM, 0, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAEINVAL, "Expected 10022, received %d\n", err);
-
- SetLastError(0xdeadbeef);
- ok(WSASocketA(0, 0, 0xdead, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAEPROTONOSUPPORT, "Expected 10043, received %d\n", err);
-
- SetLastError(0xdeadbeef);
- ok(WSASocketA(AF_INET, 0xdead, 0, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAESOCKTNOSUPPORT, "Expected 10044, received %d\n", err);
+ static const struct
+ {
+ int family, type, protocol;
+ DWORD error;
+ int ret_family, ret_type, ret_protocol;
+ }
+ tests[] =
+ {
+ /* 0 */
+ {0xdead, SOCK_STREAM, IPPROTO_TCP, WSAEAFNOSUPPORT},
+ {-1, SOCK_STREAM, IPPROTO_TCP, WSAEAFNOSUPPORT},
+ {AF_INET, 0xdead, IPPROTO_TCP, WSAESOCKTNOSUPPORT},
+ {AF_INET, -1, IPPROTO_TCP, WSAESOCKTNOSUPPORT},
+ {AF_INET, SOCK_STREAM, 0xdead, WSAEPROTONOSUPPORT},
+ {AF_INET, SOCK_STREAM, -1, WSAEPROTONOSUPPORT},
+ {0xdead, 0xdead, IPPROTO_TCP, WSAESOCKTNOSUPPORT},
+ {0xdead, SOCK_STREAM, 0xdead, WSAEAFNOSUPPORT},
+ {AF_INET, 0xdead, 0xdead, WSAESOCKTNOSUPPORT},
+ {0xdead, SOCK_STREAM, IPPROTO_UDP, WSAEAFNOSUPPORT},
+
+ /* 10 */
+ {AF_INET, SOCK_STREAM, 0, 0, AF_INET, SOCK_STREAM, IPPROTO_TCP},
+ {AF_INET, SOCK_DGRAM, 0, 0, AF_INET, SOCK_DGRAM, IPPROTO_UDP},
+ {AF_INET, 0xdead, 0, WSAESOCKTNOSUPPORT},
+ {AF_INET, 0, IPPROTO_TCP, 0, AF_INET, SOCK_STREAM, IPPROTO_TCP},
+ {AF_INET, 0, IPPROTO_UDP, 0, AF_INET, SOCK_DGRAM, IPPROTO_UDP},
+ {AF_INET, 0, 0xdead, WSAEPROTONOSUPPORT},
+ {AF_INET, 0, 0, 0, AF_INET, SOCK_STREAM, IPPROTO_TCP},
+ {AF_INET, SOCK_STREAM, IPPROTO_UDP, WSAEPROTONOSUPPORT},
+ {AF_INET, SOCK_DGRAM, IPPROTO_TCP, WSAEPROTONOSUPPORT},
+
+ /* 19 */
+ {AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP, 0, AF_INET, SOCK_STREAM, IPPROTO_TCP},
+ {AF_UNSPEC, SOCK_STREAM, 0xdead, WSAEPROTONOSUPPORT},
+ {AF_UNSPEC, 0xdead, IPPROTO_UDP, WSAESOCKTNOSUPPORT},
+ {AF_UNSPEC, SOCK_STREAM, 0, WSAEINVAL},
+ {AF_UNSPEC, SOCK_DGRAM, 0, WSAEINVAL},
+ {AF_UNSPEC, 0xdead, 0, WSAEINVAL},
+ {AF_UNSPEC, 0, IPPROTO_TCP, 0, AF_INET, SOCK_STREAM, IPPROTO_TCP},
+ {AF_UNSPEC, 0, IPPROTO_UDP, 0, AF_INET, SOCK_DGRAM, IPPROTO_UDP},
+ {AF_UNSPEC, 0, 0xdead, WSAEPROTONOSUPPORT},
+ {AF_UNSPEC, 0, 0, WSAEINVAL},
+ };
- SetLastError(0xdeadbeef);
- ok(WSASocketA(0, 0xdead, 0, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAEINVAL, "Expected 10022, received %d\n", err);
+ for (i = 0; i < ARRAY_SIZE(tests); ++i)
+ {
+ SetLastError( 0xdeadbeef );
+ sock = WSASocketA( tests[i].family, tests[i].type, tests[i].protocol, NULL, 0, 0 );
+ todo_wine_if (!tests[i].error || i == 7)
+ ok(WSAGetLastError() == tests[i].error, "Test %u: got wrong error %u\n", i, WSAGetLastError());
+ if (tests[i].error)
+ {
+ ok(sock == INVALID_SOCKET, "Test %u: expected failure\n", i);
+ }
+ else
+ {
+ WSAPROTOCOL_INFOA info;
- sock = WSASocketA(0, 0, IPPROTO_TCP, NULL, 0, 0);
- ok(sock != INVALID_SOCKET, "WSASocketA should have succeeded\n");
- closesocket(sock);
+ todo_wine_if (i == 19) ok(sock != INVALID_SOCKET, "Text %u: expected success\n", i);
+ if (sock == INVALID_SOCKET) continue;
- /* SOCK_STREAM does not support IPPROTO_UDP */
- SetLastError(0xdeadbeef);
- ok(WSASocketA(AF_INET, SOCK_STREAM, IPPROTO_UDP, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAEPROTONOSUPPORT, "Expected 10043, received %d\n", err);
+ size = sizeof(info);
+ err = getsockopt( sock, SOL_SOCKET, SO_PROTOCOL_INFOA, (char *)&info, &size );
+ ok(!err, "Test %u: getsockopt failed, error %u\n", i, WSAGetLastError());
+ ok(info.iAddressFamily == tests[i].ret_family, "Test %u: got wrong family %d\n", i, info.iAddressFamily);
+ ok(info.iSocketType == tests[i].ret_type, "Test %u: got wrong type %d\n", i, info.iSocketType);
+ todo_wine_if (i == 10 || i == 11 || i == 16)
+ ok(info.iProtocol == tests[i].ret_protocol, "Test %u: got wrong protocol %d\n", i, info.iProtocol);
- /* SOCK_DGRAM does not support IPPROTO_TCP */
- SetLastError(0xdeadbeef);
- ok(WSASocketA(AF_INET, SOCK_DGRAM, IPPROTO_TCP, NULL, 0, 0) == INVALID_SOCKET,
- "WSASocketA should have failed\n");
- err = WSAGetLastError();
- ok(err == WSAEPROTONOSUPPORT, "Expected 10043, received %d\n", err);
+ closesocket( sock );
+ }
+ }
/* Set pi_size explicitly to a value below 2*sizeof(WSAPROTOCOL_INFOA)
* to avoid a crash on win98.
More information about the wine-cvs
mailing list