mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 20:33:31 +01:00
SR: Calculate current SRV phase/run duration.
This is also needed to make the HS desc overlap mode function independent of absolute hours.
This commit is contained in:
parent
2af254096f
commit
0b22b7fce3
@ -176,6 +176,22 @@ sr_state_get_start_time_of_current_protocol_run(time_t now)
|
|||||||
return beginning_of_current_round - time_elapsed_since_start_of_run;
|
return beginning_of_current_round - time_elapsed_since_start_of_run;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Return the time (in seconds) it takes to complete a full SR protocol phase
|
||||||
|
* (e.g. the commit phase). */
|
||||||
|
unsigned int
|
||||||
|
sr_state_get_phase_duration(void)
|
||||||
|
{
|
||||||
|
return SHARED_RANDOM_N_ROUNDS * get_voting_interval();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Return the time (in seconds) it takes to complete a full SR protocol run */
|
||||||
|
unsigned int
|
||||||
|
sr_state_get_protocol_run_duration(void)
|
||||||
|
{
|
||||||
|
int total_protocol_rounds = SHARED_RANDOM_N_ROUNDS * SHARED_RANDOM_N_PHASES;
|
||||||
|
return total_protocol_rounds * get_voting_interval();
|
||||||
|
}
|
||||||
|
|
||||||
/* Return the time we should expire the state file created at <b>now</b>.
|
/* Return the time we should expire the state file created at <b>now</b>.
|
||||||
* We expire the state file in the beginning of the next protocol run. */
|
* We expire the state file in the beginning of the next protocol run. */
|
||||||
STATIC time_t
|
STATIC time_t
|
||||||
|
@ -122,6 +122,8 @@ void sr_state_save(void);
|
|||||||
void sr_state_free(void);
|
void sr_state_free(void);
|
||||||
|
|
||||||
time_t sr_state_get_start_time_of_current_protocol_run(time_t now);
|
time_t sr_state_get_start_time_of_current_protocol_run(time_t now);
|
||||||
|
unsigned int sr_state_get_phase_duration(void);
|
||||||
|
unsigned int sr_state_get_protocol_run_duration(void);
|
||||||
|
|
||||||
#ifdef SHARED_RANDOM_STATE_PRIVATE
|
#ifdef SHARED_RANDOM_STATE_PRIVATE
|
||||||
|
|
||||||
|
@ -260,6 +260,25 @@ test_get_start_time_of_current_run(void *arg)
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_get_sr_protocol_duration(void *arg)
|
||||||
|
{
|
||||||
|
(void) arg;
|
||||||
|
|
||||||
|
/* Check that by default an SR phase is 12 hours */
|
||||||
|
tt_int_op(sr_state_get_phase_duration(), ==, 12*60*60);
|
||||||
|
tt_int_op(sr_state_get_protocol_run_duration(), ==, 24*60*60);
|
||||||
|
|
||||||
|
/* Now alter the voting interval and check that the SR phase is 2 mins long
|
||||||
|
* if voting happens every 10 seconds (10*12 seconds = 2 mins) */
|
||||||
|
or_options_t *options = get_options_mutable();
|
||||||
|
options->V3AuthVotingInterval = 10;
|
||||||
|
tt_int_op(sr_state_get_phase_duration(), ==, 2*60);
|
||||||
|
tt_int_op(sr_state_get_protocol_run_duration(), ==, 4*60);
|
||||||
|
|
||||||
|
done: ;
|
||||||
|
}
|
||||||
|
|
||||||
/* Mock function to immediately return our local 'mock_consensus'. */
|
/* Mock function to immediately return our local 'mock_consensus'. */
|
||||||
static networkstatus_t *
|
static networkstatus_t *
|
||||||
mock_networkstatus_get_live_consensus(time_t now)
|
mock_networkstatus_get_live_consensus(time_t now)
|
||||||
@ -1345,6 +1364,8 @@ struct testcase_t sr_tests[] = {
|
|||||||
NULL, NULL },
|
NULL, NULL },
|
||||||
{ "get_start_time_of_current_run", test_get_start_time_of_current_run,
|
{ "get_start_time_of_current_run", test_get_start_time_of_current_run,
|
||||||
TT_FORK, NULL, NULL },
|
TT_FORK, NULL, NULL },
|
||||||
|
{ "get_sr_protocol_duration", test_get_sr_protocol_duration, TT_FORK,
|
||||||
|
NULL, NULL },
|
||||||
{ "get_state_valid_until_time", test_get_state_valid_until_time, TT_FORK,
|
{ "get_state_valid_until_time", test_get_state_valid_until_time, TT_FORK,
|
||||||
NULL, NULL },
|
NULL, NULL },
|
||||||
{ "vote", test_vote, TT_FORK,
|
{ "vote", test_vote, TT_FORK,
|
||||||
|
Loading…
Reference in New Issue
Block a user