|  | @@ -551,6 +551,80 @@ test_entry_guards_set_from_config(void *arg)
 | 
	
		
			
				|  |  |    routerset_free(options->EntryNodes);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +static void
 | 
	
		
			
				|  |  | +test_entry_is_time_to_retry(void *arg)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +  entry_guard_t *test_guard;
 | 
	
		
			
				|  |  | +  time_t now;
 | 
	
		
			
				|  |  | +  int retval;
 | 
	
		
			
				|  |  | +  (void)arg;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  now = time(NULL);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  test_guard = tor_malloc_zero(sizeof(entry_guard_t));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  test_guard->last_attempted = now - 10;
 | 
	
		
			
				|  |  | +  test_guard->unreachable_since = now - 1;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  retval = entry_is_time_to_retry(test_guard,now);
 | 
	
		
			
				|  |  | +  tt_int_op(retval,==,1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  test_guard->unreachable_since = now - (6*60*60 - 1);
 | 
	
		
			
				|  |  | +  test_guard->last_attempted = now - (60*60 + 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  retval = entry_is_time_to_retry(test_guard,now);
 | 
	
		
			
				|  |  | +  tt_int_op(retval,==,1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  test_guard->last_attempted = now - (60*60 - 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  retval = entry_is_time_to_retry(test_guard,now);
 | 
	
		
			
				|  |  | +  tt_int_op(retval,==,0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  test_guard->unreachable_since = now - (6*60*60 + 1);
 | 
	
		
			
				|  |  | +  test_guard->last_attempted = now - (4*60*60 + 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  retval = entry_is_time_to_retry(test_guard,now);
 | 
	
		
			
				|  |  | +  tt_int_op(retval,==,1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  test_guard->unreachable_since = now - (3*24*60*60 - 1);
 | 
	
		
			
				|  |  | +  test_guard->last_attempted = now - (4*60*60 + 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  retval = entry_is_time_to_retry(test_guard,now);
 | 
	
		
			
				|  |  | +  tt_int_op(retval,==,1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  test_guard->unreachable_since = now - (3*24*60*60 + 1);
 | 
	
		
			
				|  |  | +  test_guard->last_attempted = now - (18*60*60 + 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  retval = entry_is_time_to_retry(test_guard,now);
 | 
	
		
			
				|  |  | +  tt_int_op(retval,==,1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  test_guard->unreachable_since = now - (7*24*60*60 - 1);
 | 
	
		
			
				|  |  | +  test_guard->last_attempted = now - (18*60*60 + 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  retval = entry_is_time_to_retry(test_guard,now);
 | 
	
		
			
				|  |  | +  tt_int_op(retval,==,1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  test_guard->last_attempted = now - (18*60*60 - 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  retval = entry_is_time_to_retry(test_guard,now);
 | 
	
		
			
				|  |  | +  tt_int_op(retval,==,0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  test_guard->unreachable_since = now - (7*24*60*60 + 1);
 | 
	
		
			
				|  |  | +  test_guard->last_attempted = now - (36*60*60 + 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  retval = entry_is_time_to_retry(test_guard,now);
 | 
	
		
			
				|  |  | +  tt_int_op(retval,==,1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  test_guard->unreachable_since = now - (7*24*60*60 + 1);
 | 
	
		
			
				|  |  | +  test_guard->last_attempted = now - (36*60*60 + 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  retval = entry_is_time_to_retry(test_guard,now);
 | 
	
		
			
				|  |  | +  tt_int_op(retval,==,1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | + done:
 | 
	
		
			
				|  |  | +  tor_free(test_guard);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  /** XXX Do some tests that entry_is_live() */
 | 
	
		
			
				|  |  |  static void
 | 
	
		
			
				|  |  |  test_entry_is_live(void *arg)
 | 
	
	
		
			
				|  | @@ -621,6 +695,8 @@ static const struct testcase_setup_t fake_network = {
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  struct testcase_t entrynodes_tests[] = {
 | 
	
		
			
				|  |  | +  { "entry_is_time_to_retry", test_entry_is_time_to_retry,
 | 
	
		
			
				|  |  | +    TT_FORK, NULL, NULL },
 | 
	
		
			
				|  |  |    { "choose_random_entry_no_guards", test_choose_random_entry_no_guards,
 | 
	
		
			
				|  |  |      TT_FORK, &fake_network, NULL },
 | 
	
		
			
				|  |  |    { "choose_random_entry_one_possibleguard",
 |