aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2015-12-15 14:04:00 -0500
committerNick Mathewson <nickm@torproject.org>2015-12-15 14:04:00 -0500
commit6ba8afe5f87a1edd16f4c61cbb59a29f9126c6c6 (patch)
treeb8d2a7644c9c0e5599e982fcc38769038defe943 /src
parenta56fb58d6e1e93b95e2a060b61f3d00eab95a298 (diff)
parent4c1c2a313dcd3638eededd4a1a83ed5f0b8b9fed (diff)
downloadtor-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.c1
-rw-r--r--src/or/fallback_dirs.inc1
-rw-r--r--src/or/include.am1
-rw-r--r--src/or/routerlist.c11
-rw-r--r--src/test/test_config.c32
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),