1
/* vim:ts=8:sts=8:sw=4:noai:noexpandtab
3
* unit tests for portable function to enumerate network names.
5
* Copyright (c) 2010 Miru Limited.
7
* This library is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
12
* This library is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with this library; if not, write to the Free Software
19
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23
# include <sys/socket.h>
26
# include <ws2tcpip.h>
36
# define COMPARE_GETNETENT
39
#define GETNETBYNAME_DEBUG
40
#include "getnetbyname.c"
68
START_TEST (test_getnetbyname_pass_001)
70
const char loopback[] = "loopback";
72
fail_if (NULL == pgm_getnetbyname (loopback), "getnetbyname failed");
76
START_TEST (test_getnetbyname_fail_001)
78
fail_unless (NULL == pgm_getnetbyname (NULL), "getnetbyname failed");
82
START_TEST (test_getnetbyname_fail_002)
84
const char unknown[] = "qwertyuiop";
86
fail_unless (NULL == pgm_getnetbyname (unknown), "getnetbyname failed");
91
* struct pgm_netent_t*
92
* _pgm_compat_getnetent (void)
95
START_TEST (test_getnetent_pass_001)
98
struct pgm_netent_t* ne;
99
#ifdef COMPARE_GETNETENT
103
_pgm_compat_setnetent();
104
#ifdef COMPARE_GETNETENT
107
while (ne = _pgm_compat_getnetent()) {
111
#ifdef COMPARE_GETNETENT
114
g_warning ("native ne = (null");
117
/* official network name */
118
fail_if (NULL == ne->n_name, "no official name");
119
g_debug ("%-6dn_name = %s", i++, ne->n_name);
120
#ifdef COMPARE_GETNETENT
122
fail_unless (0 == strcmp (ne->n_name, nne->n_name), "official name mismatch");
126
fail_if (NULL == ne->n_aliases, "invalid aliases pointer");
129
strcpy (buffer, *p++);
131
strcat (buffer, ", ");
132
strcat (buffer, *p++);
135
strcpy (buffer, "(nil)");
136
g_debug (" n_aliases = %s", buffer);
137
#ifdef COMPARE_GETNETENT
141
fail_if (NULL == nne->n_aliases, "invalid aliases pointer");
144
strcpy (nbuffer, *p++);
146
strcat (nbuffer, ", ");
147
strcat (nbuffer, *p++);
150
strcpy (nbuffer, "(nil)");
151
fail_unless (0 == strcmp (buffer, nbuffer), "aliases mismatch");
155
/* net address type */
156
fail_unless (AF_INET == ne->n_net.ss_family || AF_INET6 == ne->n_net.ss_family, "invalid address family");
157
if (AF_INET == ne->n_net.ss_family) {
158
struct sockaddr_in sa;
161
g_debug (" n_addrtype = AF_INET");
162
#ifdef COMPARE_GETNETENT
163
fail_unless (ne->n_net.ss_family == nne->n_addrtype, "address family mismatch");
166
memcpy (&sa, &ne->n_net, sizeof (sa));
167
fail_unless (0 == getnameinfo ((struct sockaddr*)&sa, sizeof (sa),
168
buffer, sizeof (buffer),
170
NI_NUMERICHOST), "getnameinfo failed");
171
g_debug (" n_net = %s", buffer);
172
#ifdef COMPARE_GETNETENT
173
net = pgm_inet_makeaddr (nne->n_net, 0);
174
fail_unless (0 == memcmp (&sa.sin_addr, &net, sizeof (struct in_addr)), "network address mismatch");
177
struct sockaddr_in6 sa6;
178
g_debug (" n_addrtype = AF_INET6");
179
#ifdef COMPARE_GETNETENT
180
if (ne->n_net.ss_family != nne->n_addrtype)
181
g_warning ("native address type not AF_INET6");
183
memcpy (&sa6, &ne->n_net, sizeof (sa6));
184
fail_unless (0 == getnameinfo ((struct sockaddr*)&sa6, sizeof (sa6),
185
buffer, sizeof (buffer),
187
NI_NUMERICHOST), "getnameinfo failed");
188
g_debug (" n_net = %s", buffer);
191
_pgm_compat_endnetent();
192
#ifdef COMPARE_GETNETENT
201
make_test_suite (void)
205
s = suite_create (__FILE__);
206
TCase* tc_getnetbyname = tcase_create ("getnetbyname");
207
suite_add_tcase (s, tc_getnetbyname);
208
tcase_add_checked_fixture (tc_getnetbyname, mock_setup, mock_teardown);
209
tcase_add_test (tc_getnetbyname, test_getnetbyname_pass_001);
210
tcase_add_test (tc_getnetbyname, test_getnetbyname_fail_001);
211
tcase_add_test (tc_getnetbyname, test_getnetbyname_fail_002);
212
tcase_add_test (tc_getnetbyname, test_getnetent_pass_001);
218
make_master_suite (void)
220
Suite* s = suite_create ("Master");
228
WORD wVersionRequested = MAKEWORD (2, 2);
230
g_assert (0 == WSAStartup (wVersionRequested, &wsaData));
231
g_assert (LOBYTE (wsaData.wVersion) == 2 && HIBYTE (wsaData.wVersion) == 2);
234
SRunner* sr = srunner_create (make_master_suite ());
235
srunner_add_suite (sr, make_test_suite ());
236
srunner_run_all (sr, CK_ENV);
237
int number_failed = srunner_ntests_failed (sr);
239
pgm_messages_shutdown();
243
return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;