From c84ce716dce09eb26f26e3303efa2c0a04a870b7 Mon Sep 17 00:00:00 2001 From: MrSquanchee Date: Tue, 21 Apr 2020 18:23:42 +0530 Subject: [PATCH 1/2] Added tests Added tests for channel_matches_target_addr_for_extend(). Ticket #33919. --- changes/ticket33919 | 3 +++ src/test/test_channel.c | 56 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 changes/ticket33919 diff --git a/changes/ticket33919 b/changes/ticket33919 new file mode 100644 index 0000000000..a9991b7419 --- /dev/null +++ b/changes/ticket33919 @@ -0,0 +1,3 @@ + o Minor features (testing): + - Added unit tests for channel_matches_target_addr_for_extend(). + Closes Ticket 33919. Patch by MrSquanchee. diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 849cc497fc..53ca8d9bba 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -16,6 +16,10 @@ /* For packed_cell stuff */ #define RELAY_PRIVATE #include "core/or/relay.h" +/* For channel_tls_t object and private functions. */ +#define CHANNEL_OBJECT_PRIVATE +#define CHANNELTLS_PRIVATE +#include "core/or/channeltls.h" /* For init/free stuff */ #include "core/or/scheduler.h" #include "feature/nodelist/networkstatus.h" @@ -25,6 +29,8 @@ #include "core/or/origin_circuit_st.h" #include "feature/nodelist/routerstatus_st.h" #include "core/or/var_cell_st.h" +#include "core/or/or_connection_st.h" +#include "lib/net/inaddr.h" /* Test suite stuff */ #include "test/log_test_helpers.h" @@ -1537,6 +1543,54 @@ test_channel_listener(void *arg) channel_free_all(); } +#define TEST_SETUP_MATCHES_ADDR(orcon, addr, src, rv) STMT_BEGIN \ + rv = tor_inet_pton(addr.family, src, &addr.addr); \ + tt_int_op(rv, OP_EQ, 1); \ + orcon->real_addr = addr; \ + STMT_END; + +#define TEST_MATCHES_ADDR(chan, addr, rv, exp) STMT_BEGIN \ + rv = channel_matches_target_addr_for_extend(chan, &addr); \ + tt_int_op(rv, OP_EQ, exp); \ + STMT_END; + +static void +test_channel_matches_target_addr_for_extend(void *arg) +{ + (void) arg; + + channel_tls_t *tlschan = tor_malloc_zero(sizeof(*tlschan)); + or_connection_t *orcon = tor_malloc_zero(sizeof(*orcon)); + channel_t *chan = &(tlschan->base_); + tor_addr_t addr; + int rv; + + tlschan->conn = orcon; + channel_tls_common_init(tlschan); + + /* Test for IPv4 addresses. */ + addr.family = AF_INET; + TEST_SETUP_MATCHES_ADDR(orcon, addr, "1.2.3.4", rv); + TEST_MATCHES_ADDR(chan, addr, rv, 1); + + tor_inet_pton(addr.family, "2.5.3.4", &addr.addr); + TEST_MATCHES_ADDR(chan, addr, rv, 0); + + /* Test for IPv6 addresses. */ + addr.family = AF_INET6; + TEST_SETUP_MATCHES_ADDR(orcon, addr, "3:4:7:1:9:8:09:10", rv); + TEST_MATCHES_ADDR(chan, addr, rv, 1); + + tor_inet_pton(addr.family, "::", &addr.addr); + TEST_MATCHES_ADDR(chan, addr, rv, 0); + + done: + circuitmux_clear_policy(chan->cmux); + circuitmux_free(chan->cmux); + tor_free(orcon); + tor_free(tlschan); +} + struct testcase_t channel_tests[] = { { "inbound_cell", test_channel_inbound_cell, TT_FORK, NULL, NULL }, @@ -1558,5 +1612,7 @@ struct testcase_t channel_tests[] = { NULL, NULL }, { "listener", test_channel_listener, TT_FORK, NULL, NULL }, + { "matches_target", test_channel_matches_target_addr_for_extend, TT_FORK, + NULL, NULL }, END_OF_TESTCASES }; From 59133051f9040717f2f87aa5c2b051eadce2ebdf Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 13 Jul 2020 10:10:25 -0400 Subject: [PATCH 2/2] Update channel_matches_target_addr_for_extend test to current API --- src/core/or/channel.c | 9 +-------- src/core/or/channel.h | 5 ++++- src/test/test_channel.c | 12 ++++++------ 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/core/or/channel.c b/src/core/or/channel.c index e21f5a12ce..20ccf41306 100644 --- a/src/core/or/channel.c +++ b/src/core/or/channel.c @@ -83,13 +83,6 @@ #include "core/or/cell_queue_st.h" -/* Static function prototypes */ - -static bool channel_matches_target_addr_for_extend( - channel_t *chan, - const tor_addr_t *target_ipv4_addr, - const tor_addr_t *target_ipv6_addr); - /* Global lists of channels */ /* All channel_t instances */ @@ -3317,7 +3310,7 @@ channel_matches_extend_info(channel_t *chan, extend_info_t *extend_info) * This function calls into the lower layer and asks if this channel thinks * it matches the target addresses for circuit extension purposes. */ -static bool +STATIC bool channel_matches_target_addr_for_extend(channel_t *chan, const tor_addr_t *target_ipv4_addr, const tor_addr_t *target_ipv6_addr) diff --git a/src/core/or/channel.h b/src/core/or/channel.h index 79e5fea9c5..5fe1fb9cc4 100644 --- a/src/core/or/channel.h +++ b/src/core/or/channel.h @@ -562,7 +562,10 @@ void channel_listener_dumpstats(int severity); #ifdef CHANNEL_FILE_PRIVATE STATIC void channel_add_to_digest_map(channel_t *chan); - +STATIC bool channel_matches_target_addr_for_extend( + channel_t *chan, + const tor_addr_t *target_ipv4_addr, + const tor_addr_t *target_ipv6_addr); #endif /* defined(CHANNEL_FILE_PRIVATE) */ /* Channel operations for subclasses and internal use only */ diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 53ca8d9bba..2b723b4a8d 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -1549,8 +1549,8 @@ test_channel_listener(void *arg) orcon->real_addr = addr; \ STMT_END; -#define TEST_MATCHES_ADDR(chan, addr, rv, exp) STMT_BEGIN \ - rv = channel_matches_target_addr_for_extend(chan, &addr); \ +#define TEST_MATCHES_ADDR(chan, addr4, addr6, rv, exp) STMT_BEGIN \ + rv = channel_matches_target_addr_for_extend(chan, addr4, addr6); \ tt_int_op(rv, OP_EQ, exp); \ STMT_END; @@ -1571,18 +1571,18 @@ test_channel_matches_target_addr_for_extend(void *arg) /* Test for IPv4 addresses. */ addr.family = AF_INET; TEST_SETUP_MATCHES_ADDR(orcon, addr, "1.2.3.4", rv); - TEST_MATCHES_ADDR(chan, addr, rv, 1); + TEST_MATCHES_ADDR(chan, &addr, NULL, rv, 1); tor_inet_pton(addr.family, "2.5.3.4", &addr.addr); - TEST_MATCHES_ADDR(chan, addr, rv, 0); + TEST_MATCHES_ADDR(chan, &addr, NULL, rv, 0); /* Test for IPv6 addresses. */ addr.family = AF_INET6; TEST_SETUP_MATCHES_ADDR(orcon, addr, "3:4:7:1:9:8:09:10", rv); - TEST_MATCHES_ADDR(chan, addr, rv, 1); + TEST_MATCHES_ADDR(chan, NULL, &addr, rv, 1); tor_inet_pton(addr.family, "::", &addr.addr); - TEST_MATCHES_ADDR(chan, addr, rv, 0); + TEST_MATCHES_ADDR(chan, NULL, &addr, rv, 0); done: circuitmux_clear_policy(chan->cmux);