Bruno Jesus : ws2_32/tests: Add SO_PROTOCOL_INFO tests.
Alexandre Julliard
julliard at winehq.org
Thu Aug 29 13:18:14 CDT 2013
Module: wine
Branch: master
Commit: 4ce3ddedb916eb1d7a0b7d63b1a64b3e00169b06
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4ce3ddedb916eb1d7a0b7d63b1a64b3e00169b06
Author: Bruno Jesus <00cpxxx at gmail.com>
Date: Wed Aug 28 21:19:43 2013 -0300
ws2_32/tests: Add SO_PROTOCOL_INFO tests.
---
dlls/ws2_32/tests/sock.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 87 insertions(+), 0 deletions(-)
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index 5ce4959..5d80fca 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -1105,6 +1105,18 @@ static void test_set_getsockopt(void)
int timeout;
LINGER lingval;
int size;
+ WSAPROTOCOL_INFOA infoA;
+ WSAPROTOCOL_INFOW infoW;
+ char providername[WSAPROTOCOL_LEN + 1];
+ struct _prottest
+ {
+ int family, type, proto;
+ } prottest[] = {
+ {AF_INET, SOCK_STREAM, IPPROTO_TCP},
+ {AF_INET, SOCK_DGRAM, IPPROTO_UDP},
+ {AF_INET6, SOCK_STREAM, IPPROTO_TCP},
+ {AF_INET6, SOCK_DGRAM, IPPROTO_UDP}
+ };
s = socket(AF_INET, SOCK_STREAM, 0);
ok(s!=INVALID_SOCKET, "socket() failed error: %d\n", WSAGetLastError());
@@ -1221,6 +1233,81 @@ todo_wine
err, WSAGetLastError());
closesocket(s);
+
+ /* test SO_PROTOCOL_INFOA invalid parameters */
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ ok(getsockopt(s, SOL_SOCKET, SO_PROTOCOL_INFOA, NULL, NULL),
+ "getsockopt should have failed\n");
+ err = WSAGetLastError();
+todo_wine
+ ok(err == WSAEFAULT, "expected 10014, got %d instead\n", err);
+ ok(getsockopt(s, SOL_SOCKET, SO_PROTOCOL_INFOA, (char *) &infoA, NULL),
+ "getsockopt should have failed\n");
+ err = WSAGetLastError();
+todo_wine
+ ok(err == WSAEFAULT, "expected 10014, got %d instead\n", err);
+ ok(getsockopt(s, SOL_SOCKET, SO_PROTOCOL_INFOA, NULL, &size),
+ "getsockopt should have failed\n");
+ err = WSAGetLastError();
+todo_wine
+ ok(err == WSAEFAULT, "expected 10014, got %d instead\n", err);
+
+ size = sizeof(WSAPROTOCOL_INFOA) / 2;
+ ok(getsockopt(s, SOL_SOCKET, SO_PROTOCOL_INFOA, (char *) &infoA, &size),
+ "getsockopt should have failed\n");
+ err = WSAGetLastError();
+todo_wine
+ ok(err == WSAEFAULT, "expected 10014, got %d instead\n", err);
+ closesocket(s);
+
+ /* test SO_PROTOCOL_INFO structure returned for different protocols */
+ for (i = 0; i < sizeof(prottest) / sizeof(prottest[0]); i++)
+ {
+ s = socket(prottest[i].family, prottest[i].type, prottest[i].proto);
+ if (s == INVALID_SOCKET && prottest[i].family == AF_INET6) continue;
+
+ ok(s != INVALID_SOCKET, "Failed to create socket: %d\n",
+ WSAGetLastError());
+
+ /* compare both A and W version */
+ infoA.szProtocol[0] = 0;
+ size = sizeof(WSAPROTOCOL_INFOA);
+ err = getsockopt(s, SOL_SOCKET, SO_PROTOCOL_INFOA, (char *) &infoA, &size);
+todo_wine
+ ok(!err,"getsockopt failed with %d\n", WSAGetLastError());
+
+ infoW.szProtocol[0] = 0;
+ size = sizeof(WSAPROTOCOL_INFOW);
+ err = getsockopt(s, SOL_SOCKET, SO_PROTOCOL_INFOW, (char *) &infoW, &size);
+todo_wine
+ ok(!err,"getsockopt failed with %d\n", WSAGetLastError());
+
+ trace("provider name '%s', family %d, type %d, proto %d\n",
+ infoA.szProtocol, prottest[i].family, prottest[i].type, prottest[i].proto);
+
+ todo_wine {
+ ok(infoA.szProtocol[0], "WSAPROTOCOL_INFOA was not filled\n");
+ ok(infoW.szProtocol[0], "WSAPROTOCOL_INFOW was not filled\n");
+ }
+
+ WideCharToMultiByte(CP_ACP, 0, infoW.szProtocol, -1,
+ providername, sizeof(providername), NULL, NULL);
+ ok(!strcmp(infoA.szProtocol,providername),
+ "different provider names '%s' != '%s'\n", infoA.szProtocol, providername);
+
+ todo_wine {
+ ok(!memcmp(&infoA, &infoW, FIELD_OFFSET(WSAPROTOCOL_INFOA, szProtocol)),
+ "SO_PROTOCOL_INFO[A/W] comparison failed\n");
+ ok(infoA.iAddressFamily == prottest[i].family, "socket family invalid, expected %d received %d\n",
+ prottest[i].family, infoA.iAddressFamily);
+ ok(infoA.iSocketType == prottest[i].type, "socket type invalid, expected %d received %d\n",
+ prottest[i].type, infoA.iSocketType);
+ ok(infoA.iProtocol == prottest[i].proto, "socket protocol invalid, expected %d received %d\n",
+ prottest[i].proto, infoA.iProtocol);
+ }
+
+ closesocket(s);
+ }
}
static void test_so_reuseaddr(void)
More information about the wine-cvs
mailing list