| 
									
										
										
										
											2012-08-19 02:22:59 -04:00
										 |  |  | /* Unit tests for GInetAddress
 | 
					
						
							|  |  |  |  * Copyright (C) 2012 Red Hat, Inc | 
					
						
							|  |  |  |  * Author: Matthias Clasen | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2022-11-02 12:34:19 +00:00
										 |  |  |  * SPDX-License-Identifier: LicenseRef-old-glib-tests | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2012-08-19 02:22:59 -04:00
										 |  |  |  * This work is provided "as is"; redistribution and modification | 
					
						
							|  |  |  |  * in whole or in part, in any medium, physical or electronic is | 
					
						
							|  |  |  |  * permitted without restriction. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This work is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * In no event shall the authors or contributors be liable for any | 
					
						
							|  |  |  |  * direct, indirect, incidental, special, exemplary, or consequential | 
					
						
							|  |  |  |  * damages (including, but not limited to, procurement of substitute | 
					
						
							|  |  |  |  * goods or services; loss of use, data, or profits; or business | 
					
						
							|  |  |  |  * interruption) however caused and on any theory of liability, whether | 
					
						
							|  |  |  |  * in contract, strict liability, or tort (including negligence or | 
					
						
							|  |  |  |  * otherwise) arising in any way out of the use of this software, even | 
					
						
							|  |  |  |  * if advised of the possibility of such damage. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-25 11:09:43 -03:00
										 |  |  | #include "config.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-19 02:22:59 -04:00
										 |  |  | #include <gio/gio.h>
 | 
					
						
							| 
									
										
										
										
											2013-05-25 11:09:43 -03:00
										 |  |  | #include <gio/gnetworking.h>
 | 
					
						
							| 
									
										
										
										
											2012-08-19 02:22:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_parse (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   GInetAddress *addr; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("0:0:0:0:0:0:0:0"); | 
					
						
							|  |  |  |   g_assert (addr != NULL); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("1:0:0:0:0:0:0:8"); | 
					
						
							|  |  |  |   g_assert (addr != NULL); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("0:0:0:0:0:FFFF:204.152.189.116"); | 
					
						
							|  |  |  |   g_assert (addr != NULL); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("::1"); | 
					
						
							|  |  |  |   g_assert (addr != NULL); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("::"); | 
					
						
							|  |  |  |   g_assert (addr != NULL); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("::FFFF:204.152.189.116"); | 
					
						
							|  |  |  |   g_assert (addr != NULL); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("204.152.189.116"); | 
					
						
							|  |  |  |   g_assert (addr != NULL); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("::1::2"); | 
					
						
							|  |  |  |   g_assert (addr == NULL); | 
					
						
							| 
									
										
										
										
											2013-06-05 15:51:13 -04:00
										 |  |  |   addr = g_inet_address_new_from_string ("2001:1:2:3:4:5:6:7]"); | 
					
						
							|  |  |  |   g_assert (addr == NULL); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("[2001:1:2:3:4:5:6:7"); | 
					
						
							|  |  |  |   g_assert (addr == NULL); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("[2001:1:2:3:4:5:6:7]"); | 
					
						
							|  |  |  |   g_assert (addr == NULL); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("[2001:1:2:3:4:5:6:7]:80"); | 
					
						
							|  |  |  |   g_assert (addr == NULL); | 
					
						
							| 
									
										
										
										
											2012-08-19 02:22:59 -04:00
										 |  |  |   addr = g_inet_address_new_from_string ("0:1:2:3:4:5:6:7:8:9"); | 
					
						
							|  |  |  |   g_assert (addr == NULL); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("::FFFFFFF"); | 
					
						
							|  |  |  |   g_assert (addr == NULL); | 
					
						
							| 
									
										
										
										
											2013-06-05 23:49:31 -03:00
										 |  |  |   addr = g_inet_address_new_from_string ("204.152.189.116:80"); | 
					
						
							|  |  |  |   g_assert (addr == NULL); | 
					
						
							| 
									
										
										
										
											2012-08-19 02:22:59 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_any (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   GInetAddress *addr; | 
					
						
							|  |  |  |   GSocketFamily family[2] = { G_SOCKET_FAMILY_IPV4, G_SOCKET_FAMILY_IPV6 }; | 
					
						
							|  |  |  |   gsize size[2] = { 4, 16 }; | 
					
						
							|  |  |  |   gint i; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   for (i = 0; i < 2; i++) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       addr = g_inet_address_new_any (family[i]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       g_assert (g_inet_address_get_is_any (addr)); | 
					
						
							|  |  |  |       g_assert (g_inet_address_get_family (addr) == family[i]); | 
					
						
							|  |  |  |       g_assert (g_inet_address_get_native_size (addr) == size[i]); | 
					
						
							|  |  |  |       g_assert (!g_inet_address_get_is_loopback (addr)); | 
					
						
							|  |  |  |       g_assert (!g_inet_address_get_is_link_local (addr)); | 
					
						
							|  |  |  |       g_assert (!g_inet_address_get_is_site_local (addr)); | 
					
						
							|  |  |  |       g_assert (!g_inet_address_get_is_multicast (addr)); | 
					
						
							|  |  |  |       g_assert (!g_inet_address_get_is_mc_global (addr)); | 
					
						
							|  |  |  |       g_assert (!g_inet_address_get_is_mc_link_local (addr)); | 
					
						
							|  |  |  |       g_assert (!g_inet_address_get_is_mc_node_local (addr)); | 
					
						
							|  |  |  |       g_assert (!g_inet_address_get_is_mc_org_local (addr)); | 
					
						
							|  |  |  |       g_assert (!g_inet_address_get_is_mc_site_local (addr)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       g_object_unref (addr); | 
					
						
							|  |  |  |    } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_loopback (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   GInetAddress *addr; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("::1"); | 
					
						
							|  |  |  |   g_assert (g_inet_address_get_family (addr) == G_SOCKET_FAMILY_IPV6); | 
					
						
							|  |  |  |   g_assert (g_inet_address_get_is_loopback (addr)); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("127.0.0.0"); | 
					
						
							|  |  |  |   g_assert (g_inet_address_get_family (addr) == G_SOCKET_FAMILY_IPV4); | 
					
						
							|  |  |  |   g_assert (g_inet_address_get_is_loopback (addr)); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_bytes (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   GInetAddress *addr1, *addr2, *addr3; | 
					
						
							|  |  |  |   const guint8 *bytes; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   addr1 = g_inet_address_new_from_string ("192.168.0.100"); | 
					
						
							|  |  |  |   addr2 = g_inet_address_new_from_string ("192.168.0.101"); | 
					
						
							|  |  |  |   bytes = g_inet_address_to_bytes (addr1); | 
					
						
							|  |  |  |   addr3 = g_inet_address_new_from_bytes (bytes, G_SOCKET_FAMILY_IPV4); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_assert (!g_inet_address_equal (addr1, addr2)); | 
					
						
							|  |  |  |   g_assert (g_inet_address_equal (addr1, addr3)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_object_unref (addr1); | 
					
						
							|  |  |  |   g_object_unref (addr2); | 
					
						
							|  |  |  |   g_object_unref (addr3); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_property (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   GInetAddress *addr; | 
					
						
							|  |  |  |   GSocketFamily family; | 
					
						
							|  |  |  |   const guint8 *bytes; | 
					
						
							|  |  |  |   gboolean any; | 
					
						
							|  |  |  |   gboolean loopback; | 
					
						
							|  |  |  |   gboolean link_local; | 
					
						
							|  |  |  |   gboolean site_local; | 
					
						
							|  |  |  |   gboolean multicast; | 
					
						
							|  |  |  |   gboolean mc_global; | 
					
						
							|  |  |  |   gboolean mc_link_local; | 
					
						
							|  |  |  |   gboolean mc_node_local; | 
					
						
							|  |  |  |   gboolean mc_org_local; | 
					
						
							|  |  |  |   gboolean mc_site_local; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("ff85::"); | 
					
						
							|  |  |  |   g_object_get (addr, | 
					
						
							|  |  |  |                 "family", &family, | 
					
						
							|  |  |  |                 "bytes", &bytes, | 
					
						
							|  |  |  |                 "is-any", &any, | 
					
						
							|  |  |  |                 "is-loopback", &loopback, | 
					
						
							|  |  |  |                 "is-link-local", &link_local, | 
					
						
							|  |  |  |                 "is-site-local", &site_local, | 
					
						
							|  |  |  |                 "is-multicast", &multicast, | 
					
						
							|  |  |  |                 "is-mc-global", &mc_global, | 
					
						
							|  |  |  |                 "is-mc-link-local", &mc_link_local, | 
					
						
							|  |  |  |                 "is-mc-node-local", &mc_node_local, | 
					
						
							|  |  |  |                 "is-mc-org-local", &mc_org_local, | 
					
						
							|  |  |  |                 "is-mc-site-local", &mc_site_local, | 
					
						
							|  |  |  |                 NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_assert (family == G_SOCKET_FAMILY_IPV6); | 
					
						
							|  |  |  |   g_assert (!any); | 
					
						
							|  |  |  |   g_assert (!loopback); | 
					
						
							|  |  |  |   g_assert (!link_local); | 
					
						
							|  |  |  |   g_assert (!site_local); | 
					
						
							|  |  |  |   g_assert (multicast); | 
					
						
							|  |  |  |   g_assert (!mc_global); | 
					
						
							|  |  |  |   g_assert (!mc_link_local); | 
					
						
							|  |  |  |   g_assert (!mc_node_local); | 
					
						
							|  |  |  |   g_assert (!mc_org_local); | 
					
						
							|  |  |  |   g_assert (mc_site_local); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_socket_address (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   GInetAddress *addr; | 
					
						
							|  |  |  |   GInetSocketAddress *saddr; | 
					
						
							|  |  |  |   guint port; | 
					
						
							|  |  |  |   guint32 flowinfo; | 
					
						
							|  |  |  |   guint32 scope_id; | 
					
						
							|  |  |  |   GSocketFamily family; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("::ffff:125.1.15.5"); | 
					
						
							|  |  |  |   saddr = G_INET_SOCKET_ADDRESS (g_inet_socket_address_new (addr, 308)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_assert (g_inet_address_equal (addr, g_inet_socket_address_get_address (saddr))); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_assert (g_inet_socket_address_get_port (saddr) == 308); | 
					
						
							|  |  |  |   g_assert (g_inet_socket_address_get_flowinfo (saddr) == 0); | 
					
						
							|  |  |  |   g_assert (g_inet_socket_address_get_scope_id (saddr) == 0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_object_unref (saddr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("::1"); | 
					
						
							|  |  |  |   saddr = G_INET_SOCKET_ADDRESS (g_object_new (G_TYPE_INET_SOCKET_ADDRESS, | 
					
						
							|  |  |  |                                                "address", addr, | 
					
						
							|  |  |  |                                                "port", 308, | 
					
						
							|  |  |  |                                                "flowinfo", 10, | 
					
						
							|  |  |  |                                                "scope-id", 25, | 
					
						
							|  |  |  |                                                NULL)); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_assert (g_inet_socket_address_get_port (saddr) == 308); | 
					
						
							|  |  |  |   g_assert (g_inet_socket_address_get_flowinfo (saddr) == 10); | 
					
						
							|  |  |  |   g_assert (g_inet_socket_address_get_scope_id (saddr) == 25); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_object_get (saddr, | 
					
						
							|  |  |  |                 "family", &family, | 
					
						
							|  |  |  |                 "address", &addr, | 
					
						
							|  |  |  |                 "port", &port, | 
					
						
							|  |  |  |                 "flowinfo", &flowinfo, | 
					
						
							|  |  |  |                 "scope-id", &scope_id, | 
					
						
							|  |  |  |                 NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_assert (family == G_SOCKET_FAMILY_IPV6); | 
					
						
							|  |  |  |   g_assert (addr != NULL); | 
					
						
							|  |  |  |   g_assert (port == 308); | 
					
						
							|  |  |  |   g_assert (flowinfo == 10); | 
					
						
							|  |  |  |   g_assert (scope_id == 25); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  |   g_object_unref (saddr); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-04 15:24:24 +01:00
										 |  |  | static void | 
					
						
							|  |  |  | test_socket_address_to_string (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   GSocketAddress *sa = NULL; | 
					
						
							|  |  |  |   GInetAddress *ia = NULL; | 
					
						
							|  |  |  |   gchar *str = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* IPv4. */ | 
					
						
							|  |  |  |   ia = g_inet_address_new_from_string ("123.1.123.1"); | 
					
						
							|  |  |  |   sa = g_inet_socket_address_new (ia, 80); | 
					
						
							|  |  |  |   str = g_socket_connectable_to_string (G_SOCKET_CONNECTABLE (sa)); | 
					
						
							|  |  |  |   g_assert_cmpstr (str, ==, "123.1.123.1:80"); | 
					
						
							|  |  |  |   g_free (str); | 
					
						
							|  |  |  |   g_object_unref (sa); | 
					
						
							|  |  |  |   g_object_unref (ia); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* IPv6. */ | 
					
						
							| 
									
										
										
										
											2016-07-11 17:38:30 -04:00
										 |  |  |   ia = g_inet_address_new_from_string ("fe80::80"); | 
					
						
							| 
									
										
										
										
											2015-10-04 15:24:24 +01:00
										 |  |  |   sa = g_inet_socket_address_new (ia, 80); | 
					
						
							|  |  |  |   str = g_socket_connectable_to_string (G_SOCKET_CONNECTABLE (sa)); | 
					
						
							| 
									
										
										
										
											2016-07-11 17:38:30 -04:00
										 |  |  |   g_assert_cmpstr (str, ==, "[fe80::80]:80"); | 
					
						
							| 
									
										
										
										
											2015-10-04 15:24:24 +01:00
										 |  |  |   g_free (str); | 
					
						
							|  |  |  |   g_object_unref (sa); | 
					
						
							|  |  |  |   g_object_unref (ia); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* IPv6 without port. */ | 
					
						
							| 
									
										
										
										
											2016-07-11 17:38:30 -04:00
										 |  |  |   ia = g_inet_address_new_from_string ("fe80::80"); | 
					
						
							| 
									
										
										
										
											2015-10-04 15:24:24 +01:00
										 |  |  |   sa = g_inet_socket_address_new (ia, 0); | 
					
						
							|  |  |  |   str = g_socket_connectable_to_string (G_SOCKET_CONNECTABLE (sa)); | 
					
						
							| 
									
										
										
										
											2016-07-11 17:38:30 -04:00
										 |  |  |   g_assert_cmpstr (str, ==, "fe80::80"); | 
					
						
							| 
									
										
										
										
											2015-10-04 15:24:24 +01:00
										 |  |  |   g_free (str); | 
					
						
							|  |  |  |   g_object_unref (sa); | 
					
						
							|  |  |  |   g_object_unref (ia); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* IPv6 with scope. */ | 
					
						
							|  |  |  |   ia = g_inet_address_new_from_string ("::1"); | 
					
						
							|  |  |  |   sa = G_SOCKET_ADDRESS (g_object_new (G_TYPE_INET_SOCKET_ADDRESS, | 
					
						
							|  |  |  |                                        "address", ia, | 
					
						
							|  |  |  |                                        "port", 123, | 
					
						
							|  |  |  |                                        "flowinfo", 10, | 
					
						
							|  |  |  |                                        "scope-id", 25, | 
					
						
							|  |  |  |                                        NULL)); | 
					
						
							|  |  |  |   str = g_socket_connectable_to_string (G_SOCKET_CONNECTABLE (sa)); | 
					
						
							|  |  |  |   g_assert_cmpstr (str, ==, "[::1%25]:123"); | 
					
						
							|  |  |  |   g_free (str); | 
					
						
							|  |  |  |   g_object_unref (sa); | 
					
						
							|  |  |  |   g_object_unref (ia); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-19 02:22:59 -04:00
										 |  |  | static void | 
					
						
							|  |  |  | test_mask_parse (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   GInetAddressMask *mask; | 
					
						
							|  |  |  |   GError *error = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   mask = g_inet_address_mask_new_from_string ("10.0.0.0/8", &error); | 
					
						
							|  |  |  |   g_assert_no_error (error); | 
					
						
							|  |  |  |   g_assert (mask != NULL); | 
					
						
							|  |  |  |   g_object_unref (mask); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   mask = g_inet_address_mask_new_from_string ("fe80::/10", &error); | 
					
						
							|  |  |  |   g_assert_no_error (error); | 
					
						
							|  |  |  |   g_assert (mask != NULL); | 
					
						
							|  |  |  |   g_object_unref (mask); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   mask = g_inet_address_mask_new_from_string ("::", &error); | 
					
						
							|  |  |  |   g_assert_no_error (error); | 
					
						
							|  |  |  |   g_assert (mask != NULL); | 
					
						
							|  |  |  |   g_object_unref (mask); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   mask = g_inet_address_mask_new_from_string ("::/abc", &error); | 
					
						
							|  |  |  |   g_assert_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT); | 
					
						
							|  |  |  |   g_assert (mask == NULL); | 
					
						
							|  |  |  |   g_clear_error (&error); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   mask = g_inet_address_mask_new_from_string ("127.0.0.1/128", &error); | 
					
						
							|  |  |  |   g_assert_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT); | 
					
						
							|  |  |  |   g_assert (mask == NULL); | 
					
						
							|  |  |  |   g_clear_error (&error); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_mask_property (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   GInetAddressMask *mask; | 
					
						
							|  |  |  |   GInetAddress *addr; | 
					
						
							|  |  |  |   GSocketFamily family; | 
					
						
							|  |  |  |   guint len; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("fe80::"); | 
					
						
							|  |  |  |   mask = g_inet_address_mask_new_from_string ("fe80::/10", NULL); | 
					
						
							|  |  |  |   g_assert (g_inet_address_mask_get_family (mask) == G_SOCKET_FAMILY_IPV6); | 
					
						
							|  |  |  |   g_assert (g_inet_address_equal (addr, g_inet_address_mask_get_address (mask))); | 
					
						
							|  |  |  |   g_assert (g_inet_address_mask_get_length (mask) == 10); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_object_get (mask, | 
					
						
							|  |  |  |                 "family", &family, | 
					
						
							|  |  |  |                 "address", &addr, | 
					
						
							|  |  |  |                 "length", &len, | 
					
						
							|  |  |  |                 NULL); | 
					
						
							|  |  |  |   g_assert (family == G_SOCKET_FAMILY_IPV6); | 
					
						
							|  |  |  |   g_assert (addr != NULL); | 
					
						
							|  |  |  |   g_assert (len == 10); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_object_unref (mask); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_mask_equal (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   GInetAddressMask *mask; | 
					
						
							|  |  |  |   GInetAddressMask *mask2; | 
					
						
							|  |  |  |   gchar *str; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   mask = g_inet_address_mask_new_from_string ("fe80:0:0::/10", NULL); | 
					
						
							|  |  |  |   str = g_inet_address_mask_to_string (mask); | 
					
						
							|  |  |  |   g_assert_cmpstr (str, ==, "fe80::/10"); | 
					
						
							|  |  |  |   mask2 = g_inet_address_mask_new_from_string (str, NULL); | 
					
						
							|  |  |  |   g_assert (g_inet_address_mask_equal (mask, mask2)); | 
					
						
							|  |  |  |   g_object_unref (mask2); | 
					
						
							|  |  |  |   g_free (str); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   mask2 = g_inet_address_mask_new_from_string ("fe80::/12", NULL); | 
					
						
							|  |  |  |   g_assert (!g_inet_address_mask_equal (mask, mask2)); | 
					
						
							|  |  |  |   g_object_unref (mask2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   mask2 = g_inet_address_mask_new_from_string ("ff80::/10", NULL); | 
					
						
							|  |  |  |   g_assert (!g_inet_address_mask_equal (mask, mask2)); | 
					
						
							|  |  |  |   g_object_unref (mask2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_object_unref (mask); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_mask_match (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   GInetAddressMask *mask; | 
					
						
							|  |  |  |   GInetAddress *addr; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   mask = g_inet_address_mask_new_from_string ("1.2.0.0/16", NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("1.2.0.0"); | 
					
						
							|  |  |  |   g_assert (g_inet_address_mask_matches (mask, addr)); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("1.2.3.4"); | 
					
						
							|  |  |  |   g_assert (g_inet_address_mask_matches (mask, addr)); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("1.3.1.1"); | 
					
						
							|  |  |  |   g_assert (!g_inet_address_mask_matches (mask, addr)); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_object_unref (mask); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   mask = g_inet_address_mask_new_from_string ("1.2.0.0/24", NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("1.2.0.0"); | 
					
						
							|  |  |  |   g_assert (g_inet_address_mask_matches (mask, addr)); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("1.2.3.4"); | 
					
						
							|  |  |  |   g_assert (!g_inet_address_mask_matches (mask, addr)); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  |   addr = g_inet_address_new_from_string ("1.2.0.24"); | 
					
						
							|  |  |  |   g_assert (g_inet_address_mask_matches (mask, addr)); | 
					
						
							|  |  |  |   g_object_unref (addr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_object_unref (mask); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | main (int argc, char *argv[]) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   g_test_init (&argc, &argv, NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_test_add_func ("/inet-address/parse", test_parse); | 
					
						
							|  |  |  |   g_test_add_func ("/inet-address/any", test_any); | 
					
						
							|  |  |  |   g_test_add_func ("/inet-address/loopback", test_loopback); | 
					
						
							|  |  |  |   g_test_add_func ("/inet-address/bytes", test_bytes); | 
					
						
							|  |  |  |   g_test_add_func ("/inet-address/property", test_property); | 
					
						
							|  |  |  |   g_test_add_func ("/socket-address/basic", test_socket_address); | 
					
						
							| 
									
										
										
										
											2015-10-04 15:24:24 +01:00
										 |  |  |   g_test_add_func ("/socket-address/to-string", test_socket_address_to_string); | 
					
						
							| 
									
										
										
										
											2012-08-19 02:22:59 -04:00
										 |  |  |   g_test_add_func ("/address-mask/parse", test_mask_parse); | 
					
						
							|  |  |  |   g_test_add_func ("/address-mask/property", test_mask_property); | 
					
						
							|  |  |  |   g_test_add_func ("/address-mask/equal", test_mask_equal); | 
					
						
							|  |  |  |   g_test_add_func ("/address-mask/match", test_mask_match); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return g_test_run (); | 
					
						
							|  |  |  | } |