| 
					
				 | 
			
			
				@@ -779,6 +779,99 @@ test_address_get_if_addrs6_list_no_internal(void *arg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static int called_get_interface_addresses_raw = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smartlist_t * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+mock_get_interface_addresses_raw_fail(int severity) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (void)severity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  called_get_interface_addresses_raw++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return smartlist_new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static int called_get_interface_address6_via_udp_socket_hack = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+mock_get_interface_address6_via_udp_socket_hack_fail(int severity, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                     sa_family_t family, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                     tor_addr_t *addr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (void)severity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (void)family; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (void)addr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  called_get_interface_address6_via_udp_socket_hack++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+test_address_get_if_addrs_internal_fail(void *arg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  smartlist_t *results1 = NULL, *results2 = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  int rv = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  uint32_t ipv4h_addr = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tor_addr_t ipv6_addr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  memset(&ipv6_addr, 0, sizeof(tor_addr_t)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (void)arg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  MOCK(get_interface_addresses_raw, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       mock_get_interface_addresses_raw_fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  MOCK(get_interface_address6_via_udp_socket_hack, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       mock_get_interface_address6_via_udp_socket_hack_fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  results1 = get_interface_address6_list(LOG_ERR, AF_INET6, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_assert(results1 != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(smartlist_len(results1),==,0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  results2 = get_interface_address_list(LOG_ERR, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_assert(results2 != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(smartlist_len(results2),==,0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  rv = get_interface_address6(LOG_ERR, AF_INET6, &ipv6_addr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_assert(rv == -1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  rv = get_interface_address(LOG_ERR, &ipv4h_addr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_assert(rv == -1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+done: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  UNMOCK(get_interface_addresses_raw); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  UNMOCK(get_interface_address6_via_udp_socket_hack); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  free_interface_address6_list(results1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  free_interface_address6_list(results2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+test_address_get_if_addrs_no_internal_fail(void *arg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  smartlist_t *results1 = NULL, *results2 = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (void)arg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  MOCK(get_interface_addresses_raw, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       mock_get_interface_addresses_raw_fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  MOCK(get_interface_address6_via_udp_socket_hack, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       mock_get_interface_address6_via_udp_socket_hack_fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  results1 = get_interface_address6_list(LOG_ERR, AF_INET6, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_assert(results1 != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(smartlist_len(results1),==,0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  results2 = get_interface_address_list(LOG_ERR, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_assert(results2 != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(smartlist_len(results2),==,0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+done: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  UNMOCK(get_interface_addresses_raw); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  UNMOCK(get_interface_address6_via_udp_socket_hack); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  free_interface_address6_list(results1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  free_interface_address6_list(results2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 test_address_get_if_addrs(void *arg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -838,6 +931,8 @@ struct testcase_t address_tests[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ADDRESS_TEST(get_if_addrs_list_no_internal, 0), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ADDRESS_TEST(get_if_addrs6_list_internal, 0), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ADDRESS_TEST(get_if_addrs6_list_no_internal, 0), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ADDRESS_TEST(get_if_addrs_internal_fail, 0), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ADDRESS_TEST(get_if_addrs_no_internal_fail, 0), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ADDRESS_TEST(get_if_addrs, 0), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ADDRESS_TEST(get_if_addrs6, 0), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef HAVE_IFADDRS_TO_SMARTLIST 
			 |