mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-20 10:12:15 +01:00
Add unit tests for networkstatus_consensus_is_bootstrapping
This commit is contained in:
parent
d5c70d7102
commit
f698b509d8
@ -955,8 +955,8 @@ we_fetch_router_descriptors(const or_options_t *options)
|
||||
}
|
||||
|
||||
/** Return the consensus flavor we actually want to use to build circuits. */
|
||||
int
|
||||
usable_consensus_flavor(void)
|
||||
MOCK_IMPL(int,
|
||||
usable_consensus_flavor,(void))
|
||||
{
|
||||
if (we_use_microdescriptors_for_circuits(get_options())) {
|
||||
return FLAV_MICRODESC;
|
||||
|
@ -47,7 +47,7 @@ void microdesc_free_all(void);
|
||||
void update_microdesc_downloads(time_t now);
|
||||
void update_microdescs_from_networkstatus(time_t now);
|
||||
|
||||
int usable_consensus_flavor(void);
|
||||
MOCK_DECL(int, usable_consensus_flavor,(void));
|
||||
int we_fetch_microdescriptors(const or_options_t *options);
|
||||
int we_fetch_router_descriptors(const or_options_t *options);
|
||||
int we_use_microdescriptors_for_circuits(const or_options_t *options);
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "container.h"
|
||||
#include "directory.h"
|
||||
#include "dirvote.h"
|
||||
#include "microdesc.h"
|
||||
#include "networkstatus.h"
|
||||
#include "nodelist.h"
|
||||
#include "policies.h"
|
||||
@ -190,6 +191,14 @@ construct_consensus(char **consensus_text_md)
|
||||
crypto_pk_free(sign_skey_leg);
|
||||
}
|
||||
|
||||
static int mock_usable_consensus_flavor_value = FLAV_NS;
|
||||
|
||||
static int
|
||||
mock_usable_consensus_flavor(void)
|
||||
{
|
||||
return mock_usable_consensus_flavor_value;
|
||||
}
|
||||
|
||||
static void
|
||||
test_router_pick_directory_server_impl(void *arg)
|
||||
{
|
||||
@ -209,6 +218,22 @@ test_router_pick_directory_server_impl(void *arg)
|
||||
|
||||
(void)arg;
|
||||
|
||||
MOCK(usable_consensus_flavor, mock_usable_consensus_flavor);
|
||||
|
||||
/* With no consensus, we must be bootstrapping, regardless of time or flavor
|
||||
*/
|
||||
mock_usable_consensus_flavor_value = FLAV_NS;
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now));
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now + 2000));
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now + 2*24*60*60));
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now - 2*24*60*60));
|
||||
|
||||
mock_usable_consensus_flavor_value = FLAV_MICRODESC;
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now));
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now + 2000));
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now + 2*24*60*60));
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now - 2*24*60*60));
|
||||
|
||||
/* No consensus available, fail early */
|
||||
rs = router_pick_directory_server_impl(V3_DIRINFO, (const int) 0, NULL);
|
||||
tt_assert(rs == NULL);
|
||||
@ -223,6 +248,28 @@ test_router_pick_directory_server_impl(void *arg)
|
||||
tt_int_op(smartlist_len(con_md->routerstatus_list), ==, 3);
|
||||
tt_assert(!networkstatus_set_current_consensus_from_ns(con_md,
|
||||
"microdesc"));
|
||||
|
||||
/* If the consensus time or flavor doesn't match, we are still
|
||||
* bootstrapping */
|
||||
mock_usable_consensus_flavor_value = FLAV_NS;
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now));
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now + 2000));
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now + 2*24*60*60));
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now - 2*24*60*60));
|
||||
|
||||
/* With a valid consensus for the current time and flavor, we stop
|
||||
* bootstrapping, even if we have no certificates */
|
||||
mock_usable_consensus_flavor_value = FLAV_MICRODESC;
|
||||
tt_assert(!networkstatus_consensus_is_bootstrapping(now + 2000));
|
||||
tt_assert(!networkstatus_consensus_is_bootstrapping(con_md->valid_after));
|
||||
tt_assert(!networkstatus_consensus_is_bootstrapping(con_md->valid_until));
|
||||
tt_assert(!networkstatus_consensus_is_bootstrapping(con_md->valid_until
|
||||
+ 24*60*60));
|
||||
/* These times are outside the test validity period */
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now));
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now + 2*24*60*60));
|
||||
tt_assert(networkstatus_consensus_is_bootstrapping(now - 2*24*60*60));
|
||||
|
||||
nodelist_set_consensus(con_md);
|
||||
nodelist_assert_ok();
|
||||
|
||||
@ -362,6 +409,7 @@ test_router_pick_directory_server_impl(void *arg)
|
||||
node_router1->rs->last_dir_503_at = 0;
|
||||
|
||||
done:
|
||||
UNMOCK(usable_consensus_flavor);
|
||||
if (router1_id)
|
||||
tor_free(router1_id);
|
||||
if (router2_id)
|
||||
|
Loading…
Reference in New Issue
Block a user