[tor-commits] [tor/master] Unit tests for ext_or_id_map.
nickm at torproject.org
nickm at torproject.org
Thu Aug 15 16:16:46 UTC 2013
commit c342ea98791ccbeb67b1255816ca2e92167cefb0
Author: Nick Mathewson <nickm at torproject.org>
Date: Thu Jul 18 15:51:29 2013 -0400
Unit tests for ext_or_id_map.
---
src/or/connection.c | 3 ++-
src/or/connection.h | 4 +++
src/or/connection_or.c | 10 +++++++
src/or/ext_orport.h | 1 +
src/test/include.am | 1 +
src/test/test.c | 2 ++
src/test/test_extorport.c | 65 +++++++++++++++++++++++++++++++++++++++++++++
src/test/test_options.c | 3 ++-
8 files changed, 87 insertions(+), 2 deletions(-)
diff --git a/src/or/connection.c b/src/or/connection.c
index 57a9c58..f1d7961 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -10,6 +10,7 @@
* on connections.
**/
+#define CONNECTION_PRIVATE
#include "or.h"
#include "buffers.h"
/*
@@ -458,7 +459,7 @@ connection_link_connections(connection_t *conn_a, connection_t *conn_b)
* necessary, close its socket if necessary, and mark the directory as dirty
* if <b>conn</b> is an OR or OP connection.
*/
-static void
+STATIC void
connection_free_(connection_t *conn)
{
void *mem;
diff --git a/src/or/connection.h b/src/or/connection.h
index 5ca8ca3..19f11c7 100644
--- a/src/or/connection.h
+++ b/src/or/connection.h
@@ -214,5 +214,9 @@ void connection_enable_rate_limiting(connection_t *conn);
#define connection_type_uses_bufferevent(c) (0)
#endif
+#ifdef CONNECTION_PRIVATE
+STATIC void connection_free_(connection_t *conn);
+#endif
+
#endif
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index 3711cfe..a55ca3a 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -197,6 +197,16 @@ connection_or_remove_from_ext_or_id_map(or_connection_t *conn)
memset(conn->ext_or_conn_id, 0, EXT_OR_CONN_ID_LEN);
}
+/** Return the connection whose ext_or_id is <b>id</b>. Return NULL if no such
+ * connection is found. */
+or_connection_t *
+connection_or_get_by_ext_or_id(const char *id)
+{
+ if (!orconn_ext_or_id_map)
+ return NULL;
+ return digestmap_get(orconn_ext_or_id_map, id);
+}
+
/** Deallocate the global Extended ORPort identifier list */
void
connection_or_clear_ext_or_id_map(void)
diff --git a/src/or/ext_orport.h b/src/or/ext_orport.h
index 89c3032..92ace77 100644
--- a/src/or/ext_orport.h
+++ b/src/or/ext_orport.h
@@ -14,6 +14,7 @@ void ext_or_cmd_free(ext_or_cmd_t *cmd);
void connection_or_set_ext_or_identifier(or_connection_t *conn);
void connection_or_remove_from_ext_or_id_map(or_connection_t *conn);
void connection_or_clear_ext_or_id_map(void);
+or_connection_t *connection_or_get_by_ext_or_id(const char *id);
int connection_ext_or_finished_flushing(or_connection_t *conn);
int connection_ext_or_process_inbuf(or_connection_t *or_conn);
diff --git a/src/test/include.am b/src/test/include.am
index 8718ce7..74311ac 100644
--- a/src/test/include.am
+++ b/src/test/include.am
@@ -26,6 +26,7 @@ src_test_test_SOURCES = \
src/test/test_cell_queue.c \
src/test/test_data.c \
src/test/test_dir.c \
+ src/test/test_extorport.c \
src/test/test_introduce.c \
src/test/test_microdesc.c \
src/test/test_options.c \
diff --git a/src/test/test.c b/src/test/test.c
index a436688..851ddf0 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -1569,6 +1569,7 @@ extern struct testcase_t circuitlist_tests[];
extern struct testcase_t cell_queue_tests[];
extern struct testcase_t options_tests[];
extern struct testcase_t socks_tests[];
+extern struct testcase_t extorport_tests[];
static struct testgroup_t testgroups[] = {
{ "", test_array },
@@ -1588,6 +1589,7 @@ static struct testgroup_t testgroups[] = {
{ "introduce/", introduce_tests },
{ "circuitlist/", circuitlist_tests },
{ "options/", options_tests },
+ { "extorport/", extorport_tests },
END_OF_GROUPS
};
diff --git a/src/test/test_extorport.c b/src/test/test_extorport.c
new file mode 100644
index 0000000..cfe810e
--- /dev/null
+++ b/src/test/test_extorport.c
@@ -0,0 +1,65 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define CONNECTION_PRIVATE
+#include "or.h"
+#include "connection.h"
+#include "ext_orport.h"
+#include "test.h"
+
+/* Test connection_or_remove_from_ext_or_id_map and
+ * connection_or_set_ext_or_identifier */
+static void
+test_ext_or_id_map(void *arg)
+{
+ or_connection_t *c1 = NULL, *c2 = NULL, *c3 = NULL;
+ char *idp = NULL, *idp2 = NULL;
+ (void)arg;
+
+ /* pre-initialization */
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx"));
+
+ c1 = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ c2 = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ c3 = or_connection_new(CONN_TYPE_OR, AF_INET);
+
+ tt_ptr_op(c1->ext_or_conn_id, !=, NULL);
+ tt_ptr_op(c2->ext_or_conn_id, !=, NULL);
+ tt_ptr_op(c3->ext_or_conn_id, ==, NULL);
+
+ tt_ptr_op(c1, ==, connection_or_get_by_ext_or_id(c1->ext_or_conn_id));
+ tt_ptr_op(c2, ==, connection_or_get_by_ext_or_id(c2->ext_or_conn_id));
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx"));
+
+ idp = tor_memdup(c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN);
+
+ /* Give c2 a new ID. */
+ connection_or_set_ext_or_identifier(c2);
+ test_mem_op(idp, !=, c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN);
+ idp2 = tor_memdup(c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN);
+ tt_assert(!tor_digest_is_zero(idp2));
+
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id(idp));
+ tt_ptr_op(c2, ==, connection_or_get_by_ext_or_id(idp2));
+
+ /* Now remove it. */
+ connection_or_remove_from_ext_or_id_map(c2);
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id(idp));
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id(idp2));
+
+ done:
+ if (c1)
+ connection_free_(TO_CONN(c1));
+ if (c2)
+ connection_free_(TO_CONN(c2));
+ if (c3)
+ connection_free_(TO_CONN(c3));
+ tor_free(idp);
+ tor_free(idp2);
+ connection_or_clear_ext_or_id_map();
+}
+
+struct testcase_t extorport_tests[] = {
+ { "id_map", test_ext_or_id_map, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
diff --git a/src/test/test_options.c b/src/test/test_options.c
index 6beff25..737f658 100644
--- a/src/test/test_options.c
+++ b/src/test/test_options.c
@@ -148,6 +148,8 @@ test_options_validate(void *arg)
(void)arg;
setup_log_callback();
+ WANT_ERR("ExtORPort 500000", "Invalid ExtORPort");
+
WANT_ERR_LOG("ServerTransportOptions trebuchet",
"ServerTransportOptions did not parse",
LOG_WARN, "Too few arguments");
@@ -157,7 +159,6 @@ test_options_validate(void *arg)
"ServerTransportOptions did not parse",
LOG_WARN, "\"slingsnappy\" is not a k=v");
-// done:
clear_log_messages();
return;
}
More information about the tor-commits
mailing list