aboutsummaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2017-05-05 14:55:26 -0400
committerNick Mathewson <nickm@torproject.org>2017-08-08 20:29:34 -0400
commitb547c5423930a430f70505a12d587735a7c83e1c (patch)
tree009b3e8fd6a2cb40d9950bfd83ceef7afce4ada9 /src/or
parent559ffd71798765970205d0559c9f5a06dc55cf37 (diff)
downloadtor-b547c5423930a430f70505a12d587735a7c83e1c.tar.gz
tor-b547c5423930a430f70505a12d587735a7c83e1c.zip
test: Add unit test coverage of hs_service.c
Signed-off-by: David Goulet <dgoulet@torproject.org>
Diffstat (limited to 'src/or')
-rw-r--r--src/or/hs_common.c4
-rw-r--r--src/or/hs_common.h3
-rw-r--r--src/or/hs_service.c28
-rw-r--r--src/or/hs_service.h33
4 files changed, 51 insertions, 17 deletions
diff --git a/src/or/hs_common.c b/src/or/hs_common.c
index 20b53bb91c..01bd204e11 100644
--- a/src/or/hs_common.c
+++ b/src/or/hs_common.c
@@ -873,8 +873,8 @@ hs_build_blinded_keypair(const ed25519_keypair_t *kp,
/* Return true if overlap mode is active given the date in consensus. If
* consensus is NULL, then we use the latest live consensus we can find. */
-int
-hs_overlap_mode_is_active(const networkstatus_t *consensus, time_t now)
+MOCK_IMPL(int,
+hs_overlap_mode_is_active, (const networkstatus_t *consensus, time_t now))
{
struct tm valid_after_tm;
diff --git a/src/or/hs_common.h b/src/or/hs_common.h
index 3670ff3790..cbf1ac113d 100644
--- a/src/or/hs_common.h
+++ b/src/or/hs_common.h
@@ -198,7 +198,8 @@ uint64_t hs_get_next_time_period_num(time_t now);
link_specifier_t *hs_link_specifier_dup(const link_specifier_t *lspec);
-int hs_overlap_mode_is_active(const networkstatus_t *consensus, time_t now);
+MOCK_DECL(int, hs_overlap_mode_is_active,
+ (const networkstatus_t *consensus, time_t now));
uint8_t *hs_get_current_srv(uint64_t time_period_num);
uint8_t *hs_get_previous_srv(uint64_t time_period_num);
diff --git a/src/or/hs_service.c b/src/or/hs_service.c
index 4c7c642e11..2a35379664 100644
--- a/src/or/hs_service.c
+++ b/src/or/hs_service.c
@@ -395,7 +395,7 @@ service_intro_point_new(const extend_info_t *ei, unsigned int is_legacy)
/* Add the given intro point object to the given intro point map. The intro
* point MUST have its RSA encryption key set if this is a legacy type or the
* authentication key set otherwise. */
-static void
+STATIC void
service_intro_point_add(digest256map_t *map, hs_service_intro_point_t *ip)
{
tor_assert(map);
@@ -406,7 +406,7 @@ service_intro_point_add(digest256map_t *map, hs_service_intro_point_t *ip)
/* For a given service, remove the intro point from that service which will
* look in both descriptors. */
-static void
+STATIC void
service_intro_point_remove(const hs_service_t *service,
const hs_service_intro_point_t *ip)
{
@@ -424,7 +424,7 @@ service_intro_point_remove(const hs_service_t *service,
/* For a given service and authentication key, return the intro point or NULL
* if not found. This will check both descriptors in the service. */
-static hs_service_intro_point_t *
+STATIC hs_service_intro_point_t *
service_intro_point_find(const hs_service_t *service,
const ed25519_public_key_t *auth_key)
{
@@ -446,7 +446,7 @@ service_intro_point_find(const hs_service_t *service,
/* For a given service and intro point, return the descriptor for which the
* intro point is assigned to. NULL is returned if not found. */
-static hs_service_descriptor_t *
+STATIC hs_service_descriptor_t *
service_desc_find_by_intro(const hs_service_t *service,
const hs_service_intro_point_t *ip)
{
@@ -472,7 +472,7 @@ service_desc_find_by_intro(const hs_service_t *service,
*
* This is an helper function because we do those lookups often so it's more
* convenient to simply call this functions to get all the things at once. */
-static void
+STATIC void
get_objects_from_ident(const hs_ident_circuit_t *ident,
hs_service_t **service, hs_service_intro_point_t **ip,
hs_service_descriptor_t **desc)
@@ -525,7 +525,7 @@ get_link_spec_by_type(const hs_service_intro_point_t *ip, uint8_t type)
/* Given a service intro point, return the node_t associated to it. This can
* return NULL if the given intro point has no legacy ID or if the node can't
* be found in the consensus. */
-static const node_t *
+STATIC const node_t *
get_node_from_intro_point(const hs_service_intro_point_t *ip)
{
const hs_desc_link_specifier_t *ls;
@@ -952,7 +952,7 @@ service_descriptor_free(hs_service_descriptor_t *desc)
}
/* Return a newly allocated service descriptor object. */
-static hs_service_descriptor_t *
+STATIC hs_service_descriptor_t *
service_descriptor_new(void)
{
hs_service_descriptor_t *sdesc = tor_malloc_zero(sizeof(*sdesc));
@@ -1315,7 +1315,7 @@ build_service_descriptor(hs_service_t *service, time_t now,
/* Build descriptors for each service if needed. There are conditions to build
* a descriptor which are details in the function. */
-static void
+STATIC void
build_all_descriptors(time_t now)
{
FOR_EACH_SERVICE_BEGIN(service) {
@@ -1518,7 +1518,7 @@ update_service_descriptor(hs_service_t *service,
}
/* Update descriptors for each service if needed. */
-static void
+STATIC void
update_all_descriptors(time_t now)
{
FOR_EACH_SERVICE_BEGIN(service) {
@@ -1532,7 +1532,7 @@ update_all_descriptors(time_t now)
/* Return true iff the given intro point has expired that is it has been used
* for too long or we've reached our max seen INTRODUCE2 cell. */
-static int
+STATIC int
intro_point_should_expire(const hs_service_intro_point_t *ip,
time_t now)
{
@@ -1642,7 +1642,7 @@ rotate_service_descriptors(hs_service_t *service)
* the overlap period, rotate them that is point the previous descriptor to
* the current and cleanup the previous one. A non existing current
* descriptor will trigger a descriptor build for the next time period. */
-static void
+STATIC void
rotate_all_descriptors(time_t now)
{
FOR_EACH_SERVICE_BEGIN(service) {
@@ -1673,7 +1673,7 @@ rotate_all_descriptors(time_t now)
/* Scheduled event run from the main loop. Make sure all our services are up
* to date and ready for the other scheduled events. This includes looking at
* the introduction points status and descriptor rotation time. */
-static void
+STATIC void
run_housekeeping_event(time_t now)
{
/* Note that nothing here opens circuit(s) nor uploads descriptor(s). We are
@@ -1809,7 +1809,7 @@ get_max_intro_circ_per_period(const hs_service_t *service)
/* For the given service, return 1 if the service is allowed to launch more
* introduction circuits else 0 if the maximum has been reached for the retry
* period of INTRO_CIRC_RETRY_PERIOD. */
-static int
+STATIC int
can_service_launch_intro_circuit(hs_service_t *service, time_t now)
{
tor_assert(service);
@@ -2069,7 +2069,7 @@ should_service_upload_descriptor(const hs_service_t *service,
/* Scheduled event run from the main loop. Try to upload the descriptor for
* each service. */
-static void
+STATIC void
run_upload_descriptor_event(time_t now)
{
/* v2 services use the same function for descriptor creation and upload so
diff --git a/src/or/hs_service.h b/src/or/hs_service.h
index fda2ebfc33..dc80622e33 100644
--- a/src/or/hs_service.h
+++ b/src/or/hs_service.h
@@ -15,6 +15,7 @@
#include "hs_common.h"
#include "hs_descriptor.h"
+#include "hs_ident.h"
#include "hs_intropoint.h"
/* Trunnel */
@@ -284,10 +285,42 @@ STATIC hs_service_t *find_service(hs_service_ht *map,
const ed25519_public_key_t *pk);
STATIC void remove_service(hs_service_ht *map, hs_service_t *service);
STATIC int register_service(hs_service_ht *map, hs_service_t *service);
+/* Service introduction point functions. */
STATIC hs_service_intro_point_t *service_intro_point_new(
const extend_info_t *ei,
unsigned int is_legacy);
STATIC void service_intro_point_free(hs_service_intro_point_t *ip);
+STATIC void service_intro_point_add(digest256map_t *map,
+ hs_service_intro_point_t *ip);
+STATIC void service_intro_point_remove(const hs_service_t *service,
+ const hs_service_intro_point_t *ip);
+STATIC hs_service_intro_point_t *service_intro_point_find(
+ const hs_service_t *service,
+ const ed25519_public_key_t *auth_key);
+STATIC hs_service_intro_point_t *service_intro_point_find_by_ident(
+ const hs_service_t *service,
+ const hs_ident_circuit_t *ident);
+/* Service descriptor functions. */
+STATIC hs_service_descriptor_t *service_descriptor_new(void);
+STATIC hs_service_descriptor_t *service_desc_find_by_intro(
+ const hs_service_t *service,
+ const hs_service_intro_point_t *ip);
+/* Helper functions. */
+STATIC void get_objects_from_ident(const hs_ident_circuit_t *ident,
+ hs_service_t **service,
+ hs_service_intro_point_t **ip,
+ hs_service_descriptor_t **desc);
+STATIC const node_t *get_node_from_intro_point(
+ const hs_service_intro_point_t *ip);
+STATIC int can_service_launch_intro_circuit(hs_service_t *service,
+ time_t now);
+STATIC int intro_point_should_expire(const hs_service_intro_point_t *ip,
+ time_t now);
+STATIC void run_housekeeping_event(time_t now);
+STATIC void rotate_all_descriptors(time_t now);
+STATIC void build_all_descriptors(time_t now);
+STATIC void update_all_descriptors(time_t now);
+STATIC void run_upload_descriptor_event(time_t now);
#endif /* TOR_UNIT_TESTS */