[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] SR: Calculate current SRV phase/run duration.
commit 0b22b7fce3f1ce97a85f4022533b206f847b7307
Author: George Kadianakis <desnacked@xxxxxxxxxx>
Date: Mon Jul 24 13:30:04 2017 +0300
SR: Calculate current SRV phase/run duration.
This is also needed to make the HS desc overlap mode function
independent of absolute hours.
---
src/or/shared_random_state.c | 16 ++++++++++++++++
src/or/shared_random_state.h | 2 ++
src/test/test_shared_random.c | 21 +++++++++++++++++++++
3 files changed, 39 insertions(+)
diff --git a/src/or/shared_random_state.c b/src/or/shared_random_state.c
index 1fc1440d0..7f8094daf 100644
--- a/src/or/shared_random_state.c
+++ b/src/or/shared_random_state.c
@@ -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 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>.
* We expire the state file in the beginning of the next protocol run. */
STATIC time_t
diff --git a/src/or/shared_random_state.h b/src/or/shared_random_state.h
index ae1c5ac21..03dd5eb37 100644
--- a/src/or/shared_random_state.h
+++ b/src/or/shared_random_state.h
@@ -122,6 +122,8 @@ void sr_state_save(void);
void sr_state_free(void);
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
diff --git a/src/test/test_shared_random.c b/src/test/test_shared_random.c
index 3eb47dfbc..ea037d417 100644
--- a/src/test/test_shared_random.c
+++ b/src/test/test_shared_random.c
@@ -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'. */
static networkstatus_t *
mock_networkstatus_get_live_consensus(time_t now)
@@ -1345,6 +1364,8 @@ struct testcase_t sr_tests[] = {
NULL, NULL },
{ "get_start_time_of_current_run", test_get_start_time_of_current_run,
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,
NULL, NULL },
{ "vote", test_vote, TT_FORK,
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits