From 1a33457e655b1f8c32b8b0a356de28b1601ae291 Mon Sep 17 00:00:00 2001 From: George Kadianakis <desnacked@riseup.net> Date: Wed, 29 Jul 2020 12:39:05 +0300 Subject: [PATCH] WIP unittest --- src/feature/relay/relay_config.c | 2 +- src/feature/relay/relay_config.h | 1 + src/test/test_config.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/feature/relay/relay_config.c b/src/feature/relay/relay_config.c index fc934b7879..711fbd14e5 100644 --- a/src/feature/relay/relay_config.c +++ b/src/feature/relay/relay_config.c @@ -183,7 +183,7 @@ describe_relay_port(const port_cfg_t *port) * * The following is O(n^2) but it is done at bootstrap or config reload and * the list is not very long usually. */ -static void +STATIC void remove_duplicate_orports(smartlist_t *ports) { /* First we'll decide what to remove, then we'll remove it. */ diff --git a/src/feature/relay/relay_config.h b/src/feature/relay/relay_config.h index c70c322d88..671399ac0a 100644 --- a/src/feature/relay/relay_config.h +++ b/src/feature/relay/relay_config.h @@ -84,6 +84,7 @@ int options_act_relay_dir(const struct or_options_t *old_options); #ifdef RELAY_CONFIG_PRIVATE +STATIC void remove_duplicate_orports(struct smartlist_t *ports); STATIC int check_bridge_distribution_setting(const char *bd); STATIC int have_enough_mem_for_dircache(const struct or_options_t *options, size_t total_mem, char **msg); diff --git a/src/test/test_config.c b/src/test/test_config.c index 9eadfeed33..8ec91bc006 100644 --- a/src/test/test_config.c +++ b/src/test/test_config.c @@ -6497,6 +6497,35 @@ test_config_getinfo_config_names(void *arg) tor_free(answer); } +static void +test_config_duplicate_orports(void *arg) +{ + (void)arg; + + config_line_t *config_port = NULL; + smartlist_t *ports = smartlist_new(); + + config_port = mock_config_line("ORPort", "127.0.0.1:9050"); + port_parse_config(ports, config_port, "OR", CONN_TYPE_OR_LISTENER, "0.0.0.0", + 0, CL_PORT_SERVER_OPTIONS); + config_free_lines(config_port); + + config_port = mock_config_line("ORPort", "[::1]:9050"); + port_parse_config(ports, config_port, "OR", CONN_TYPE_OR_LISTENER, "[::]", + 0, CL_PORT_SERVER_OPTIONS); + config_free_lines(config_port); + + tt_int_op(smartlist_len(ports), OP_EQ, 2); + + remove_duplicate_orports(ports); + + tt_int_op(smartlist_len(ports), OP_EQ, 1); + + done: + SMARTLIST_FOREACH(ports,port_cfg_t *,pf,port_cfg_free(pf)); + smartlist_free(ports); +} + #ifndef COCCI #define CONFIG_TEST(name, flags) \ { #name, test_config_ ## name, flags, NULL, NULL } @@ -6562,5 +6591,6 @@ struct testcase_t config_tests[] = { CONFIG_TEST(extended_fmt, 0), CONFIG_TEST(kvline_parse, 0), CONFIG_TEST(getinfo_config_names, 0), + CONFIG_TEST(duplicate_orports, 0), END_OF_TESTCASES }; -- GitLab