|
@@ -12,6 +12,7 @@
|
|
|
#define ROUTERLIST_PRIVATE
|
|
|
#define HIBERNATE_PRIVATE
|
|
|
#include "or.h"
|
|
|
+#include "config.h"
|
|
|
#include "directory.h"
|
|
|
#include "dirserv.h"
|
|
|
#include "dirvote.h"
|
|
@@ -2140,25 +2141,103 @@ test_dir_clip_unmeasured_bw_alt(void)
|
|
|
test_routerstatus_for_umbw);
|
|
|
}
|
|
|
|
|
|
+extern time_t time_of_process_start; /* from main.c */
|
|
|
+
|
|
|
+static void
|
|
|
+test_dir_v2_dir(void *arg)
|
|
|
+{
|
|
|
+ /* Runs in a forked process: acts like a v2 directory just enough to make and
|
|
|
+ * sign a v2 networkstatus opinion */
|
|
|
+
|
|
|
+ cached_dir_t *v2 = NULL;
|
|
|
+ or_options_t *options = get_options_mutable();
|
|
|
+ crypto_pk_t *id_key = pk_generate(4);
|
|
|
+ (void) arg;
|
|
|
+
|
|
|
+ options->ORPort_set = 1; /* So we believe we're a server. */
|
|
|
+ options->DirPort_set = 1;
|
|
|
+ options->Address = tor_strdup("99.99.99.99");
|
|
|
+ options->Nickname = tor_strdup("TestV2Auth");
|
|
|
+ options->ContactInfo = tor_strdup("TestV2Auth <testv2auth@example.com>");
|
|
|
+ {
|
|
|
+ /* Give it a DirPort */
|
|
|
+ smartlist_t *ports = (smartlist_t *)get_configured_ports();
|
|
|
+ port_cfg_t *port = tor_malloc_zero(sizeof(port_cfg_t));
|
|
|
+ port->type = CONN_TYPE_DIR_LISTENER;
|
|
|
+ port->port = 9999;
|
|
|
+ smartlist_add(ports, port);
|
|
|
+ }
|
|
|
+ set_server_identity_key(id_key);
|
|
|
+ set_client_identity_key(id_key);
|
|
|
+
|
|
|
+ /* Add a router. */
|
|
|
+ {
|
|
|
+ was_router_added_t wra;
|
|
|
+ const char *msg = NULL;
|
|
|
+ routerinfo_t *r1 = tor_malloc_zero(sizeof(routerinfo_t));
|
|
|
+ r1->address = tor_strdup("18.244.0.1");
|
|
|
+ r1->addr = 0xc0a80001u; /* 192.168.0.1 */
|
|
|
+ r1->cache_info.published_on = time(NULL)-60;
|
|
|
+ r1->or_port = 9000;
|
|
|
+ r1->dir_port = 9003;
|
|
|
+ tor_addr_parse(&r1->ipv6_addr, "1:2:3:4::");
|
|
|
+ r1->ipv6_orport = 9999;
|
|
|
+ r1->onion_pkey = pk_generate(1);
|
|
|
+ r1->identity_pkey = pk_generate(2);
|
|
|
+ r1->bandwidthrate = 1000;
|
|
|
+ r1->bandwidthburst = 5000;
|
|
|
+ r1->bandwidthcapacity = 10000;
|
|
|
+ r1->exit_policy = NULL;
|
|
|
+ r1->nickname = tor_strdup("Magri");
|
|
|
+ r1->platform = tor_strdup("Tor 0.2.7.7-gamma");
|
|
|
+ r1->cache_info.routerlist_index = -1;
|
|
|
+ r1->cache_info.signed_descriptor_body =
|
|
|
+ router_dump_router_to_string(r1, r1->identity_pkey);
|
|
|
+ r1->cache_info.signed_descriptor_len =
|
|
|
+ strlen(r1->cache_info.signed_descriptor_body);
|
|
|
+ wra = router_add_to_routerlist(r1, &msg, 0, 0);
|
|
|
+ tt_int_op(wra, ==, ROUTER_ADDED_SUCCESSFULLY);
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Prevent call of rep_hist_note_router_unreachable(). */
|
|
|
+ time_of_process_start = time(NULL);
|
|
|
+
|
|
|
+ /* Make a directory so there's somewhere to store the thing */
|
|
|
+#ifdef _WIN32
|
|
|
+ mkdir(get_fname("cached-status"));
|
|
|
+#else
|
|
|
+ mkdir(get_fname("cached-status"), 0700);
|
|
|
+#endif
|
|
|
+
|
|
|
+ v2 = generate_v2_networkstatus_opinion();
|
|
|
+ tt_assert(v2);
|
|
|
+
|
|
|
+ done:
|
|
|
+ crypto_pk_free(id_key);
|
|
|
+ cached_dir_decref(v2);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
#define DIR_LEGACY(name) \
|
|
|
{ #name, legacy_test_helper, TT_FORK, &legacy_setup, test_dir_ ## name }
|
|
|
|
|
|
-#define DIR(name) \
|
|
|
- { #name, test_dir_##name, 0, NULL, NULL }
|
|
|
+#define DIR(name,flags) \
|
|
|
+ { #name, test_dir_##name, (flags), NULL, NULL }
|
|
|
|
|
|
struct testcase_t dir_tests[] = {
|
|
|
DIR_LEGACY(nicknames),
|
|
|
DIR_LEGACY(formats),
|
|
|
DIR_LEGACY(versions),
|
|
|
DIR_LEGACY(fp_pairs),
|
|
|
- DIR(split_fps),
|
|
|
+ DIR(split_fps, 0),
|
|
|
DIR_LEGACY(measured_bw),
|
|
|
DIR_LEGACY(param_voting),
|
|
|
DIR_LEGACY(v3_networkstatus),
|
|
|
- DIR(random_weighted),
|
|
|
- DIR(scale_bw),
|
|
|
+ DIR(random_weighted, 0),
|
|
|
+ DIR(scale_bw, 0),
|
|
|
DIR_LEGACY(clip_unmeasured_bw),
|
|
|
DIR_LEGACY(clip_unmeasured_bw_alt),
|
|
|
+ DIR(v2_dir, TT_FORK),
|
|
|
END_OF_TESTCASES
|
|
|
};
|
|
|
|