Author: tfaber
Date: Tue Apr 5 12:44:16 2016
New Revision: 71101
URL:
http://svn.reactos.org/svn/reactos?rev=71101&view=rev
Log:
[WS2_32_APITEST]
- Add test for getservbyname
CORE-10440
Added:
trunk/rostests/apitests/ws2_32/getservbyname.c (with props)
Modified:
trunk/rostests/apitests/ws2_32/CMakeLists.txt
trunk/rostests/apitests/ws2_32/getservbyport.c
trunk/rostests/apitests/ws2_32/testlist.c
Modified: trunk/rostests/apitests/ws2_32/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ws2_32/CMakeList…
==============================================================================
--- trunk/rostests/apitests/ws2_32/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/rostests/apitests/ws2_32/CMakeLists.txt [iso-8859-1] Tue Apr 5 12:44:16 2016
@@ -1,6 +1,7 @@
list(APPEND SOURCE
getaddrinfo.c
+ getservbyname.c
getservbyport.c
helpers.c
ioctlsocket.c
Added: trunk/rostests/apitests/ws2_32/getservbyname.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ws2_32/getservby…
==============================================================================
--- trunk/rostests/apitests/ws2_32/getservbyname.c (added)
+++ trunk/rostests/apitests/ws2_32/getservbyname.c [iso-8859-1] Tue Apr 5 12:44:16 2016
@@ -0,0 +1,146 @@
+/*
+ * PROJECT: ReactOS API tests
+ * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
+ * PURPOSE: Test for getservbyname
+ * PROGRAMMER: Thomas Faber <thomas.faber(a)reactos.org>
+ */
+
+#include <apitest.h>
+
+#define WIN32_NO_STATUS
+#define _INC_WINDOWS
+#define COM_NO_WINDOWS_H
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <ws2tcpip.h>
+
+START_TEST(getservbyname)
+{
+ WSADATA WsaData;
+ struct servent *Serv;
+ const struct
+ {
+ PCSTR Name;
+ struct
+ {
+ PCSTR Proto;
+ int Port;
+ PCSTR Name;
+ PCSTR Aliases[5+1];
+ } Protos[3+1];
+ } Tests[] =
+ {
+ { "" },
+ { "xyzzy" },
+ { "http", { { "tcp", 80, "http", {
"www", "www-http" } },
+ { "udp", 0 },
+ { "xyz", 0 } }
},
+ { "smtp", { { "tcp", 25, "smtp", {
"mail" } } } },
+ { "mail", { { "tcp", 25, "smtp", {
"mail" } } } },
+ { "microsoft-ds", { { "tcp", 445, "microsoft-ds",
},
+ { "udp", 445, "microsoft-ds",
} } },
+ { "cmd", { { "tcp", 514, "cmd", {
"shell" } },
+ { "udp", 0 } }
},
+ { "syslog", { { "udp", 514, "syslog"
},
+ { "tcp", 0 } }
},
+ { "directplaysrvr", { { "tcp", 47624,
"directplaysrvr" },
+ { "udp", 47624, "directplaysrvr"
} } },
+ };
+ ULONG i, Proto, Alias;
+ int Error;
+ ULONG ExpectProto;
+
+ /* not yet initialized */
+ Serv = getservbyname(NULL, NULL);
+ Error = WSAGetLastError();
+ ok(Serv == NULL, "Serv = %p\n", Serv);
+ ok(Error == WSANOTINITIALISED, "Error = %d\n", Error);
+
+ Error = WSAStartup(MAKEWORD(2, 2), &WsaData);
+ ok_dec(Error, 0);
+
+ for (i = 0; i < RTL_NUMBER_OF(Tests); i++)
+ {
+ Proto = 0;
+ do
+ {
+ Serv = getservbyname(Tests[i].Name, Tests[i].Protos[Proto].Proto);
+ Error = WSAGetLastError();
+
+ /* For a NULL proto we expect the same as the first array entry */
+ ExpectProto = Proto;
+ if (Tests[i].Protos[Proto].Proto == NULL)
+ {
+ ExpectProto = 0;
+ }
+
+ if (Tests[i].Protos[ExpectProto].Port == 0)
+ {
+ ok(Serv == NULL, "[%s, %s] getservbyname succeeded
unexpectedly\n",
+ Tests[i].Name, Tests[i].Protos[Proto].Proto);
+ ok(Error == WSANO_DATA, "[%s, %s] getservbyname returned error
%d\n",
+ Tests[i].Name, Tests[i].Protos[Proto].Proto, Error);
+ continue;
+ }
+ else
+ {
+ ok(Serv != NULL, "[%s, %s] getservbyname failed with %d\n",
+ Tests[i].Name, Tests[i].Protos[Proto].Proto, Error);
+ }
+
+ if (Serv == NULL)
+ {
+ continue;
+ }
+
+ /* Check name */
+ ok(!strcmp(Serv->s_name, Tests[i].Protos[ExpectProto].Name),
+ "[%s, %s] s_name = '%s', expected '%s'\n",
+ Tests[i].Name, Tests[i].Protos[Proto].Proto, Serv->s_name,
Tests[i].Protos[ExpectProto].Name);
+
+ /* Check aliases */
+ ok(Serv->s_aliases != NULL, "[%s, %s] s_aliases = NULL\n",
+ Tests[i].Name, Tests[i].Protos[Proto].Proto);
+ for (Alias = 0; Serv->s_aliases; Alias++)
+ {
+ if (Alias >= RTL_NUMBER_OF(Tests[i].Protos[ExpectProto].Aliases))
+ {
+ ok(0, "[%s, %s] Too many aliases\n",
+ Tests[i].Name, Tests[i].Protos[Proto].Proto);
+ break;
+ }
+ if (Serv->s_aliases[Alias] == NULL)
+ {
+ ok(Tests[i].Protos[ExpectProto].Aliases[Alias] == NULL,
+ "[%s, %s] getservbyname did not return expected alias
'%s'\n",
+ Tests[i].Name, Tests[i].Protos[Proto].Proto,
Tests[i].Protos[ExpectProto].Aliases[Alias]);
+ break;
+ }
+ if (Tests[i].Protos[ExpectProto].Aliases[Alias] == NULL)
+ {
+ ok(Serv->s_aliases[Alias] == NULL,
+ "[%s, %s] getservbyname returned additional alias
'%s'\n",
+ Tests[i].Name, Tests[i].Protos[Proto].Proto,
Serv->s_aliases[Alias]);
+ break;
+ }
+
+ ok(!strcmp(Serv->s_aliases[Alias],
Tests[i].Protos[ExpectProto].Aliases[Alias]),
+ "[%s, %s] Got alias '%s', expected
'%s'\n",
+ Tests[i].Name, Tests[i].Protos[Proto].Proto,
Serv->s_aliases[Alias],Tests[i].Protos[ExpectProto].Aliases[Alias]);
+ }
+
+ /* Check port */
+ ok(ntohs(Serv->s_port) == Tests[i].Protos[ExpectProto].Port, "[%s,
%s] s_port = %d\n",
+ Tests[i].Name, Tests[i].Protos[Proto].Proto, ntohs(Serv->s_port));
+
+ /* Check proto */
+ ok(!strcmp(Serv->s_proto, Tests[i].Protos[ExpectProto].Proto), "[%s,
%s] s_proto = '%s', expected '%s'\n",
+ Tests[i].Name, Tests[i].Protos[Proto].Proto, Serv->s_proto,
Tests[i].Protos[ExpectProto].Proto);
+ /* We want to include one NULL past the last proto in the array */
+ } while (Tests[i].Protos[Proto++].Proto != NULL);
+ }
+
+ Error = WSACleanup();
+ ok_dec(Error, 0);
+}
Propchange: trunk/rostests/apitests/ws2_32/getservbyname.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/rostests/apitests/ws2_32/getservbyport.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ws2_32/getservby…
==============================================================================
--- trunk/rostests/apitests/ws2_32/getservbyport.c [iso-8859-1] (original)
+++ trunk/rostests/apitests/ws2_32/getservbyport.c [iso-8859-1] Tue Apr 5 12:44:16 2016
@@ -133,8 +133,8 @@
Tests[i].Port, Tests[i].Protos[Proto].Proto, ntohs(Serv->s_port));
/* Check proto */
- ok(Serv->s_proto != NULL, "[%d, %s] s_proto = NULL\n",
- Tests[i].Port, Tests[i].Protos[Proto].Proto);
+ ok(!strcmp(Serv->s_proto, Tests[i].Protos[ExpectProto].Proto), "[%d,
%s] s_proto = '%s', expected '%s'\n",
+ Tests[i].Port, Tests[i].Protos[Proto].Proto, Serv->s_proto,
Tests[i].Protos[ExpectProto].Proto);
/* We want to include one NULL past the last proto in the array */
} while (Tests[i].Protos[Proto++].Proto != NULL);
}
Modified: trunk/rostests/apitests/ws2_32/testlist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ws2_32/testlist.…
==============================================================================
--- trunk/rostests/apitests/ws2_32/testlist.c [iso-8859-1] (original)
+++ trunk/rostests/apitests/ws2_32/testlist.c [iso-8859-1] Tue Apr 5 12:44:16 2016
@@ -4,6 +4,7 @@
#include <apitest.h>
extern void func_getaddrinfo(void);
+extern void func_getservbyname(void);
extern void func_getservbyport(void);
extern void func_ioctlsocket(void);
extern void func_recv(void);
@@ -14,6 +15,7 @@
const struct test winetest_testlist[] =
{
{ "getaddrinfo", func_getaddrinfo },
+ { "getservbyname", func_getservbyname },
{ "getservbyport", func_getservbyport },
{ "ioctlsocket", func_ioctlsocket },
{ "nostartup", func_nostartup },