Zebediah Figura : ws2_32/tests: Add tests for WSAStartup().
Alexandre Julliard
julliard at winehq.org
Tue Feb 1 15:21:33 CST 2022
Module: wine
Branch: master
Commit: 155449c5d1d8c12114b2cdda2855e28c158e271f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=155449c5d1d8c12114b2cdda2855e28c158e271f
Author: Zebediah Figura <zfigura at codeweavers.com>
Date: Tue Feb 1 00:20:46 2022 -0600
ws2_32/tests: Add tests for WSAStartup().
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ws2_32/tests/protocol.c | 99 ++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 95 insertions(+), 4 deletions(-)
diff --git a/dlls/ws2_32/tests/protocol.c b/dlls/ws2_32/tests/protocol.c
index 5597e3df854..a23cf51a8bd 100644
--- a/dlls/ws2_32/tests/protocol.c
+++ b/dlls/ws2_32/tests/protocol.c
@@ -2815,10 +2815,86 @@ static void test_WSCGetProviderPath(void)
ok(len == 256, "Got unexpected len %d.\n", len);
}
+static void test_startup(void)
+{
+ unsigned int i;
+ WSADATA data;
+ int ret;
+
+ static const struct
+ {
+ WORD version;
+ WORD ret_version;
+ }
+ tests[] =
+ {
+ {MAKEWORD(0, 0), MAKEWORD(2, 2)},
+ {MAKEWORD(0, 1), MAKEWORD(2, 2)},
+ {MAKEWORD(1, 0), MAKEWORD(1, 0)},
+ {MAKEWORD(1, 1), MAKEWORD(1, 1)},
+ {MAKEWORD(1, 2), MAKEWORD(1, 1)},
+ {MAKEWORD(1, 0xff), MAKEWORD(1, 1)},
+ {MAKEWORD(2, 0), MAKEWORD(2, 0)},
+ {MAKEWORD(2, 1), MAKEWORD(2, 1)},
+ {MAKEWORD(2, 2), MAKEWORD(2, 2)},
+ {MAKEWORD(2, 3), MAKEWORD(2, 2)},
+ {MAKEWORD(2, 0xff), MAKEWORD(2, 2)},
+ {MAKEWORD(3, 0), MAKEWORD(2, 2)},
+ {MAKEWORD(0xff, 0), MAKEWORD(2, 2)},
+ };
+
+ for (i = 0; i < ARRAY_SIZE(tests); ++i)
+ {
+ winetest_push_context("Version %#x", tests[i].version);
+
+ memset(&data, 0xcc, sizeof(data));
+ data.lpVendorInfo = (void *)0xdeadbeef;
+ ret = WSAStartup(tests[i].version, &data);
+ ok(ret == (LOBYTE(tests[i].version) ? 0 : WSAVERNOTSUPPORTED), "got %d\n", ret);
+ todo_wine_if (tests[i].version != tests[i].ret_version)
+ ok(data.wVersion == tests[i].ret_version, "got version %#x\n", data.wVersion);
+ if (!ret)
+ {
+ ret = WSAStartup(tests[i].version, &data);
+ ok(!ret, "got %d\n", ret);
+
+ WSASetLastError(0xdeadbeef);
+ ret = WSACleanup();
+ ok(!ret, "got %d\n", ret);
+ todo_wine ok(!WSAGetLastError(), "got error %u\n", WSAGetLastError());
+
+ WSASetLastError(0xdeadbeef);
+ ret = WSACleanup();
+ ok(!ret, "got %d\n", ret);
+ todo_wine ok(!WSAGetLastError(), "got error %u\n", WSAGetLastError());
+ }
+ ok(data.lpVendorInfo == (void *)0xdeadbeef, "got vendor info %p\n", data.lpVendorInfo);
+ todo_wine_if (ret)
+ {
+ ok(data.wHighVersion == 0x202, "got maximum version %#x\n", data.wHighVersion);
+ ok(!strcmp(data.szDescription, "WinSock 2.0"), "got description %s\n", debugstr_a(data.szDescription));
+ ok(!strcmp(data.szSystemStatus, "Running"), "got status %s\n", debugstr_a(data.szSystemStatus));
+ }
+ todo_wine ok(data.iMaxSockets == (LOBYTE(tests[i].version) == 1 ? 32767 : 0), "got maximum sockets %u\n", data.iMaxSockets);
+ todo_wine ok(data.iMaxUdpDg == (LOBYTE(tests[i].version) == 1 ? 65467 : 0), "got maximum datagram size %u\n", data.iMaxUdpDg);
+
+ WSASetLastError(0xdeadbeef);
+ ret = WSACleanup();
+ ok(ret == -1, "got %d\n", ret);
+ ok(WSAGetLastError() == WSANOTINITIALISED, "got error %u\n", WSAGetLastError());
+
+ ret = WSAStartup(tests[i].version, NULL);
+ todo_wine_if (LOBYTE(tests[i].version))
+ ok(ret == (LOBYTE(tests[i].version) ? WSAEFAULT : WSAVERNOTSUPPORTED), "got %d\n", ret);
+
+ winetest_pop_context();
+ }
+}
+
START_TEST( protocol )
{
WSADATA data;
- WORD version = MAKEWORD( 2, 2 );
+ int ret;
pFreeAddrInfoExW = (void *)GetProcAddress(GetModuleHandleA("ws2_32"), "FreeAddrInfoExW");
pGetAddrInfoExOverlappedResult = (void *)GetProcAddress(GetModuleHandleA("ws2_32"), "GetAddrInfoExOverlappedResult");
@@ -2830,7 +2906,8 @@ START_TEST( protocol )
pInetPtonW = (void *)GetProcAddress(GetModuleHandleA("ws2_32"), "InetPtonW");
pWSCGetProviderInfo = (void *)GetProcAddress(GetModuleHandleA("ws2_32"), "WSCGetProviderInfo");
- if (WSAStartup( version, &data )) return;
+ ret = WSAStartup(0x202, &data);
+ ok(!ret, "got %d\n", ret);
test_WSAEnumProtocolsA();
test_WSAEnumProtocolsW();
@@ -2839,8 +2916,6 @@ START_TEST( protocol )
test_getservbyname();
test_WSALookupService();
- test_WSAAsyncGetServByPort();
- test_WSAAsyncGetServByName();
test_inet_ntoa();
test_inet_pton();
@@ -2862,4 +2937,20 @@ START_TEST( protocol )
test_WSAEnumNameSpaceProvidersW();
test_WSCGetProviderInfo();
test_WSCGetProviderPath();
+
+ WSACleanup();
+
+ /* These tests are finnicky. If WSAStartup() is ever called with a
+ * version below 2.2, it causes getaddrinfo() to behave differently. */
+
+ test_startup();
+
+ /* And if WSAAsyncGetServBy*() is ever called, it somehow causes
+ * WSAStartup() to succeed with 0.1 instead of failing. */
+
+ ret = WSAStartup(0x202, &data);
+ ok(!ret, "got %d\n", ret);
+
+ test_WSAAsyncGetServByPort();
+ test_WSAAsyncGetServByName();
}
More information about the wine-cvs
mailing list