mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 20:33:31 +01:00
test/circuitbuild: Tests for node selection flags
Part of 33222.
This commit is contained in:
parent
5f577b0f25
commit
c39394afa2
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include "feature/client/entrynodes.h"
|
#include "feature/client/entrynodes.h"
|
||||||
#include "feature/nodelist/nodelist.h"
|
#include "feature/nodelist/nodelist.h"
|
||||||
|
#include "feature/nodelist/node_select.h"
|
||||||
#include "feature/relay/circuitbuild_relay.h"
|
#include "feature/relay/circuitbuild_relay.h"
|
||||||
#include "feature/relay/router.h"
|
#include "feature/relay/router.h"
|
||||||
#include "feature/relay/routermode.h"
|
#include "feature/relay/routermode.h"
|
||||||
@ -1766,6 +1767,112 @@ test_circuit_send_next_onion_skin(void *arg)
|
|||||||
/* The circuits are automatically freed by the circuitlist. */
|
/* The circuits are automatically freed by the circuitlist. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Test the different cases in cpath_build_state_to_crn_flags(). */
|
||||||
|
static void
|
||||||
|
test_cpath_build_state_to_crn_flags(void *arg)
|
||||||
|
{
|
||||||
|
(void)arg;
|
||||||
|
|
||||||
|
cpath_build_state_t state;
|
||||||
|
memset(&state, 0, sizeof(state));
|
||||||
|
|
||||||
|
tt_int_op(cpath_build_state_to_crn_flags(&state), OP_EQ,
|
||||||
|
0);
|
||||||
|
|
||||||
|
memset(&state, 0, sizeof(state));
|
||||||
|
state.need_uptime = 1;
|
||||||
|
tt_int_op(cpath_build_state_to_crn_flags(&state), OP_EQ,
|
||||||
|
CRN_NEED_UPTIME);
|
||||||
|
|
||||||
|
memset(&state, 0, sizeof(state));
|
||||||
|
state.need_capacity = 1;
|
||||||
|
tt_int_op(cpath_build_state_to_crn_flags(&state), OP_EQ,
|
||||||
|
CRN_NEED_CAPACITY);
|
||||||
|
|
||||||
|
memset(&state, 0, sizeof(state));
|
||||||
|
state.need_capacity = 1;
|
||||||
|
state.need_uptime = 1;
|
||||||
|
tt_int_op(cpath_build_state_to_crn_flags(&state), OP_EQ,
|
||||||
|
CRN_NEED_CAPACITY | CRN_NEED_UPTIME);
|
||||||
|
|
||||||
|
/* Check that no other flags are handled */
|
||||||
|
memset(&state, 0xff, sizeof(state));
|
||||||
|
tt_int_op(cpath_build_state_to_crn_flags(&state), OP_EQ,
|
||||||
|
CRN_NEED_CAPACITY | CRN_NEED_UPTIME);
|
||||||
|
|
||||||
|
done:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test the different cases in cpath_build_state_to_crn_ipv6_extend_flag(). */
|
||||||
|
static void
|
||||||
|
test_cpath_build_state_to_crn_ipv6_extend_flag(void *arg)
|
||||||
|
{
|
||||||
|
(void)arg;
|
||||||
|
|
||||||
|
cpath_build_state_t state;
|
||||||
|
|
||||||
|
memset(&state, 0, sizeof(state));
|
||||||
|
state.desired_path_len = DEFAULT_ROUTE_LEN;
|
||||||
|
tt_int_op(cpath_build_state_to_crn_ipv6_extend_flag(&state, 0), OP_EQ,
|
||||||
|
0);
|
||||||
|
|
||||||
|
/* Pass the state flag check, but not the length check */
|
||||||
|
memset(&state, 0, sizeof(state));
|
||||||
|
state.desired_path_len = DEFAULT_ROUTE_LEN;
|
||||||
|
state.is_ipv6_selftest = 1;
|
||||||
|
tt_int_op(cpath_build_state_to_crn_ipv6_extend_flag(&state, 0), OP_EQ,
|
||||||
|
0);
|
||||||
|
|
||||||
|
/* Pass the length check, but not the state flag check */
|
||||||
|
memset(&state, 0, sizeof(state));
|
||||||
|
state.desired_path_len = DEFAULT_ROUTE_LEN;
|
||||||
|
tt_int_op(
|
||||||
|
cpath_build_state_to_crn_ipv6_extend_flag(&state,
|
||||||
|
DEFAULT_ROUTE_LEN - 2),
|
||||||
|
OP_EQ, 0);
|
||||||
|
|
||||||
|
/* Pass both checks */
|
||||||
|
memset(&state, 0, sizeof(state));
|
||||||
|
state.desired_path_len = DEFAULT_ROUTE_LEN;
|
||||||
|
state.is_ipv6_selftest = 1;
|
||||||
|
tt_int_op(
|
||||||
|
cpath_build_state_to_crn_ipv6_extend_flag(&state,
|
||||||
|
DEFAULT_ROUTE_LEN - 2),
|
||||||
|
OP_EQ, CRN_INITIATE_IPV6_EXTEND);
|
||||||
|
|
||||||
|
/* Check that no other flags are handled */
|
||||||
|
memset(&state, 0xff, sizeof(state));
|
||||||
|
state.desired_path_len = INT_MAX;
|
||||||
|
tt_int_op(cpath_build_state_to_crn_ipv6_extend_flag(&state, INT_MAX), OP_EQ,
|
||||||
|
0);
|
||||||
|
|
||||||
|
#ifndef ALL_BUGS_ARE_FATAL
|
||||||
|
/* Start capturing bugs */
|
||||||
|
setup_full_capture_of_logs(LOG_INFO);
|
||||||
|
tor_capture_bugs_(1);
|
||||||
|
|
||||||
|
/* Now test the single hop circuit case */
|
||||||
|
#define SINGLE_HOP_ROUTE_LEN 1
|
||||||
|
memset(&state, 0, sizeof(state));
|
||||||
|
state.desired_path_len = SINGLE_HOP_ROUTE_LEN;
|
||||||
|
state.is_ipv6_selftest = 1;
|
||||||
|
tt_int_op(
|
||||||
|
cpath_build_state_to_crn_ipv6_extend_flag(&state,
|
||||||
|
SINGLE_HOP_ROUTE_LEN - 2),
|
||||||
|
OP_EQ, 0);
|
||||||
|
tt_int_op(smartlist_len(tor_get_captured_bug_log_()), OP_EQ, 1);
|
||||||
|
tt_str_op(smartlist_get(tor_get_captured_bug_log_(), 0), OP_EQ,
|
||||||
|
"!(ASSERT_PREDICT_UNLIKELY_(state->desired_path_len < 2))");
|
||||||
|
mock_clean_saved_logs();
|
||||||
|
#endif /* !defined(ALL_BUGS_ARE_FATAL) */
|
||||||
|
|
||||||
|
done:
|
||||||
|
tor_end_capture_bugs_();
|
||||||
|
mock_clean_saved_logs();
|
||||||
|
teardown_capture_of_logs();
|
||||||
|
}
|
||||||
|
|
||||||
#define TEST(name, flags, setup, cleanup) \
|
#define TEST(name, flags, setup, cleanup) \
|
||||||
{ #name, test_ ## name, flags, setup, cleanup }
|
{ #name, test_ ## name, flags, setup, cleanup }
|
||||||
|
|
||||||
@ -1775,6 +1882,9 @@ test_circuit_send_next_onion_skin(void *arg)
|
|||||||
#define TEST_CIRCUIT(name, flags) \
|
#define TEST_CIRCUIT(name, flags) \
|
||||||
{ #name, test_circuit_ ## name, flags, NULL, NULL }
|
{ #name, test_circuit_ ## name, flags, NULL, NULL }
|
||||||
|
|
||||||
|
#define TEST_CPATH(name, flags) \
|
||||||
|
{ #name, test_cpath_ ## name, flags, NULL, NULL }
|
||||||
|
|
||||||
#ifndef COCCI
|
#ifndef COCCI
|
||||||
#define TEST_CIRCUIT_PASSTHROUGH(name, flags, arg) \
|
#define TEST_CIRCUIT_PASSTHROUGH(name, flags, arg) \
|
||||||
{ #name "/" arg, test_circuit_ ## name, flags, \
|
{ #name "/" arg, test_circuit_ ## name, flags, \
|
||||||
@ -1793,16 +1903,19 @@ struct testcase_t circuitbuild_tests[] = {
|
|||||||
TEST_CIRCUIT(extend_add_ed25519, TT_FORK),
|
TEST_CIRCUIT(extend_add_ed25519, TT_FORK),
|
||||||
TEST_CIRCUIT(extend_lspec_valid, TT_FORK),
|
TEST_CIRCUIT(extend_lspec_valid, TT_FORK),
|
||||||
TEST_CIRCUIT(choose_ip_ap_for_extend, 0),
|
TEST_CIRCUIT(choose_ip_ap_for_extend, 0),
|
||||||
|
|
||||||
TEST_CIRCUIT_PASSTHROUGH(open_connection_for_extend, TT_FORK, "4"),
|
TEST_CIRCUIT_PASSTHROUGH(open_connection_for_extend, TT_FORK, "4"),
|
||||||
TEST_CIRCUIT_PASSTHROUGH(open_connection_for_extend, TT_FORK, "6"),
|
TEST_CIRCUIT_PASSTHROUGH(open_connection_for_extend, TT_FORK, "6"),
|
||||||
TEST_CIRCUIT_PASSTHROUGH(open_connection_for_extend, TT_FORK, "dual-stack"),
|
TEST_CIRCUIT_PASSTHROUGH(open_connection_for_extend, TT_FORK, "dual-stack"),
|
||||||
|
|
||||||
TEST_CIRCUIT(extend, TT_FORK),
|
TEST_CIRCUIT(extend, TT_FORK),
|
||||||
|
|
||||||
TEST(onionskin_answer, TT_FORK, NULL, NULL),
|
TEST(onionskin_answer, TT_FORK, NULL, NULL),
|
||||||
|
|
||||||
TEST(origin_circuit_init, TT_FORK, NULL, NULL),
|
TEST(origin_circuit_init, TT_FORK, NULL, NULL),
|
||||||
|
|
||||||
TEST_CIRCUIT(send_next_onion_skin, TT_FORK),
|
TEST_CIRCUIT(send_next_onion_skin, TT_FORK),
|
||||||
|
TEST_CPATH(build_state_to_crn_flags, 0),
|
||||||
|
TEST_CPATH(build_state_to_crn_ipv6_extend_flag, TT_FORK),
|
||||||
|
|
||||||
END_OF_TESTCASES
|
END_OF_TESTCASES
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user