mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 14:23:30 +01:00
prop224: Only upload descriptor if we have good hash ring and SRV.
Make sure we have a live consensus (for SRV) and enough descriptors (for hash ring). Also fix unittests that broke.
This commit is contained in:
parent
43343ec019
commit
1f7b8012ae
@ -2288,6 +2288,17 @@ should_service_upload_descriptor(const hs_service_t *service,
|
||||
goto cannot;
|
||||
}
|
||||
|
||||
/* Don't upload desc if we don't have a live consensus */
|
||||
if (!networkstatus_get_live_consensus(now)) {
|
||||
goto cannot;
|
||||
}
|
||||
|
||||
/* Do we know enough router descriptors to have adequate vision of the HSDir
|
||||
hash ring? */
|
||||
if (!router_have_minimum_dir_info()) {
|
||||
goto cannot;
|
||||
}
|
||||
|
||||
/* Can upload! */
|
||||
return 1;
|
||||
cannot:
|
||||
|
@ -1741,8 +1741,8 @@ static char dir_info_status[512] = "";
|
||||
* no exits in the consensus."
|
||||
* To obtain the final weighted bandwidth, we multiply the
|
||||
* weighted bandwidth fraction for each position (guard, middle, exit). */
|
||||
int
|
||||
router_have_minimum_dir_info(void)
|
||||
MOCK_IMPL(int,
|
||||
router_have_minimum_dir_info,(void))
|
||||
{
|
||||
static int logged_delay=0;
|
||||
const char *delay_fetches_msg = NULL;
|
||||
|
@ -105,7 +105,7 @@ int addrs_in_same_network_family(const tor_addr_t *a1,
|
||||
* no exits in the consensus, we wait for enough info to create internal
|
||||
* paths, and should avoid creating exit paths, as they will simply fail.
|
||||
* We make sure we create all available circuit types at the same time. */
|
||||
int router_have_minimum_dir_info(void);
|
||||
MOCK_DECL(int, router_have_minimum_dir_info,(void));
|
||||
|
||||
/** Set to CONSENSUS_PATH_EXIT if there is at least one exit node
|
||||
* in the consensus. We update this flag in compute_frac_paths_available if
|
||||
|
@ -1177,6 +1177,12 @@ test_build_update_descriptors(void *arg)
|
||||
UNMOCK(hs_overlap_mode_is_active);
|
||||
}
|
||||
|
||||
static int
|
||||
mock_router_have_minimum_dir_info(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
test_upload_descriptors(void *arg)
|
||||
{
|
||||
@ -1191,7 +1197,6 @@ test_upload_descriptors(void *arg)
|
||||
MOCK(hs_overlap_mode_is_active, mock_hs_overlap_mode_is_active_true);
|
||||
MOCK(get_or_state,
|
||||
get_or_state_replacement);
|
||||
|
||||
dummy_state = tor_malloc_zero(sizeof(or_state_t));
|
||||
|
||||
/* Create a service with no descriptor. It's added to the global map. */
|
||||
@ -1229,9 +1234,13 @@ test_upload_descriptors(void *arg)
|
||||
ip->circuit_established = 1;
|
||||
service_intro_point_add(service->desc_current->intro_points.map, ip);
|
||||
|
||||
MOCK(networkstatus_get_live_consensus,
|
||||
mock_networkstatus_get_live_consensus);
|
||||
MOCK(router_have_minimum_dir_info,
|
||||
mock_router_have_minimum_dir_info);
|
||||
|
||||
setup_full_capture_of_logs(LOG_WARN);
|
||||
run_upload_descriptor_event(now);
|
||||
expect_log_msg_containing("No valid consensus so we can't get the");
|
||||
teardown_capture_of_logs();
|
||||
tt_u64_op(service->desc_current->next_upload_time, OP_GE,
|
||||
now + HS_SERVICE_NEXT_UPLOAD_TIME_MIN);
|
||||
|
Loading…
Reference in New Issue
Block a user