diff options
author | Nick Mathewson <nickm@torproject.org> | 2015-12-15 14:04:00 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2015-12-15 14:04:00 -0500 |
commit | 6ba8afe5f87a1edd16f4c61cbb59a29f9126c6c6 (patch) | |
tree | b8d2a7644c9c0e5599e982fcc38769038defe943 /src | |
parent | a56fb58d6e1e93b95e2a060b61f3d00eab95a298 (diff) | |
parent | 4c1c2a313dcd3638eededd4a1a83ed5f0b8b9fed (diff) | |
download | tor-6ba8afe5f87a1edd16f4c61cbb59a29f9126c6c6.tar.gz tor-6ba8afe5f87a1edd16f4c61cbb59a29f9126c6c6.zip |
Merge remote-tracking branch 'teor/feature15775-fallback-v9-squashed'
Diffstat (limited to 'src')
-rw-r--r-- | src/or/config.c | 1 | ||||
-rw-r--r-- | src/or/fallback_dirs.inc | 1 | ||||
-rw-r--r-- | src/or/include.am | 1 | ||||
-rw-r--r-- | src/or/routerlist.c | 11 | ||||
-rw-r--r-- | src/test/test_config.c | 32 |
5 files changed, 39 insertions, 7 deletions
diff --git a/src/or/config.c b/src/or/config.c index 9b570323df..9ec47d2459 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -960,6 +960,7 @@ add_default_fallback_dir_servers,(void)) { int i; const char *fallback[] = { +#include "fallback_dirs.inc" NULL }; for (i=0; fallback[i]; i++) { diff --git a/src/or/fallback_dirs.inc b/src/or/fallback_dirs.inc new file mode 100644 index 0000000000..d9214cb884 --- /dev/null +++ b/src/or/fallback_dirs.inc @@ -0,0 +1 @@ +/* This list will be empty until opt-ins are finalised. */ diff --git a/src/or/include.am b/src/or/include.am index 1180239c89..5ec96e5a93 100644 --- a/src/or/include.am +++ b/src/or/include.am @@ -155,6 +155,7 @@ ORHEADERS = \ src/or/dnsserv.h \ src/or/eventdns_tor.h \ src/or/ext_orport.h \ + src/or/fallback_dirs.inc \ src/or/fp_pair.h \ src/or/geoip.h \ src/or/entrynodes.h \ diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 28b5eb1184..051bac5de5 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -1299,8 +1299,8 @@ router_get_fallback_dir_servers(void) /** Try to find a running dirserver that supports operations of <b>type</b>. * * If there are no running dirservers in our routerlist and the - * <b>PDS_RETRY_IF_NO_SERVERS</b> flag is set, set all the authoritative ones - * as running again, and pick one. + * <b>PDS_RETRY_IF_NO_SERVERS</b> flag is set, set all the fallback ones + * (including authorities) as running again, and pick one. * * If the <b>PDS_IGNORE_FASCISTFIREWALL</b> flag is set, then include * dirservers that we can't reach. @@ -1308,8 +1308,9 @@ router_get_fallback_dir_servers(void) * If the <b>PDS_ALLOW_SELF</b> flag is not set, then don't include ourself * (if we're a dirserver). * - * Don't pick an authority if any non-authority is viable; try to avoid using - * servers that have returned 503 recently. + * Don't pick a fallback directory mirror if any non-fallback is viable; + * (the fallback directory mirrors include the authorities) + * try to avoid using servers that have returned 503 recently. */ const routerstatus_t * router_pick_directory_server(dirinfo_type_t type, int flags) @@ -1336,7 +1337,7 @@ router_pick_directory_server(dirinfo_type_t type, int flags) log_info(LD_DIR, "No reachable router entries for dirservers. " "Trying them all again."); - /* mark all authdirservers as up again */ + /* mark all fallback directory mirrors as up again */ mark_all_dirservers_up(fallback_dir_servers); /* try again */ choice = router_pick_directory_server_impl(type, flags, NULL); diff --git a/src/test/test_config.c b/src/test/test_config.c index 0137d1c49a..53fc693a33 100644 --- a/src/test/test_config.c +++ b/src/test/test_config.c @@ -1692,9 +1692,9 @@ test_config_adding_dir_servers(void *arg) ); /* We need to know if add_default_fallback_dir_servers is called, + * whatever the size of the list in fallback_dirs.inc, * so we use a version of add_default_fallback_dir_servers that adds - * one known default fallback directory. - * There doesn't appear to be any need to test it unmocked. */ + * one known default fallback directory. */ MOCK(add_default_fallback_dir_servers, add_default_fallback_dir_servers_known_default); @@ -3492,6 +3492,33 @@ test_config_use_multiple_directories(void *arg) tor_free(options); } +static void +test_config_default_fallback_dirs(void *arg) +{ + const char *fallback[] = { +#include "../or/fallback_dirs.inc" + NULL + }; + + int n_included_fallback_dirs = 0; + int n_added_fallback_dirs = 0; + + (void)arg; + clear_dir_servers(); + + while (fallback[n_included_fallback_dirs]) + n_included_fallback_dirs++; + + add_default_fallback_dir_servers(); + + n_added_fallback_dirs = smartlist_len(router_get_fallback_dir_servers()); + + tt_assert(n_included_fallback_dirs == n_added_fallback_dirs); + + done: + clear_dir_servers(); +} + #define CONFIG_TEST(name, flags) \ { #name, test_config_ ## name, flags, NULL, NULL } @@ -3503,6 +3530,7 @@ struct testcase_t config_tests[] = { CONFIG_TEST(adding_default_trusted_dir_servers, TT_FORK), CONFIG_TEST(adding_dir_servers, TT_FORK), CONFIG_TEST(default_dir_servers, TT_FORK), + CONFIG_TEST(default_fallback_dirs, 0), CONFIG_TEST(resolve_my_address, TT_FORK), CONFIG_TEST(addressmap, 0), CONFIG_TEST(parse_bridge_line, 0), |