|  | @@ -6174,6 +6174,106 @@ test_dir_platform_str(void *arg)
 | 
	
		
			
				|  |  |    ;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +static networkstatus_t *mock_networkstatus;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static networkstatus_t *
 | 
	
		
			
				|  |  | +mock_networkstatus_get_latest_consensus_by_flavor(consensus_flavor_t f)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +  (void)f;
 | 
	
		
			
				|  |  | +  return mock_networkstatus;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static void
 | 
	
		
			
				|  |  | +test_dir_networkstatus_consensus_has_ipv6(void *arg)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +  (void)arg;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  int has_ipv6 = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /* Init options and networkstatus */
 | 
	
		
			
				|  |  | +  or_options_t our_options;
 | 
	
		
			
				|  |  | +  mock_options = &our_options;
 | 
	
		
			
				|  |  | +  reset_options(mock_options, &mock_get_options_calls);
 | 
	
		
			
				|  |  | +  MOCK(get_options, mock_get_options);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  networkstatus_t our_networkstatus;
 | 
	
		
			
				|  |  | +  mock_networkstatus = &our_networkstatus;
 | 
	
		
			
				|  |  | +  memset(mock_networkstatus, 0, sizeof(*mock_networkstatus));
 | 
	
		
			
				|  |  | +  MOCK(networkstatus_get_latest_consensus_by_flavor,
 | 
	
		
			
				|  |  | +       mock_networkstatus_get_latest_consensus_by_flavor);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /* A live consensus */
 | 
	
		
			
				|  |  | +  mock_networkstatus->valid_after = time(NULL) - 3600;
 | 
	
		
			
				|  |  | +  mock_networkstatus->valid_until = time(NULL) + 3600;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /* Test the bounds for A lines in the NS consensus */
 | 
	
		
			
				|  |  | +  mock_options->UseMicrodescriptors = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  mock_networkstatus->consensus_method = MIN_METHOD_FOR_A_LINES;
 | 
	
		
			
				|  |  | +  has_ipv6 = networkstatus_consensus_has_ipv6(get_options());
 | 
	
		
			
				|  |  | +  tt_assert(has_ipv6);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  mock_networkstatus->consensus_method = MIN_METHOD_FOR_A_LINES + 1;
 | 
	
		
			
				|  |  | +  has_ipv6 = networkstatus_consensus_has_ipv6(get_options());
 | 
	
		
			
				|  |  | +  tt_assert(has_ipv6);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  mock_networkstatus->consensus_method = MIN_METHOD_FOR_A_LINES + 20;
 | 
	
		
			
				|  |  | +  has_ipv6 = networkstatus_consensus_has_ipv6(get_options());
 | 
	
		
			
				|  |  | +  tt_assert(has_ipv6);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  mock_networkstatus->consensus_method = MIN_METHOD_FOR_A_LINES - 1;
 | 
	
		
			
				|  |  | +  has_ipv6 = networkstatus_consensus_has_ipv6(get_options());
 | 
	
		
			
				|  |  | +  tt_assert(!has_ipv6);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /* Test the bounds for A lines in the microdesc consensus */
 | 
	
		
			
				|  |  | +  mock_options->UseMicrodescriptors = 1;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  mock_networkstatus->consensus_method =
 | 
	
		
			
				|  |  | +      MIN_METHOD_FOR_A_LINES_IN_MICRODESC_CONSENSUS;
 | 
	
		
			
				|  |  | +  has_ipv6 = networkstatus_consensus_has_ipv6(get_options());
 | 
	
		
			
				|  |  | +  tt_assert(has_ipv6);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  mock_networkstatus->consensus_method =
 | 
	
		
			
				|  |  | +      MIN_METHOD_FOR_A_LINES_IN_MICRODESC_CONSENSUS + 1;
 | 
	
		
			
				|  |  | +  has_ipv6 = networkstatus_consensus_has_ipv6(get_options());
 | 
	
		
			
				|  |  | +  tt_assert(has_ipv6);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  mock_networkstatus->consensus_method =
 | 
	
		
			
				|  |  | +      MIN_METHOD_FOR_A_LINES_IN_MICRODESC_CONSENSUS + 20;
 | 
	
		
			
				|  |  | +  has_ipv6 = networkstatus_consensus_has_ipv6(get_options());
 | 
	
		
			
				|  |  | +  tt_assert(has_ipv6);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  mock_networkstatus->consensus_method =
 | 
	
		
			
				|  |  | +      MIN_METHOD_FOR_A_LINES_IN_MICRODESC_CONSENSUS - 1;
 | 
	
		
			
				|  |  | +  has_ipv6 = networkstatus_consensus_has_ipv6(get_options());
 | 
	
		
			
				|  |  | +  tt_assert(!has_ipv6);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /* Test the edge cases */
 | 
	
		
			
				|  |  | +  mock_options->UseMicrodescriptors = 1;
 | 
	
		
			
				|  |  | +  mock_networkstatus->consensus_method =
 | 
	
		
			
				|  |  | +      MIN_METHOD_FOR_A_LINES_IN_MICRODESC_CONSENSUS;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /* Reasonably live */
 | 
	
		
			
				|  |  | +  mock_networkstatus->valid_until = time(NULL) - 60;
 | 
	
		
			
				|  |  | +  has_ipv6 = networkstatus_consensus_has_ipv6(get_options());
 | 
	
		
			
				|  |  | +  tt_assert(has_ipv6);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /* Not reasonably live */
 | 
	
		
			
				|  |  | +  mock_networkstatus->valid_after = time(NULL) - 24*60*60 - 3600;
 | 
	
		
			
				|  |  | +  mock_networkstatus->valid_until = time(NULL) - 24*60*60 - 60;
 | 
	
		
			
				|  |  | +  has_ipv6 = networkstatus_consensus_has_ipv6(get_options());
 | 
	
		
			
				|  |  | +  tt_assert(!has_ipv6);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /* NULL consensus */
 | 
	
		
			
				|  |  | +  mock_networkstatus = NULL;
 | 
	
		
			
				|  |  | +  has_ipv6 = networkstatus_consensus_has_ipv6(get_options());
 | 
	
		
			
				|  |  | +  tt_assert(!has_ipv6);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | + done:
 | 
	
		
			
				|  |  | +  UNMOCK(get_options);
 | 
	
		
			
				|  |  | +  UNMOCK(networkstatus_get_latest_consensus_by_flavor);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  #define DIR_LEGACY(name)                             \
 | 
	
		
			
				|  |  |    { #name, test_dir_ ## name , TT_FORK, NULL, NULL }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -6241,6 +6341,7 @@ struct testcase_t dir_tests[] = {
 | 
	
		
			
				|  |  |    DIR(assumed_flags, 0),
 | 
	
		
			
				|  |  |    DIR(networkstatus_compute_bw_weights_v10, 0),
 | 
	
		
			
				|  |  |    DIR(platform_str, 0),
 | 
	
		
			
				|  |  | +  DIR(networkstatus_consensus_has_ipv6, 0),
 | 
	
		
			
				|  |  |    END_OF_TESTCASES
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 |