1
/* tests of the GNIO utility functions */
8
#include <dbus/dbus-glib.h>
12
#include <gio/gunixsocketaddress.h>
13
#endif /* HAVE_GIO_UNIX */
15
#include <telepathy-glib/gnio-util.h>
16
#include <telepathy-glib/util.h>
17
#include <telepathy-glib/gtypes.h>
19
#define IPV4_ADDR "127.0.1.1"
20
#define IPV6_ADDR "::1"
21
#define UNIX_ADDR "/tmp/socket/test/123456"
22
#define ABST_ADDR "\000" "123456" "NOT_COPIED"
23
#define ABST_ADDR_LEN 7
27
test_variant_to_sockaddr_ipv4 (void)
30
GValue value = { 0, };
31
GSocketAddress *sockaddr;
32
GInetSocketAddress *inetaddr;
33
GInetAddress *hostaddr;
38
/* set up an address variant */
39
array = tp_value_array_build (2,
40
G_TYPE_STRING, IPV4_ADDR,
44
g_value_init (&value, TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4);
45
g_value_take_boxed (&value, array);
47
/* convert to a GSocketAddress */
48
sockaddr = tp_g_socket_address_from_variant (TP_SOCKET_ADDRESS_TYPE_IPV4,
50
g_value_unset (&value);
52
/* check the socket address */
53
g_assert_no_error (error);
54
g_assert (sockaddr != NULL);
55
g_assert (G_IS_INET_SOCKET_ADDRESS (sockaddr));
57
inetaddr = G_INET_SOCKET_ADDRESS (sockaddr);
58
hostaddr = g_inet_socket_address_get_address (inetaddr);
60
host = g_inet_address_to_string (hostaddr);
61
port = g_inet_socket_address_get_port (inetaddr);
63
g_assert_cmpstr (host, ==, IPV4_ADDR);
64
g_assert_cmpuint (port, ==, PORT);
67
g_object_unref (sockaddr);
71
test_variant_to_sockaddr_ipv6 (void)
74
GValue value = { 0, };
75
GSocketAddress *sockaddr;
76
GInetSocketAddress *inetaddr;
77
GInetAddress *hostaddr;
82
/* set up an address variant */
83
array = tp_value_array_build (2,
84
G_TYPE_STRING, IPV6_ADDR,
88
g_value_init (&value, TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV6);
89
g_value_take_boxed (&value, array);
91
/* convert to a GSocketAddress */
92
sockaddr = tp_g_socket_address_from_variant (TP_SOCKET_ADDRESS_TYPE_IPV6,
94
g_value_unset (&value);
96
/* check the socket address */
97
g_assert_no_error (error);
98
g_assert (sockaddr != NULL);
99
g_assert (G_IS_INET_SOCKET_ADDRESS (sockaddr));
101
inetaddr = G_INET_SOCKET_ADDRESS (sockaddr);
102
hostaddr = g_inet_socket_address_get_address (inetaddr);
104
host = g_inet_address_to_string (hostaddr);
105
port = g_inet_socket_address_get_port (inetaddr);
107
g_assert_cmpstr (host, ==, IPV6_ADDR);
108
g_assert_cmpuint (port, ==, PORT);
111
g_object_unref (sockaddr);
115
test_sockaddr_to_variant_ipv4 (void)
117
GInetAddress *hostaddr = g_inet_address_new_from_string (IPV4_ADDR);
118
GSocketAddress *sockaddr = g_inet_socket_address_new (hostaddr, PORT);
119
GValue *variant, *value;
121
TpSocketAddressType type;
122
GError *error = NULL;
124
g_object_unref (hostaddr);
126
variant = tp_address_variant_from_g_socket_address (sockaddr, &type, &error);
127
g_object_unref (sockaddr);
129
g_assert_no_error (error);
130
g_assert_cmpuint (type, ==, TP_SOCKET_ADDRESS_TYPE_IPV4);
131
g_assert (G_VALUE_HOLDS (variant, TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4));
133
array = g_value_get_boxed (variant);
134
value = g_value_array_get_nth (array, 0);
136
g_assert (G_VALUE_HOLDS_STRING (value));
137
g_assert_cmpstr (g_value_get_string (value), ==, IPV4_ADDR);
139
value = g_value_array_get_nth (array, 1);
141
g_assert (G_VALUE_HOLDS_UINT (value));
142
g_assert_cmpuint (g_value_get_uint (value), ==, PORT);
144
tp_g_value_slice_free (variant);
148
test_sockaddr_to_variant_ipv6 (void)
150
GInetAddress *hostaddr = g_inet_address_new_from_string (IPV6_ADDR);
151
GSocketAddress *sockaddr = g_inet_socket_address_new (hostaddr, PORT);
152
GValue *variant, *value;
154
TpSocketAddressType type;
155
GError *error = NULL;
157
g_object_unref (hostaddr);
159
variant = tp_address_variant_from_g_socket_address (sockaddr, &type, &error);
160
g_object_unref (sockaddr);
162
g_assert_no_error (error);
163
g_assert_cmpuint (type, ==, TP_SOCKET_ADDRESS_TYPE_IPV6);
164
g_assert (G_VALUE_HOLDS (variant, TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV6));
166
array = g_value_get_boxed (variant);
167
value = g_value_array_get_nth (array, 0);
169
g_assert (G_VALUE_HOLDS_STRING (value));
170
g_assert_cmpstr (g_value_get_string (value), ==, IPV6_ADDR);
172
value = g_value_array_get_nth (array, 1);
174
g_assert (G_VALUE_HOLDS_UINT (value));
175
g_assert_cmpuint (g_value_get_uint (value), ==, PORT);
177
tp_g_value_slice_free (variant);
182
test_variant_to_sockaddr_unix (void)
185
GValue value = { 0, };
186
GSocketAddress *sockaddr;
187
GUnixSocketAddress *unixaddr;
188
guint pathlen = strlen (UNIX_ADDR);
189
GError *error = NULL;
191
array = g_array_sized_new (TRUE, FALSE, sizeof (char), pathlen);
192
g_array_append_vals (array, UNIX_ADDR, pathlen);
194
g_value_init (&value, DBUS_TYPE_G_UCHAR_ARRAY);
195
g_value_take_boxed (&value, array);
197
sockaddr = tp_g_socket_address_from_variant (TP_SOCKET_ADDRESS_TYPE_UNIX,
199
g_value_unset (&value);
201
g_assert_no_error (error);
202
g_assert (G_IS_UNIX_SOCKET_ADDRESS (sockaddr));
204
unixaddr = G_UNIX_SOCKET_ADDRESS (sockaddr);
206
g_assert (g_unix_socket_address_get_is_abstract (unixaddr) == FALSE);
207
g_assert_cmpuint (g_unix_socket_address_get_path_len (unixaddr), ==, pathlen);
208
g_assert_cmpstr (g_unix_socket_address_get_path (unixaddr), ==, UNIX_ADDR);
210
g_object_unref (sockaddr);
214
test_variant_to_sockaddr_abstract_unix (void)
217
GValue value = { 0, };
218
GSocketAddress *sockaddr;
219
GUnixSocketAddress *unixaddr;
220
GError *error = NULL;
222
array = g_array_sized_new (TRUE, FALSE, sizeof (char), ABST_ADDR_LEN);
223
g_array_append_vals (array, ABST_ADDR, ABST_ADDR_LEN);
225
g_value_init (&value, DBUS_TYPE_G_UCHAR_ARRAY);
226
g_value_take_boxed (&value, array);
228
sockaddr = tp_g_socket_address_from_variant (
229
TP_SOCKET_ADDRESS_TYPE_ABSTRACT_UNIX,
231
g_value_unset (&value);
233
g_assert_no_error (error);
234
g_assert (G_IS_UNIX_SOCKET_ADDRESS (sockaddr));
236
unixaddr = G_UNIX_SOCKET_ADDRESS (sockaddr);
238
g_assert (g_unix_socket_address_get_is_abstract (unixaddr) == TRUE);
239
g_assert_cmpuint (g_unix_socket_address_get_path_len (unixaddr), ==,
241
g_assert (memcmp (g_unix_socket_address_get_path (unixaddr), ABST_ADDR,
242
ABST_ADDR_LEN) == 0);
244
g_object_unref (sockaddr);
248
test_sockaddr_to_variant_unix (void)
250
GSocketAddress *sockaddr = g_unix_socket_address_new (UNIX_ADDR);
253
TpSocketAddressType type;
254
GError *error = NULL;
256
variant = tp_address_variant_from_g_socket_address (sockaddr, &type, &error);
257
g_object_unref (sockaddr);
259
g_assert_no_error (error);
260
g_assert_cmpuint (type, ==, TP_SOCKET_ADDRESS_TYPE_UNIX);
261
g_assert (G_VALUE_HOLDS (variant, DBUS_TYPE_G_UCHAR_ARRAY));
263
array = g_value_get_boxed (variant);
265
g_assert_cmpuint (array->len, ==, strlen (UNIX_ADDR));
266
g_assert_cmpstr (array->data, ==, UNIX_ADDR);
268
tp_g_value_slice_free (variant);
272
test_sockaddr_to_variant_abstract_unix (void)
274
GSocketAddress *sockaddr = g_unix_socket_address_new_abstract (
275
ABST_ADDR, ABST_ADDR_LEN);
278
TpSocketAddressType type;
279
GError *error = NULL;
281
variant = tp_address_variant_from_g_socket_address (sockaddr, &type, &error);
282
g_object_unref (sockaddr);
284
g_assert_no_error (error);
285
g_assert_cmpuint (type, ==, TP_SOCKET_ADDRESS_TYPE_ABSTRACT_UNIX);
286
g_assert (G_VALUE_HOLDS (variant, DBUS_TYPE_G_UCHAR_ARRAY));
288
array = g_value_get_boxed (variant);
290
g_assert_cmpuint (array->len, ==, ABST_ADDR_LEN);
291
g_assert (memcmp (array->data, ABST_ADDR, ABST_ADDR_LEN) == 0);
293
tp_g_value_slice_free (variant);
295
#endif /* HAVE_GIO_UNIX */
298
main (int argc, char **argv)
301
dbus_g_type_specialized_init ();
303
test_variant_to_sockaddr_ipv4 ();
304
test_variant_to_sockaddr_ipv6 ();
305
test_sockaddr_to_variant_ipv4 ();
306
test_sockaddr_to_variant_ipv6 ();
308
test_variant_to_sockaddr_unix ();
309
test_variant_to_sockaddr_abstract_unix ();
310
test_sockaddr_to_variant_unix ();
311
test_sockaddr_to_variant_abstract_unix ();
312
#endif /* HAVE_GIO_UNIX */