[tor-commits] [tor/release-0.3.2] Merge branch 'bug23816_029_squashed' into maint-0.3.2
nickm at torproject.org
nickm at torproject.org
Wed Nov 8 13:13:19 UTC 2017
commit e5a83062ed4e9e6b908efc6b75f13ab269f97377
Merge: 3dc61a5d7 cb29687e9
Author: Nick Mathewson <nickm at torproject.org>
Date: Wed Nov 8 08:11:22 2017 -0500
Merge branch 'bug23816_029_squashed' into maint-0.3.2
changes/bug23816 | 6 +++++
src/or/directory.c | 76 +++++++++++++++++++++++++++++++----------------------
src/or/directory.h | 10 ++++++-
src/test/test_dir.c | 69 +++++++++++++++++++++++++++---------------------
4 files changed, 99 insertions(+), 62 deletions(-)
diff --cc src/or/directory.h
index 79984be32,c055e60d9..d26d83537
--- a/src/or/directory.h
+++ b/src/or/directory.h
@@@ -226,23 -167,15 +226,31 @@@ STATIC const smartlist_t *find_dl_sched
STATIC void find_dl_min_and_max_delay(download_status_t *dls,
const or_options_t *options,
int *min, int *max);
- STATIC int next_random_exponential_delay(int delay, int max_delay);
++
+ STATIC int next_random_exponential_delay(int delay,
+ int base_delay,
+ int max_delay);
+
+ STATIC void next_random_exponential_delay_range(int *low_bound_out,
+ int *high_bound_out,
+ int delay,
+ int base_delay);
-#endif
-#endif
+STATIC int parse_hs_version_from_post(const char *url, const char *prefix,
+ const char **end_pos);
+
+STATIC unsigned parse_accept_encoding_header(const char *h);
+#endif /* defined(TOR_UNIT_TESTS) */
+
+#if defined(TOR_UNIT_TESTS) || defined(DIRECTORY_PRIVATE)
+/* Used only by directory.c and test_dir.c */
+
+/* no more than quadruple the previous delay (multiplier + 1) */
+#define DIR_DEFAULT_RANDOM_MULTIPLIER (3)
+/* no more than triple the previous delay */
+#define DIR_TEST_NET_RANDOM_MULTIPLIER (2)
+
+#endif /* defined(TOR_UNIT_TESTS) || defined(DIRECTORY_PRIVATE) */
+
+#endif /* !defined(TOR_DIRECTORY_H) */
diff --cc src/test/test_dir.c
index 87b86c38b,1c6662147..ee4a9780b
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@@ -4124,11 -3608,16 +4124,11 @@@ download_status_random_backoff_helper(i
{ 0, 0, 0, DL_SCHED_GENERIC, DL_WANT_AUTHORITY,
DL_SCHED_INCREMENT_FAILURE, DL_SCHED_RANDOM_EXPONENTIAL, 0, 0 };
int increment = -1;
- int old_increment;
+ int old_increment = -1;
time_t current_time = time(NULL);
- const int exponent = DIR_DEFAULT_RANDOM_MULTIPLIER + 1;
- const int min_delay = 0;
- const int max_delay = 1000000;
-
- (void)arg;
/* Check the random backoff cases */
- old_increment = 0;
+ int n_attempts = 0;
do {
increment = download_status_schedule_get_delay(&dls_random,
NULL,
@@@ -4148,33 -3626,14 +4148,12 @@@
/* Test */
tt_int_op(increment, OP_GE, min_delay);
tt_int_op(increment, OP_LE, max_delay);
- if (dls_random.last_backoff_position == 0) {
- /* regression tests for 17750
- * Always use the minimum delay for the first increment */
- tt_int_op(increment, OP_EQ, min_delay);
- } else {
- /* It's times like these I'd love a good saturating arithmetic
- * implementation */
- int min_inc = INT_MAX;
- if (old_increment <= INT_MAX - 1) {
- min_inc = old_increment + 1;
- }
-
- int max_inc = INT_MAX;
- if (old_increment <= (INT_MAX - 1)/exponent) {
- max_inc = (exponent * old_increment) + 1;
- }
-
- /* Regression test for 20534 and friends:
- * increment must always increase after the first */
- tt_int_op(increment, OP_GE, min_inc);
- /* We at most quadruple, and always add one */
- tt_int_op(increment, OP_LE, max_inc);
- }
- if (old_increment)
- tt_int_op(increment, OP_LE, old_increment * 3);
-
/* Advance */
- current_time += increment;
-- ++(dls_random.n_download_attempts);
-- ++(dls_random.n_download_failures);
++ if (dls_random.n_download_attempts < IMPOSSIBLE_TO_DOWNLOAD - 1) {
++ ++(dls_random.n_download_attempts);
++ ++(dls_random.n_download_failures);
++ }
/* Try another maybe */
old_increment = increment;
@@@ -4188,27 -3644,38 +4164,59 @@@
}
static void
+test_dir_download_status_random_backoff(void *arg)
+{
+ (void)arg;
+
+ /* Do a standard test */
+ download_status_random_backoff_helper(0, 1000000);
+ /* Regression test for 20534 and friends:
+ * try tighter bounds */
+ download_status_random_backoff_helper(0, 100);
+ /* regression tests for 17750: initial delay */
+ download_status_random_backoff_helper(10, 1000);
+ download_status_random_backoff_helper(20, 30);
+
+ /* Pathological cases */
+ download_status_random_backoff_helper(0, 0);
+ download_status_random_backoff_helper(1, 1);
+ download_status_random_backoff_helper(0, INT_MAX);
+ download_status_random_backoff_helper(INT_MAX/2, INT_MAX);
+}
+
+static void
+ test_dir_download_status_random_backoff_ranges(void *arg)
+ {
+ (void)arg;
+ int lo, hi;
+ next_random_exponential_delay_range(&lo, &hi, 0, 10);
+ tt_int_op(lo, OP_EQ, 10);
+ tt_int_op(hi, OP_EQ, 11);
+
+ next_random_exponential_delay_range(&lo, &hi, 6, 10);
+ tt_int_op(lo, OP_EQ, 10);
+ tt_int_op(hi, OP_EQ, 6*3);
+
+ next_random_exponential_delay_range(&lo, &hi, 13, 10);
+ tt_int_op(lo, OP_EQ, 10);
+ tt_int_op(hi, OP_EQ, 13 * 3);
+
+ next_random_exponential_delay_range(&lo, &hi, 37, 10);
+ tt_int_op(lo, OP_EQ, 10);
+ tt_int_op(hi, OP_EQ, 111);
+
+ next_random_exponential_delay_range(&lo, &hi, 123, 10);
+ tt_int_op(lo, OP_EQ, 10);
+ tt_int_op(hi, OP_EQ, 369);
+
+ next_random_exponential_delay_range(&lo, &hi, INT_MAX-5, 10);
+ tt_int_op(lo, OP_EQ, 10);
+ tt_int_op(hi, OP_EQ, INT_MAX);
+ done:
+ ;
+ }
+
+ static void
test_dir_download_status_increment(void *arg)
{
(void)arg;
More information about the tor-commits
mailing list