Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Mike Perry
Tor
Commits
b547c542
Commit
b547c542
authored
May 05, 2017
by
David Goulet
Committed by
Nick Mathewson
Aug 08, 2017
Browse files
test: Add unit test coverage of hs_service.c
Signed-off-by:
David Goulet
<
dgoulet@torproject.org
>
parent
559ffd71
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
src/or/hs_common.c
View file @
b547c542
...
...
@@ -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
;
...
...
src/or/hs_common.h
View file @
b547c542
...
...
@@ -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
);
...
...
src/or/hs_service.c
View file @
b547c542
...
...
@@ -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
...
...
src/or/hs_service.h
View file @
b547c542
...
...
@@ -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 */
...
...
src/test/test_hs_service.c
View file @
b547c542
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment