2 * PROJECT: ReactOS API tests
3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Test for getservbyname
5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
10 #define WIN32_NO_STATUS
12 #define COM_NO_WINDOWS_H
18 START_TEST(getservbyname
)
36 { "http", { { "tcp", 80, "http", { "www", "www-http" } },
39 { "smtp", { { "tcp", 25, "smtp", { "mail" } } } },
40 { "mail", { { "tcp", 25, "smtp", { "mail" } } } },
41 { "microsoft-ds", { { "tcp", 445, "microsoft-ds", },
42 { "udp", 445, "microsoft-ds", } } },
43 { "cmd", { { "tcp", 514, "cmd", { "shell" } },
45 { "syslog", { { "udp", 514, "syslog" },
47 { "directplaysrvr", { { "tcp", 47624, "directplaysrvr" },
48 { "udp", 47624, "directplaysrvr" } } },
50 ULONG i
, Proto
, Alias
;
54 /* not yet initialized */
55 Serv
= getservbyname(NULL
, NULL
);
56 Error
= WSAGetLastError();
57 ok(Serv
== NULL
, "Serv = %p\n", Serv
);
58 ok(Error
== WSANOTINITIALISED
, "Error = %d\n", Error
);
60 Error
= WSAStartup(MAKEWORD(2, 2), &WsaData
);
63 for (i
= 0; i
< RTL_NUMBER_OF(Tests
); i
++)
68 Serv
= getservbyname(Tests
[i
].Name
, Tests
[i
].Protos
[Proto
].Proto
);
69 Error
= WSAGetLastError();
71 /* For a NULL proto we expect the same as the first array entry */
73 if (Tests
[i
].Protos
[Proto
].Proto
== NULL
)
78 if (Tests
[i
].Protos
[ExpectProto
].Port
== 0)
80 ok(Serv
== NULL
, "[%s, %s] getservbyname succeeded unexpectedly\n",
81 Tests
[i
].Name
, Tests
[i
].Protos
[Proto
].Proto
);
82 ok(Error
== WSANO_DATA
, "[%s, %s] getservbyname returned error %d\n",
83 Tests
[i
].Name
, Tests
[i
].Protos
[Proto
].Proto
, Error
);
88 ok(Serv
!= NULL
, "[%s, %s] getservbyname failed with %d\n",
89 Tests
[i
].Name
, Tests
[i
].Protos
[Proto
].Proto
, Error
);
98 ok(!strcmp(Serv
->s_name
, Tests
[i
].Protos
[ExpectProto
].Name
),
99 "[%s, %s] s_name = '%s', expected '%s'\n",
100 Tests
[i
].Name
, Tests
[i
].Protos
[Proto
].Proto
, Serv
->s_name
, Tests
[i
].Protos
[ExpectProto
].Name
);
103 ok(Serv
->s_aliases
!= NULL
, "[%s, %s] s_aliases = NULL\n",
104 Tests
[i
].Name
, Tests
[i
].Protos
[Proto
].Proto
);
105 for (Alias
= 0; Serv
->s_aliases
; Alias
++)
107 if (Alias
>= RTL_NUMBER_OF(Tests
[i
].Protos
[ExpectProto
].Aliases
))
109 ok(0, "[%s, %s] Too many aliases\n",
110 Tests
[i
].Name
, Tests
[i
].Protos
[Proto
].Proto
);
113 if (Serv
->s_aliases
[Alias
] == NULL
)
115 ok(Tests
[i
].Protos
[ExpectProto
].Aliases
[Alias
] == NULL
,
116 "[%s, %s] getservbyname did not return expected alias '%s'\n",
117 Tests
[i
].Name
, Tests
[i
].Protos
[Proto
].Proto
, Tests
[i
].Protos
[ExpectProto
].Aliases
[Alias
]);
120 if (Tests
[i
].Protos
[ExpectProto
].Aliases
[Alias
] == NULL
)
122 ok(Serv
->s_aliases
[Alias
] == NULL
,
123 "[%s, %s] getservbyname returned additional alias '%s'\n",
124 Tests
[i
].Name
, Tests
[i
].Protos
[Proto
].Proto
, Serv
->s_aliases
[Alias
]);
128 ok(!strcmp(Serv
->s_aliases
[Alias
], Tests
[i
].Protos
[ExpectProto
].Aliases
[Alias
]),
129 "[%s, %s] Got alias '%s', expected '%s'\n",
130 Tests
[i
].Name
, Tests
[i
].Protos
[Proto
].Proto
, Serv
->s_aliases
[Alias
],Tests
[i
].Protos
[ExpectProto
].Aliases
[Alias
]);
134 ok(ntohs(Serv
->s_port
) == Tests
[i
].Protos
[ExpectProto
].Port
, "[%s, %s] s_port = %d\n",
135 Tests
[i
].Name
, Tests
[i
].Protos
[Proto
].Proto
, ntohs(Serv
->s_port
));
138 ok(!strcmp(Serv
->s_proto
, Tests
[i
].Protos
[ExpectProto
].Proto
), "[%s, %s] s_proto = '%s', expected '%s'\n",
139 Tests
[i
].Name
, Tests
[i
].Protos
[Proto
].Proto
, Serv
->s_proto
, Tests
[i
].Protos
[ExpectProto
].Proto
);
140 /* We want to include one NULL past the last proto in the array */
141 } while (Tests
[i
].Protos
[Proto
++].Proto
!= NULL
);
144 Error
= WSACleanup();