mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 12:23:32 +01:00
Fix spaces and other smaller issues
This commit is contained in:
parent
ade5005853
commit
70de8d4bf8
@ -76,20 +76,28 @@ void rend_cache_intro_failure_note(rend_intro_point_failure_t failure,
|
|||||||
const char *service_id);
|
const char *service_id);
|
||||||
void rend_cache_failure_purge(void);
|
void rend_cache_failure_purge(void);
|
||||||
|
|
||||||
|
|
||||||
#ifdef RENDCACHE_PRIVATE
|
#ifdef RENDCACHE_PRIVATE
|
||||||
|
|
||||||
STATIC size_t rend_cache_entry_allocation(const rend_cache_entry_t *e);
|
STATIC size_t rend_cache_entry_allocation(const rend_cache_entry_t *e);
|
||||||
STATIC void rend_cache_entry_free(rend_cache_entry_t *e);
|
STATIC void rend_cache_entry_free(rend_cache_entry_t *e);
|
||||||
STATIC void rend_cache_failure_intro_entry_free(rend_cache_failure_intro_t *entry);
|
STATIC void rend_cache_failure_intro_entry_free(rend_cache_failure_intro_t
|
||||||
|
*entry);
|
||||||
STATIC void rend_cache_failure_entry_free(rend_cache_failure_t *entry);
|
STATIC void rend_cache_failure_entry_free(rend_cache_failure_t *entry);
|
||||||
STATIC int cache_failure_intro_lookup(const uint8_t *identity, const char *service_id, rend_cache_failure_intro_t **intro_entry);
|
STATIC int cache_failure_intro_lookup(const uint8_t *identity,
|
||||||
|
const char *service_id,
|
||||||
|
rend_cache_failure_intro_t
|
||||||
|
**intro_entry);
|
||||||
STATIC void rend_cache_decrement_allocation(size_t n);
|
STATIC void rend_cache_decrement_allocation(size_t n);
|
||||||
STATIC void rend_cache_increment_allocation(size_t n);
|
STATIC void rend_cache_increment_allocation(size_t n);
|
||||||
STATIC rend_cache_failure_intro_t *rend_cache_failure_intro_entry_new(rend_intro_point_failure_t failure);
|
STATIC rend_cache_failure_intro_t *rend_cache_failure_intro_entry_new(
|
||||||
|
rend_intro_point_failure_t failure);
|
||||||
STATIC rend_cache_failure_t *rend_cache_failure_entry_new(void);
|
STATIC rend_cache_failure_t *rend_cache_failure_entry_new(void);
|
||||||
STATIC void rend_cache_failure_remove(rend_service_descriptor_t *desc);
|
STATIC void rend_cache_failure_remove(rend_service_descriptor_t *desc);
|
||||||
STATIC void cache_failure_intro_add(const uint8_t *identity, const char *service_id, rend_intro_point_failure_t failure);
|
STATIC void cache_failure_intro_add(const uint8_t *identity,
|
||||||
STATIC void validate_intro_point_failure(const rend_service_descriptor_t *desc, const char *service_id);
|
const char *service_id,
|
||||||
|
rend_intro_point_failure_t failure);
|
||||||
|
STATIC void validate_intro_point_failure(const rend_service_descriptor_t *desc,
|
||||||
|
const char *service_id);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* TOR_RENDCACHE_H */
|
#endif /* TOR_RENDCACHE_H */
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
|
|
||||||
/** TODO: Description */
|
/** TODO: Description */
|
||||||
void
|
void
|
||||||
generate_desc(int time_diff, rend_encoded_v2_service_descriptor_t **desc, char **service_id, int intro_points)
|
generate_desc(int time_diff, rend_encoded_v2_service_descriptor_t **desc,
|
||||||
|
char **service_id, int intro_points)
|
||||||
{
|
{
|
||||||
rend_service_descriptor_t *generated = NULL;
|
rend_service_descriptor_t *generated = NULL;
|
||||||
smartlist_t *descs = smartlist_new();
|
smartlist_t *descs = smartlist_new();
|
||||||
@ -15,17 +16,18 @@ generate_desc(int time_diff, rend_encoded_v2_service_descriptor_t **desc, char *
|
|||||||
create_descriptor(&generated, service_id, intro_points);
|
create_descriptor(&generated, service_id, intro_points);
|
||||||
generated->timestamp = now;
|
generated->timestamp = now;
|
||||||
|
|
||||||
rend_encode_v2_descriptors(descs, generated, now, 0, REND_NO_AUTH, NULL, NULL);
|
rend_encode_v2_descriptors(descs, generated, now, 0, REND_NO_AUTH, NULL,
|
||||||
|
NULL);
|
||||||
*desc = ((rend_encoded_v2_service_descriptor_t *)smartlist_get(descs, 0));
|
*desc = ((rend_encoded_v2_service_descriptor_t *)smartlist_get(descs, 0));
|
||||||
|
|
||||||
smartlist_free(descs);
|
smartlist_free(descs);
|
||||||
rend_service_descriptor_free(generated);
|
rend_service_descriptor_free(generated);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** TODO: Description */
|
/** TODO: Description */
|
||||||
void
|
void
|
||||||
create_descriptor(rend_service_descriptor_t **generated, char **service_id, int intro_points)
|
create_descriptor(rend_service_descriptor_t **generated, char **service_id,
|
||||||
|
int intro_points)
|
||||||
{
|
{
|
||||||
crypto_pk_t *pk1 = NULL;
|
crypto_pk_t *pk1 = NULL;
|
||||||
crypto_pk_t *pk2 = NULL;
|
crypto_pk_t *pk2 = NULL;
|
||||||
|
@ -6,7 +6,9 @@
|
|||||||
#ifndef TOR_REND_TEST_HELPERS_H
|
#ifndef TOR_REND_TEST_HELPERS_H
|
||||||
#define TOR_REND_TEST_HELPERS_H
|
#define TOR_REND_TEST_HELPERS_H
|
||||||
|
|
||||||
void generate_desc(int time_diff, rend_encoded_v2_service_descriptor_t **desc, char **service_id, int intro_points);
|
void generate_desc(int time_diff, rend_encoded_v2_service_descriptor_t **desc,
|
||||||
void create_descriptor(rend_service_descriptor_t **generated, char **service_id, int intro_points);
|
char **service_id, int intro_points);
|
||||||
|
void create_descriptor(rend_service_descriptor_t **generated,
|
||||||
|
char **service_id, int intro_points);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -16,7 +16,8 @@
|
|||||||
#define NS_MODULE rend_cache
|
#define NS_MODULE rend_cache
|
||||||
|
|
||||||
static const int RECENT_TIME = -10;
|
static const int RECENT_TIME = -10;
|
||||||
static const int TIME_IN_THE_PAST = -(REND_CACHE_MAX_AGE + REND_CACHE_MAX_SKEW + 10);
|
static const int TIME_IN_THE_PAST = -(REND_CACHE_MAX_AGE + \
|
||||||
|
REND_CACHE_MAX_SKEW + 10);
|
||||||
static const int TIME_IN_THE_FUTURE = REND_CACHE_MAX_SKEW + 10;
|
static const int TIME_IN_THE_FUTURE = REND_CACHE_MAX_SKEW + 10;
|
||||||
|
|
||||||
extern strmap_t *rend_cache;
|
extern strmap_t *rend_cache;
|
||||||
@ -30,10 +31,12 @@ mock_rend_data(char *onion_address)
|
|||||||
rend_data_t rend_query;
|
rend_data_t rend_query;
|
||||||
|
|
||||||
memset(&rend_query, 0, sizeof(rend_query));
|
memset(&rend_query, 0, sizeof(rend_query));
|
||||||
strncpy(rend_query.onion_address, onion_address, REND_SERVICE_ID_LEN_BASE32+1);
|
strncpy(rend_query.onion_address, onion_address,
|
||||||
|
REND_SERVICE_ID_LEN_BASE32+1);
|
||||||
rend_query.auth_type = REND_NO_AUTH;
|
rend_query.auth_type = REND_NO_AUTH;
|
||||||
rend_query.hsdirs_fp = smartlist_new();
|
rend_query.hsdirs_fp = smartlist_new();
|
||||||
smartlist_add(rend_query.hsdirs_fp, tor_memdup("aaaaaaaaaaaaaaaaaaaaaaaa", DIGEST_LEN));
|
smartlist_add(rend_query.hsdirs_fp, tor_memdup("aaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
DIGEST_LEN));
|
||||||
|
|
||||||
return rend_query;
|
return rend_query;
|
||||||
}
|
}
|
||||||
@ -53,7 +56,6 @@ test_rend_cache_lookup_entry(void *data)
|
|||||||
|
|
||||||
generate_desc(RECENT_TIME, &desc_holder, &service_id, 3);
|
generate_desc(RECENT_TIME, &desc_holder, &service_id, 3);
|
||||||
|
|
||||||
|
|
||||||
ret = rend_cache_lookup_entry("abababababababab", 0, NULL);
|
ret = rend_cache_lookup_entry("abababababababab", 0, NULL);
|
||||||
tt_int_op(ret, OP_EQ, -ENOENT);
|
tt_int_op(ret, OP_EQ, -ENOENT);
|
||||||
|
|
||||||
@ -67,8 +69,10 @@ test_rend_cache_lookup_entry(void *data)
|
|||||||
tt_int_op(ret, OP_EQ, -ENOENT);
|
tt_int_op(ret, OP_EQ, -ENOENT);
|
||||||
|
|
||||||
mock_rend_query = mock_rend_data(service_id);
|
mock_rend_query = mock_rend_data(service_id);
|
||||||
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id, DIGEST_LEN);
|
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id,
|
||||||
rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
DIGEST_LEN);
|
||||||
|
rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32,
|
||||||
|
&mock_rend_query, NULL);
|
||||||
|
|
||||||
ret = rend_cache_lookup_entry(service_id, 2, NULL);
|
ret = rend_cache_lookup_entry(service_id, 2, NULL);
|
||||||
tt_int_op(ret, OP_EQ, 0);
|
tt_int_op(ret, OP_EQ, 0);
|
||||||
@ -102,8 +106,11 @@ test_rend_cache_store_v2_desc_as_client(void *data)
|
|||||||
|
|
||||||
// Test success
|
// Test success
|
||||||
mock_rend_query = mock_rend_data(service_id);
|
mock_rend_query = mock_rend_data(service_id);
|
||||||
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id, DIGEST_LEN);
|
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id,
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, &mock_rend_query, &entry);
|
DIGEST_LEN);
|
||||||
|
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
|
||||||
|
desc_id_base32, &mock_rend_query,
|
||||||
|
&entry);
|
||||||
|
|
||||||
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
||||||
tt_assert(entry);
|
tt_assert(entry);
|
||||||
@ -113,34 +120,45 @@ test_rend_cache_store_v2_desc_as_client(void *data)
|
|||||||
// Test various failure modes
|
// Test various failure modes
|
||||||
|
|
||||||
// TODO: a too long desc_id_base32 argument crashes the function
|
// TODO: a too long desc_id_base32 argument crashes the function
|
||||||
/* ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, "3TOOLONG3TOOLONG3TOOLONG3TOOLONG3TOOLONG3TOOLONG", &mock_rend_query, NULL); */
|
/* ret = rend_cache_store_v2_desc_as_client( */
|
||||||
|
/* desc_holder->desc_str, */
|
||||||
|
/* "3TOOLONG3TOOLONG3TOOLONG3TOOLONG3TOOLONG3TOOLONG", */
|
||||||
|
/* &mock_rend_query, NULL); */
|
||||||
/* tt_int_op(ret, OP_EQ, RCS_BADDESC); */
|
/* tt_int_op(ret, OP_EQ, RCS_BADDESC); */
|
||||||
|
|
||||||
// Test bad base32 failure
|
// Test bad base32 failure
|
||||||
// This causes an assertion failure if we're running with assertions. But when doing coverage, we can test it.
|
// This causes an assertion failure if we're running with assertions.
|
||||||
|
// But when doing coverage, we can test it.
|
||||||
#ifdef TOR_COVERAGE
|
#ifdef TOR_COVERAGE
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, "!xqunszqnaolrrfmtzgaki7mxelgvkj", &mock_rend_query, NULL);
|
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
|
||||||
|
"!xqunszqnaolrrfmtzgaki7mxelgvkj", &mock_rend_query, NULL);
|
||||||
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Test invalid descriptor
|
// Test invalid descriptor
|
||||||
ret = rend_cache_store_v2_desc_as_client("invalid descriptor", "3xqunszqnaolrrfmtzgaki7mxelgvkje", &mock_rend_query, NULL);
|
ret = rend_cache_store_v2_desc_as_client("invalid descriptor",
|
||||||
|
"3xqunszqnaolrrfmtzgaki7mxelgvkje", &mock_rend_query, NULL);
|
||||||
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
||||||
|
|
||||||
// TODO: it doesn't seem to be possible to test invalid service ID condition.
|
// TODO: it doesn't seem to be possible to test invalid service ID condition.
|
||||||
// that means it is likely not possible to have that condition without earlier conditions failing first (such as signature checking of the desc)
|
// that means it is likely not possible to have that condition without
|
||||||
|
// earlier conditions failing first (such as signature checking of the desc)
|
||||||
|
|
||||||
// Test mismatch between service ID and onion address
|
// Test mismatch between service ID and onion address
|
||||||
rend_cache_init();
|
rend_cache_init();
|
||||||
strncpy(mock_rend_query.onion_address, "abc", REND_SERVICE_ID_LEN_BASE32+1);
|
strncpy(mock_rend_query.onion_address, "abc", REND_SERVICE_ID_LEN_BASE32+1);
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
|
||||||
|
desc_id_base32,
|
||||||
|
&mock_rend_query, NULL);
|
||||||
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
||||||
|
|
||||||
// Test incorrect descriptor ID
|
// Test incorrect descriptor ID
|
||||||
rend_cache_init();
|
rend_cache_init();
|
||||||
mock_rend_query = mock_rend_data(service_id);
|
mock_rend_query = mock_rend_data(service_id);
|
||||||
desc_id_base32[0]++;
|
desc_id_base32[0]++;
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
|
||||||
|
desc_id_base32, &mock_rend_query,
|
||||||
|
NULL);
|
||||||
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
||||||
desc_id_base32[0]--;
|
desc_id_base32[0]--;
|
||||||
|
|
||||||
@ -151,9 +169,12 @@ test_rend_cache_store_v2_desc_as_client(void *data)
|
|||||||
|
|
||||||
generate_desc(TIME_IN_THE_PAST, &desc_holder, &service_id, 3);
|
generate_desc(TIME_IN_THE_PAST, &desc_holder, &service_id, 3);
|
||||||
mock_rend_query = mock_rend_data(service_id);
|
mock_rend_query = mock_rend_data(service_id);
|
||||||
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id, DIGEST_LEN);
|
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id,
|
||||||
|
DIGEST_LEN);
|
||||||
|
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
|
||||||
|
desc_id_base32,
|
||||||
|
&mock_rend_query, NULL);
|
||||||
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
||||||
|
|
||||||
// Test too new descriptor (in the future)
|
// Test too new descriptor (in the future)
|
||||||
@ -163,9 +184,12 @@ test_rend_cache_store_v2_desc_as_client(void *data)
|
|||||||
|
|
||||||
generate_desc(TIME_IN_THE_FUTURE, &desc_holder, &service_id, 3);
|
generate_desc(TIME_IN_THE_FUTURE, &desc_holder, &service_id, 3);
|
||||||
mock_rend_query = mock_rend_data(service_id);
|
mock_rend_query = mock_rend_data(service_id);
|
||||||
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id, DIGEST_LEN);
|
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id,
|
||||||
|
DIGEST_LEN);
|
||||||
|
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
|
||||||
|
desc_id_base32, &mock_rend_query,
|
||||||
|
NULL);
|
||||||
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
||||||
|
|
||||||
// Test when a descriptor is already in the cache
|
// Test when a descriptor is already in the cache
|
||||||
@ -176,13 +200,19 @@ test_rend_cache_store_v2_desc_as_client(void *data)
|
|||||||
|
|
||||||
generate_desc(RECENT_TIME, &desc_holder, &service_id, 3);
|
generate_desc(RECENT_TIME, &desc_holder, &service_id, 3);
|
||||||
mock_rend_query = mock_rend_data(service_id);
|
mock_rend_query = mock_rend_data(service_id);
|
||||||
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id, DIGEST_LEN);
|
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id,
|
||||||
|
DIGEST_LEN);
|
||||||
|
|
||||||
rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32,
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
&mock_rend_query, NULL);
|
||||||
|
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
|
||||||
|
desc_id_base32, &mock_rend_query,
|
||||||
|
NULL);
|
||||||
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
||||||
|
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, &mock_rend_query, &entry);
|
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
|
||||||
|
desc_id_base32, &mock_rend_query,
|
||||||
|
&entry);
|
||||||
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
||||||
tt_assert(entry);
|
tt_assert(entry);
|
||||||
|
|
||||||
@ -195,9 +225,13 @@ test_rend_cache_store_v2_desc_as_client(void *data)
|
|||||||
mock_rend_query = mock_rend_data(service_id);
|
mock_rend_query = mock_rend_data(service_id);
|
||||||
mock_rend_query.auth_type = REND_BASIC_AUTH;
|
mock_rend_query.auth_type = REND_BASIC_AUTH;
|
||||||
client_cookie[0] = 'A';
|
client_cookie[0] = 'A';
|
||||||
memcpy(mock_rend_query.descriptor_cookie, client_cookie, REND_DESC_COOKIE_LEN);
|
memcpy(mock_rend_query.descriptor_cookie, client_cookie,
|
||||||
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id, DIGEST_LEN);
|
REND_DESC_COOKIE_LEN);
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id,
|
||||||
|
DIGEST_LEN);
|
||||||
|
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
|
||||||
|
desc_id_base32, &mock_rend_query,
|
||||||
|
NULL);
|
||||||
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
||||||
|
|
||||||
// Test successful run when we have REND_BASIC_AUTH but not cookie
|
// Test successful run when we have REND_BASIC_AUTH but not cookie
|
||||||
@ -208,8 +242,11 @@ test_rend_cache_store_v2_desc_as_client(void *data)
|
|||||||
generate_desc(RECENT_TIME, &desc_holder, &service_id, 3);
|
generate_desc(RECENT_TIME, &desc_holder, &service_id, 3);
|
||||||
mock_rend_query = mock_rend_data(service_id);
|
mock_rend_query = mock_rend_data(service_id);
|
||||||
mock_rend_query.auth_type = REND_BASIC_AUTH;
|
mock_rend_query.auth_type = REND_BASIC_AUTH;
|
||||||
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id, DIGEST_LEN);
|
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id,
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
DIGEST_LEN);
|
||||||
|
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
|
||||||
|
desc_id_base32, &mock_rend_query,
|
||||||
|
NULL);
|
||||||
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
||||||
|
|
||||||
// Test when we have no introduction points
|
// Test when we have no introduction points
|
||||||
@ -219,8 +256,11 @@ test_rend_cache_store_v2_desc_as_client(void *data)
|
|||||||
|
|
||||||
generate_desc(RECENT_TIME, &desc_holder, &service_id, 0);
|
generate_desc(RECENT_TIME, &desc_holder, &service_id, 0);
|
||||||
mock_rend_query = mock_rend_data(service_id);
|
mock_rend_query = mock_rend_data(service_id);
|
||||||
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id, DIGEST_LEN);
|
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id,
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
DIGEST_LEN);
|
||||||
|
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
|
||||||
|
desc_id_base32, &mock_rend_query,
|
||||||
|
NULL);
|
||||||
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
||||||
|
|
||||||
// Test when we have too many intro points
|
// Test when we have too many intro points
|
||||||
@ -230,8 +270,11 @@ test_rend_cache_store_v2_desc_as_client(void *data)
|
|||||||
|
|
||||||
generate_desc(RECENT_TIME, &desc_holder, &service_id, MAX_INTRO_POINTS+1);
|
generate_desc(RECENT_TIME, &desc_holder, &service_id, MAX_INTRO_POINTS+1);
|
||||||
mock_rend_query = mock_rend_data(service_id);
|
mock_rend_query = mock_rend_data(service_id);
|
||||||
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id, DIGEST_LEN);
|
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id,
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
DIGEST_LEN);
|
||||||
|
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
|
||||||
|
desc_id_base32, &mock_rend_query,
|
||||||
|
NULL);
|
||||||
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
tt_int_op(ret, OP_EQ, RCS_BADDESC);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
@ -258,30 +301,42 @@ test_rend_cache_store_v2_desc_as_client_with_different_time(void *data)
|
|||||||
create_descriptor(&generated, &service_id, 3);
|
create_descriptor(&generated, &service_id, 3);
|
||||||
|
|
||||||
generated->timestamp = t + RECENT_TIME;
|
generated->timestamp = t + RECENT_TIME;
|
||||||
rend_encode_v2_descriptors(descs, generated, t + RECENT_TIME, 0, REND_NO_AUTH, NULL, NULL);
|
rend_encode_v2_descriptors(descs, generated, t + RECENT_TIME, 0,
|
||||||
desc_holder_newer = ((rend_encoded_v2_service_descriptor_t *)smartlist_get(descs, 0));
|
REND_NO_AUTH, NULL, NULL);
|
||||||
|
desc_holder_newer = ((rend_encoded_v2_service_descriptor_t *)
|
||||||
|
smartlist_get(descs, 0));
|
||||||
|
|
||||||
smartlist_free(descs);
|
smartlist_free(descs);
|
||||||
descs = smartlist_new();
|
descs = smartlist_new();
|
||||||
|
|
||||||
generated->timestamp = (t + RECENT_TIME) - 20;
|
generated->timestamp = (t + RECENT_TIME) - 20;
|
||||||
rend_encode_v2_descriptors(descs, generated, t + RECENT_TIME, 0, REND_NO_AUTH, NULL, NULL);
|
rend_encode_v2_descriptors(descs, generated, t + RECENT_TIME, 0,
|
||||||
desc_holder_older = ((rend_encoded_v2_service_descriptor_t *)smartlist_get(descs, 0));
|
REND_NO_AUTH, NULL, NULL);
|
||||||
|
desc_holder_older = ((rend_encoded_v2_service_descriptor_t *)
|
||||||
|
smartlist_get(descs, 0));
|
||||||
|
|
||||||
(void)data;
|
(void)data;
|
||||||
rend_cache_init();
|
rend_cache_init();
|
||||||
|
|
||||||
// Test when a descriptor is already in the cache and it is newer than the one we submit
|
// Test when a descriptor is already in the cache and it is newer than the
|
||||||
|
// one we submit
|
||||||
mock_rend_query = mock_rend_data(service_id);
|
mock_rend_query = mock_rend_data(service_id);
|
||||||
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder_newer->desc_id, DIGEST_LEN);
|
base32_encode(desc_id_base32, sizeof(desc_id_base32),
|
||||||
rend_cache_store_v2_desc_as_client(desc_holder_newer->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
desc_holder_newer->desc_id, DIGEST_LEN);
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder_older->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
rend_cache_store_v2_desc_as_client(desc_holder_newer->desc_str,
|
||||||
|
desc_id_base32, &mock_rend_query, NULL);
|
||||||
|
ret = rend_cache_store_v2_desc_as_client(desc_holder_older->desc_str,
|
||||||
|
desc_id_base32, &mock_rend_query,
|
||||||
|
NULL);
|
||||||
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
||||||
|
|
||||||
// Test when an old descriptor is in the cache and we submit a newer one
|
// Test when an old descriptor is in the cache and we submit a newer one
|
||||||
rend_cache_init();
|
rend_cache_init();
|
||||||
rend_cache_store_v2_desc_as_client(desc_holder_older->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
rend_cache_store_v2_desc_as_client(desc_holder_older->desc_str,
|
||||||
ret = rend_cache_store_v2_desc_as_client(desc_holder_newer->desc_str, desc_id_base32, &mock_rend_query, NULL);
|
desc_id_base32, &mock_rend_query, NULL);
|
||||||
|
ret = rend_cache_store_v2_desc_as_client(desc_holder_newer->desc_str,
|
||||||
|
desc_id_base32, &mock_rend_query,
|
||||||
|
NULL);
|
||||||
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
tt_int_op(ret, OP_EQ, RCS_OKAY);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
@ -292,7 +347,6 @@ test_rend_cache_store_v2_desc_as_client_with_different_time(void *data)
|
|||||||
tor_free(service_id);
|
tor_free(service_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define NS_SUBMODULE lookup_v2_desc_as_dir
|
#define NS_SUBMODULE lookup_v2_desc_as_dir
|
||||||
NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
|
NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
|
||||||
NS_DECL(int, hid_serv_responsible_for_desc_id, (const char *id));
|
NS_DECL(int, hid_serv_responsible_for_desc_id, (const char *id));
|
||||||
@ -303,7 +357,7 @@ static int hid_serv_responsible_for_desc_id_response;
|
|||||||
static const routerinfo_t *
|
static const routerinfo_t *
|
||||||
NS(router_get_my_routerinfo)(void)
|
NS(router_get_my_routerinfo)(void)
|
||||||
{
|
{
|
||||||
if(!mock_routerinfo) {
|
if (!mock_routerinfo) {
|
||||||
mock_routerinfo = tor_malloc(sizeof(routerinfo_t));
|
mock_routerinfo = tor_malloc(sizeof(routerinfo_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -313,6 +367,7 @@ NS(router_get_my_routerinfo)(void)
|
|||||||
static int
|
static int
|
||||||
NS(hid_serv_responsible_for_desc_id)(const char *id)
|
NS(hid_serv_responsible_for_desc_id)(const char *id)
|
||||||
{
|
{
|
||||||
|
(void)id;
|
||||||
return hid_serv_responsible_for_desc_id_response;
|
return hid_serv_responsible_for_desc_id_response;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -337,14 +392,16 @@ test_rend_cache_lookup_v2_desc_as_dir(void *data)
|
|||||||
tt_int_op(ret, OP_EQ, -1);
|
tt_int_op(ret, OP_EQ, -1);
|
||||||
|
|
||||||
// Test non-existent descriptor but well formed
|
// Test non-existent descriptor but well formed
|
||||||
ret = rend_cache_lookup_v2_desc_as_dir("3xqunszqnaolrrfmtzgaki7mxelgvkje", NULL);
|
ret = rend_cache_lookup_v2_desc_as_dir("3xqunszqnaolrrfmtzgaki7mxelgvkje",
|
||||||
|
NULL);
|
||||||
tt_int_op(ret, OP_EQ, 0);
|
tt_int_op(ret, OP_EQ, 0);
|
||||||
|
|
||||||
// Test existing descriptor
|
// Test existing descriptor
|
||||||
hid_serv_responsible_for_desc_id_response = 1;
|
hid_serv_responsible_for_desc_id_response = 1;
|
||||||
generate_desc(RECENT_TIME, &desc_holder, &service_id, 3);
|
generate_desc(RECENT_TIME, &desc_holder, &service_id, 3);
|
||||||
rend_cache_store_v2_desc_as_dir(desc_holder->desc_str);
|
rend_cache_store_v2_desc_as_dir(desc_holder->desc_str);
|
||||||
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id, DIGEST_LEN);
|
base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id,
|
||||||
|
DIGEST_LEN);
|
||||||
ret = rend_cache_lookup_v2_desc_as_dir(desc_id_base32, &ret_desc);
|
ret = rend_cache_lookup_v2_desc_as_dir(desc_id_base32, &ret_desc);
|
||||||
tt_int_op(ret, OP_EQ, 1);
|
tt_int_op(ret, OP_EQ, 1);
|
||||||
tt_assert(ret_desc);
|
tt_assert(ret_desc);
|
||||||
@ -361,9 +418,6 @@ test_rend_cache_lookup_v2_desc_as_dir(void *data)
|
|||||||
NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
|
NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
|
||||||
NS_DECL(int, hid_serv_responsible_for_desc_id, (const char *id));
|
NS_DECL(int, hid_serv_responsible_for_desc_id, (const char *id));
|
||||||
|
|
||||||
static routerinfo_t *mock_routerinfo;
|
|
||||||
static int hid_serv_responsible_for_desc_id_response;
|
|
||||||
|
|
||||||
static const routerinfo_t *
|
static const routerinfo_t *
|
||||||
NS(router_get_my_routerinfo)(void)
|
NS(router_get_my_routerinfo)(void)
|
||||||
{
|
{
|
||||||
@ -373,6 +427,7 @@ NS(router_get_my_routerinfo)(void)
|
|||||||
static int
|
static int
|
||||||
NS(hid_serv_responsible_for_desc_id)(const char *id)
|
NS(hid_serv_responsible_for_desc_id)(const char *id)
|
||||||
{
|
{
|
||||||
|
(void)id;
|
||||||
return hid_serv_responsible_for_desc_id_response;
|
return hid_serv_responsible_for_desc_id_response;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -458,15 +513,19 @@ test_rend_cache_store_v2_desc_as_dir_with_different_time(void *data)
|
|||||||
|
|
||||||
create_descriptor(&generated, &service_id, 3);
|
create_descriptor(&generated, &service_id, 3);
|
||||||
generated->timestamp = t + RECENT_TIME;
|
generated->timestamp = t + RECENT_TIME;
|
||||||
rend_encode_v2_descriptors(descs, generated, t + RECENT_TIME, 0, REND_NO_AUTH, NULL, NULL);
|
rend_encode_v2_descriptors(descs, generated, t + RECENT_TIME, 0,
|
||||||
desc_holder_newer = ((rend_encoded_v2_service_descriptor_t *)smartlist_get(descs, 0));
|
REND_NO_AUTH, NULL, NULL);
|
||||||
|
desc_holder_newer = ((rend_encoded_v2_service_descriptor_t *)
|
||||||
|
smartlist_get(descs, 0));
|
||||||
|
|
||||||
smartlist_free(descs);
|
smartlist_free(descs);
|
||||||
descs = smartlist_new();
|
descs = smartlist_new();
|
||||||
|
|
||||||
generated->timestamp = (t + RECENT_TIME) - 20;
|
generated->timestamp = (t + RECENT_TIME) - 20;
|
||||||
rend_encode_v2_descriptors(descs, generated, t + RECENT_TIME, 0, REND_NO_AUTH, NULL, NULL);
|
rend_encode_v2_descriptors(descs, generated, t + RECENT_TIME, 0,
|
||||||
desc_holder_older = ((rend_encoded_v2_service_descriptor_t *)smartlist_get(descs, 0));
|
REND_NO_AUTH, NULL, NULL);
|
||||||
|
desc_holder_older = ((rend_encoded_v2_service_descriptor_t *)
|
||||||
|
smartlist_get(descs, 0));
|
||||||
|
|
||||||
// Test when we have a newer descriptor stored
|
// Test when we have a newer descriptor stored
|
||||||
mock_routerinfo = tor_malloc(sizeof(routerinfo_t));
|
mock_routerinfo = tor_malloc(sizeof(routerinfo_t));
|
||||||
@ -508,16 +567,20 @@ test_rend_cache_store_v2_desc_as_dir_with_different_content(void *data)
|
|||||||
|
|
||||||
create_descriptor(&generated, &service_id, 3);
|
create_descriptor(&generated, &service_id, 3);
|
||||||
generated->timestamp = t + RECENT_TIME;
|
generated->timestamp = t + RECENT_TIME;
|
||||||
rend_encode_v2_descriptors(descs, generated, t + RECENT_TIME, 0, REND_NO_AUTH, NULL, NULL);
|
rend_encode_v2_descriptors(descs, generated, t + RECENT_TIME, 0,
|
||||||
desc_holder_one = ((rend_encoded_v2_service_descriptor_t *)smartlist_get(descs, 0));
|
REND_NO_AUTH, NULL, NULL);
|
||||||
|
desc_holder_one = ((rend_encoded_v2_service_descriptor_t *)
|
||||||
|
smartlist_get(descs, 0));
|
||||||
|
|
||||||
smartlist_free(descs);
|
smartlist_free(descs);
|
||||||
descs = smartlist_new();
|
descs = smartlist_new();
|
||||||
|
|
||||||
generated->timestamp = t + RECENT_TIME;
|
generated->timestamp = t + RECENT_TIME;
|
||||||
generated->protocols = 41;
|
generated->protocols = 41;
|
||||||
rend_encode_v2_descriptors(descs, generated, t + RECENT_TIME, 0, REND_NO_AUTH, NULL, NULL);
|
rend_encode_v2_descriptors(descs, generated, t + RECENT_TIME, 0,
|
||||||
desc_holder_two = ((rend_encoded_v2_service_descriptor_t *)smartlist_get(descs, 0));
|
REND_NO_AUTH, NULL, NULL);
|
||||||
|
desc_holder_two = ((rend_encoded_v2_service_descriptor_t *)
|
||||||
|
smartlist_get(descs, 0));
|
||||||
|
|
||||||
// Test when we have another descriptor stored, with a different descriptor
|
// Test when we have another descriptor stored, with a different descriptor
|
||||||
mock_routerinfo = tor_malloc(sizeof(routerinfo_t));
|
mock_routerinfo = tor_malloc(sizeof(routerinfo_t));
|
||||||
@ -531,7 +594,6 @@ test_rend_cache_store_v2_desc_as_dir_with_different_content(void *data)
|
|||||||
NS_UNMOCK(hid_serv_responsible_for_desc_id);
|
NS_UNMOCK(hid_serv_responsible_for_desc_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#undef NS_SUBMODULE
|
#undef NS_SUBMODULE
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -540,14 +602,18 @@ test_rend_cache_init(void *data)
|
|||||||
(void)data;
|
(void)data;
|
||||||
|
|
||||||
tt_assert_msg(!rend_cache, "rend_cache should be NULL when starting");
|
tt_assert_msg(!rend_cache, "rend_cache should be NULL when starting");
|
||||||
tt_assert_msg(!rend_cache_v2_dir, "rend_cache_v2_dir should be NULL when starting");
|
tt_assert_msg(!rend_cache_v2_dir, "rend_cache_v2_dir should be NULL "
|
||||||
tt_assert_msg(!rend_cache_failure, "rend_cache_failure should be NULL when starting");
|
"when starting");
|
||||||
|
tt_assert_msg(!rend_cache_failure, "rend_cache_failure should be NULL when "
|
||||||
|
"starting");
|
||||||
|
|
||||||
rend_cache_init();
|
rend_cache_init();
|
||||||
|
|
||||||
tt_assert_msg(rend_cache, "rend_cache should not be NULL after initing");
|
tt_assert_msg(rend_cache, "rend_cache should not be NULL after initing");
|
||||||
tt_assert_msg(rend_cache_v2_dir, "rend_cache_v2_dir should not be NULL after initing");
|
tt_assert_msg(rend_cache_v2_dir, "rend_cache_v2_dir should not be NULL "
|
||||||
tt_assert_msg(rend_cache_failure, "rend_cache_failure should not be NULL after initing");
|
"after initing");
|
||||||
|
tt_assert_msg(rend_cache_failure, "rend_cache_failure should not be NULL "
|
||||||
|
"after initing");
|
||||||
|
|
||||||
tt_int_op(strmap_size(rend_cache), OP_EQ, 0);
|
tt_int_op(strmap_size(rend_cache), OP_EQ, 0);
|
||||||
tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 0);
|
tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 0);
|
||||||
@ -603,7 +669,6 @@ test_rend_cache_increment_allocation(void *data)
|
|||||||
(void)0;
|
(void)0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_rend_cache_failure_intro_entry_new(void *data)
|
test_rend_cache_failure_intro_entry_new(void *data)
|
||||||
{
|
{
|
||||||
@ -790,7 +855,6 @@ test_rend_cache_failure_clean(void *data)
|
|||||||
rend_cache_failure_clean(time(NULL));
|
rend_cache_failure_clean(time(NULL));
|
||||||
tt_int_op(strmap_size(rend_cache_failure), OP_EQ, 0);
|
tt_int_op(strmap_size(rend_cache_failure), OP_EQ, 0);
|
||||||
|
|
||||||
|
|
||||||
// Test with one old intro point and one new one
|
// Test with one old intro point and one new one
|
||||||
rend_cache_failure_purge();
|
rend_cache_failure_purge();
|
||||||
failure = rend_cache_failure_entry_new();
|
failure = rend_cache_failure_entry_new();
|
||||||
@ -809,7 +873,6 @@ test_rend_cache_failure_clean(void *data)
|
|||||||
(void)0;
|
(void)0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_rend_cache_failure_remove(void *data)
|
test_rend_cache_failure_remove(void *data)
|
||||||
{
|
{
|
||||||
@ -826,7 +889,8 @@ test_rend_cache_failure_remove(void *data)
|
|||||||
desc->pk = pk_generate(0);
|
desc->pk = pk_generate(0);
|
||||||
rend_cache_failure_remove(desc);
|
rend_cache_failure_remove(desc);
|
||||||
|
|
||||||
// There seems to not exist any way of getting rend_cache_failure_remove() to fail because of a problem with rend_get_service_id from here
|
// There seems to not exist any way of getting rend_cache_failure_remove()
|
||||||
|
// to fail because of a problem with rend_get_service_id from here
|
||||||
|
|
||||||
/* done: */
|
/* done: */
|
||||||
/* (void)0; */
|
/* (void)0; */
|
||||||
@ -864,7 +928,6 @@ test_rend_cache_free_all(void *data)
|
|||||||
(void)0;
|
(void)0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_rend_cache_entry_free(void *data)
|
test_rend_cache_entry_free(void *data)
|
||||||
{
|
{
|
||||||
@ -887,7 +950,6 @@ test_rend_cache_entry_free(void *data)
|
|||||||
/* (void)0; */
|
/* (void)0; */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_rend_cache_purge(void *data)
|
test_rend_cache_purge(void *data)
|
||||||
{
|
{
|
||||||
@ -922,7 +984,8 @@ test_rend_cache_failure_intro_add(void *data)
|
|||||||
rend_cache_init();
|
rend_cache_init();
|
||||||
|
|
||||||
// Adds non-existing entry
|
// Adds non-existing entry
|
||||||
cache_failure_intro_add((const uint8_t *)"foo1", "foo2", INTRO_POINT_FAILURE_TIMEOUT);
|
cache_failure_intro_add((const uint8_t *)"foo1", "foo2",
|
||||||
|
INTRO_POINT_FAILURE_TIMEOUT);
|
||||||
fail_entry = strmap_get_lc(rend_cache_failure, "foo2");
|
fail_entry = strmap_get_lc(rend_cache_failure, "foo2");
|
||||||
tt_assert(fail_entry);
|
tt_assert(fail_entry);
|
||||||
tt_int_op(digestmap_size(fail_entry->intro_failures), OP_EQ, 1);
|
tt_int_op(digestmap_size(fail_entry->intro_failures), OP_EQ, 1);
|
||||||
@ -930,7 +993,8 @@ test_rend_cache_failure_intro_add(void *data)
|
|||||||
tt_assert(entry);
|
tt_assert(entry);
|
||||||
|
|
||||||
// Adds existing entry
|
// Adds existing entry
|
||||||
cache_failure_intro_add((const uint8_t *)"foo1", "foo2", INTRO_POINT_FAILURE_TIMEOUT);
|
cache_failure_intro_add((const uint8_t *)"foo1", "foo2",
|
||||||
|
INTRO_POINT_FAILURE_TIMEOUT);
|
||||||
fail_entry = strmap_get_lc(rend_cache_failure, "foo2");
|
fail_entry = strmap_get_lc(rend_cache_failure, "foo2");
|
||||||
tt_assert(fail_entry);
|
tt_assert(fail_entry);
|
||||||
tt_int_op(digestmap_size(fail_entry->intro_failures), OP_EQ, 1);
|
tt_int_op(digestmap_size(fail_entry->intro_failures), OP_EQ, 1);
|
||||||
@ -941,7 +1005,6 @@ test_rend_cache_failure_intro_add(void *data)
|
|||||||
rend_cache_purge();
|
rend_cache_purge();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_rend_cache_intro_failure_note(void *data)
|
test_rend_cache_intro_failure_note(void *data)
|
||||||
{
|
{
|
||||||
@ -950,7 +1013,8 @@ test_rend_cache_intro_failure_note(void *data)
|
|||||||
rend_cache_failure_intro_t *entry;
|
rend_cache_failure_intro_t *entry;
|
||||||
|
|
||||||
// Test not found
|
// Test not found
|
||||||
rend_cache_intro_failure_note(INTRO_POINT_FAILURE_TIMEOUT,(const uint8_t *)"foo1", "foo2");
|
rend_cache_intro_failure_note(INTRO_POINT_FAILURE_TIMEOUT,
|
||||||
|
(const uint8_t *)"foo1", "foo2");
|
||||||
fail_entry = strmap_get_lc(rend_cache_failure, "foo2");
|
fail_entry = strmap_get_lc(rend_cache_failure, "foo2");
|
||||||
tt_assert(fail_entry);
|
tt_assert(fail_entry);
|
||||||
tt_int_op(digestmap_size(fail_entry->intro_failures), OP_EQ, 1);
|
tt_int_op(digestmap_size(fail_entry->intro_failures), OP_EQ, 1);
|
||||||
@ -959,7 +1023,8 @@ test_rend_cache_intro_failure_note(void *data)
|
|||||||
tt_int_op(entry->failure_type, OP_EQ, INTRO_POINT_FAILURE_TIMEOUT);
|
tt_int_op(entry->failure_type, OP_EQ, INTRO_POINT_FAILURE_TIMEOUT);
|
||||||
|
|
||||||
// Test found
|
// Test found
|
||||||
rend_cache_intro_failure_note(INTRO_POINT_FAILURE_UNREACHABLE,(const uint8_t *)"foo1", "foo2");
|
rend_cache_intro_failure_note(INTRO_POINT_FAILURE_UNREACHABLE,
|
||||||
|
(const uint8_t *)"foo1", "foo2");
|
||||||
tt_int_op(entry->failure_type, OP_EQ, INTRO_POINT_FAILURE_UNREACHABLE);
|
tt_int_op(entry->failure_type, OP_EQ, INTRO_POINT_FAILURE_UNREACHABLE);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
@ -969,15 +1034,13 @@ test_rend_cache_intro_failure_note(void *data)
|
|||||||
#define NS_SUBMODULE clean_v2_descs_as_dir
|
#define NS_SUBMODULE clean_v2_descs_as_dir
|
||||||
NS_DECL(int, hid_serv_responsible_for_desc_id, (const char *id));
|
NS_DECL(int, hid_serv_responsible_for_desc_id, (const char *id));
|
||||||
|
|
||||||
static int hid_serv_responsible_for_desc_id_response;
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
NS(hid_serv_responsible_for_desc_id)(const char *id)
|
NS(hid_serv_responsible_for_desc_id)(const char *id)
|
||||||
{
|
{
|
||||||
|
(void)id;
|
||||||
return hid_serv_responsible_for_desc_id_response;
|
return hid_serv_responsible_for_desc_id_response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_rend_cache_clean_v2_descs_as_dir(void *data)
|
test_rend_cache_clean_v2_descs_as_dir(void *data)
|
||||||
{
|
{
|
||||||
@ -1013,7 +1076,8 @@ test_rend_cache_clean_v2_descs_as_dir(void *data)
|
|||||||
rend_cache_clean_v2_descs_as_dir(now, 0);
|
rend_cache_clean_v2_descs_as_dir(now, 0);
|
||||||
tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 0);
|
tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 0);
|
||||||
|
|
||||||
// Test with one entry that is not under the responsibility of this hidden service
|
// Test with one entry that is not under the responsibility of this
|
||||||
|
// hidden service
|
||||||
e = tor_malloc_zero(sizeof(rend_cache_entry_t));
|
e = tor_malloc_zero(sizeof(rend_cache_entry_t));
|
||||||
e->last_served = now;
|
e->last_served = now;
|
||||||
desc = tor_malloc_zero(sizeof(rend_service_descriptor_t));
|
desc = tor_malloc_zero(sizeof(rend_service_descriptor_t));
|
||||||
@ -1052,8 +1116,6 @@ test_rend_cache_clean_v2_descs_as_dir(void *data)
|
|||||||
rend_cache_clean_v2_descs_as_dir(now, 20000);
|
rend_cache_clean_v2_descs_as_dir(now, 20000);
|
||||||
tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 1);
|
tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
done:
|
done:
|
||||||
NS_UNMOCK(hid_serv_responsible_for_desc_id);
|
NS_UNMOCK(hid_serv_responsible_for_desc_id);
|
||||||
rend_cache_purge();
|
rend_cache_purge();
|
||||||
@ -1061,7 +1123,6 @@ test_rend_cache_clean_v2_descs_as_dir(void *data)
|
|||||||
|
|
||||||
#undef NS_SUBMODULE
|
#undef NS_SUBMODULE
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_rend_cache_entry_allocation(void *data)
|
test_rend_cache_entry_allocation(void *data)
|
||||||
{
|
{
|
||||||
@ -1097,7 +1158,6 @@ test_rend_cache_failure_intro_entry_free(void *data)
|
|||||||
rend_cache_failure_intro_entry_free(entry);
|
rend_cache_failure_intro_entry_free(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_rend_cache_failure_purge(void *data)
|
test_rend_cache_failure_purge(void *data)
|
||||||
{
|
{
|
||||||
@ -1148,31 +1208,46 @@ test_rend_cache_validate_intro_point_failure(void *data)
|
|||||||
|
|
||||||
struct testcase_t rend_cache_tests[] = {
|
struct testcase_t rend_cache_tests[] = {
|
||||||
{ "init", test_rend_cache_init, 0, NULL, NULL },
|
{ "init", test_rend_cache_init, 0, NULL, NULL },
|
||||||
{ "decrement_allocation", test_rend_cache_decrement_allocation, 0, NULL, NULL },
|
{ "decrement_allocation", test_rend_cache_decrement_allocation, 0,
|
||||||
{ "increment_allocation", test_rend_cache_increment_allocation, 0, NULL, NULL },
|
NULL, NULL },
|
||||||
|
{ "increment_allocation", test_rend_cache_increment_allocation, 0,
|
||||||
|
NULL, NULL },
|
||||||
{ "clean", test_rend_cache_clean, TT_FORK, NULL, NULL },
|
{ "clean", test_rend_cache_clean, TT_FORK, NULL, NULL },
|
||||||
{ "clean_v2_descs_as_dir", test_rend_cache_clean_v2_descs_as_dir, 0, NULL, NULL },
|
{ "clean_v2_descs_as_dir", test_rend_cache_clean_v2_descs_as_dir, 0,
|
||||||
|
NULL, NULL },
|
||||||
{ "entry_allocation", test_rend_cache_entry_allocation, 0, NULL, NULL },
|
{ "entry_allocation", test_rend_cache_entry_allocation, 0, NULL, NULL },
|
||||||
{ "entry_free", test_rend_cache_entry_free, 0, NULL, NULL },
|
{ "entry_free", test_rend_cache_entry_free, 0, NULL, NULL },
|
||||||
{ "failure_intro_entry_free", test_rend_cache_failure_intro_entry_free, 0, NULL, NULL },
|
{ "failure_intro_entry_free", test_rend_cache_failure_intro_entry_free, 0,
|
||||||
|
NULL, NULL },
|
||||||
{ "free_all", test_rend_cache_free_all, 0, NULL, NULL },
|
{ "free_all", test_rend_cache_free_all, 0, NULL, NULL },
|
||||||
{ "purge", test_rend_cache_purge, 0, NULL, NULL },
|
{ "purge", test_rend_cache_purge, 0, NULL, NULL },
|
||||||
{ "failure_clean", test_rend_cache_failure_clean, 0, NULL, NULL },
|
{ "failure_clean", test_rend_cache_failure_clean, 0, NULL, NULL },
|
||||||
{ "failure_entry_new", test_rend_cache_failure_entry_new, 0, NULL, NULL },
|
{ "failure_entry_new", test_rend_cache_failure_entry_new, 0, NULL, NULL },
|
||||||
{ "failure_entry_free", test_rend_cache_failure_entry_free, 0, NULL, NULL },
|
{ "failure_entry_free", test_rend_cache_failure_entry_free, 0, NULL, NULL },
|
||||||
{ "failure_intro_add", test_rend_cache_failure_intro_add, 0, NULL, NULL },
|
{ "failure_intro_add", test_rend_cache_failure_intro_add, 0, NULL, NULL },
|
||||||
{ "failure_intro_entry_new", test_rend_cache_failure_intro_entry_new, 0, NULL, NULL },
|
{ "failure_intro_entry_new", test_rend_cache_failure_intro_entry_new, 0,
|
||||||
{ "failure_intro_lookup", test_rend_cache_failure_intro_lookup, 0, NULL, NULL },
|
NULL, NULL },
|
||||||
|
{ "failure_intro_lookup", test_rend_cache_failure_intro_lookup, 0,
|
||||||
|
NULL, NULL },
|
||||||
{ "failure_purge", test_rend_cache_failure_purge, 0, NULL, NULL },
|
{ "failure_purge", test_rend_cache_failure_purge, 0, NULL, NULL },
|
||||||
{ "failure_remove", test_rend_cache_failure_remove, 0, NULL, NULL },
|
{ "failure_remove", test_rend_cache_failure_remove, 0, NULL, NULL },
|
||||||
{ "intro_failure_note", test_rend_cache_intro_failure_note, 0, NULL, NULL },
|
{ "intro_failure_note", test_rend_cache_intro_failure_note, 0, NULL, NULL },
|
||||||
{ "lookup", test_rend_cache_lookup_entry, 0, NULL, NULL },
|
{ "lookup", test_rend_cache_lookup_entry, 0, NULL, NULL },
|
||||||
{ "lookup_v2_desc_as_dir", test_rend_cache_lookup_v2_desc_as_dir, 0, NULL, NULL },
|
{ "lookup_v2_desc_as_dir", test_rend_cache_lookup_v2_desc_as_dir, 0,
|
||||||
{ "store_v2_desc_as_client", test_rend_cache_store_v2_desc_as_client, 0, NULL, NULL },
|
NULL, NULL },
|
||||||
{ "store_v2_desc_as_client_with_different_time", test_rend_cache_store_v2_desc_as_client_with_different_time, 0, NULL, NULL },
|
{ "store_v2_desc_as_client", test_rend_cache_store_v2_desc_as_client, 0,
|
||||||
{ "store_v2_desc_as_dir", test_rend_cache_store_v2_desc_as_dir, 0, NULL, NULL },
|
NULL, NULL },
|
||||||
{ "store_v2_desc_as_dir_with_different_time", test_rend_cache_store_v2_desc_as_dir_with_different_time, 0, NULL, NULL },
|
{ "store_v2_desc_as_client_with_different_time",
|
||||||
{ "store_v2_desc_as_dir_with_different_content", test_rend_cache_store_v2_desc_as_dir_with_different_content, 0, NULL, NULL },
|
test_rend_cache_store_v2_desc_as_client_with_different_time, 0,
|
||||||
{ "validate_intro_point_failure", test_rend_cache_validate_intro_point_failure, 0, NULL, NULL },
|
NULL, NULL },
|
||||||
|
{ "store_v2_desc_as_dir", test_rend_cache_store_v2_desc_as_dir, 0,
|
||||||
|
NULL, NULL },
|
||||||
|
{ "store_v2_desc_as_dir_with_different_time",
|
||||||
|
test_rend_cache_store_v2_desc_as_dir_with_different_time, 0, NULL, NULL },
|
||||||
|
{ "store_v2_desc_as_dir_with_different_content",
|
||||||
|
test_rend_cache_store_v2_desc_as_dir_with_different_content, 0,
|
||||||
|
NULL, NULL },
|
||||||
|
{ "validate_intro_point_failure",
|
||||||
|
test_rend_cache_validate_intro_point_failure, 0, NULL, NULL },
|
||||||
END_OF_TESTCASES
|
END_OF_TESTCASES
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user