commit aaf79eb4d334fb5e1f98d0a68b3a30dde983325a Author: George Kadianakis desnacked@riseup.net Date: Mon Jul 29 15:59:59 2013 +0200
Write unit tests for configure_proxy(). --- src/or/transports.c | 4 +-- src/or/transports.h | 2 ++ src/test/test_pt.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 3 deletions(-)
diff --git a/src/or/transports.c b/src/or/transports.c index 604d9fc..3aced21 100644 --- a/src/or/transports.c +++ b/src/or/transports.c @@ -106,8 +106,6 @@ static void managed_proxy_destroy(managed_proxy_t *mp, int also_terminate_process);
static void handle_finished_proxy(managed_proxy_t *mp); -static int configure_proxy(managed_proxy_t *mp); - static void parse_method_error(const char *line, int is_server_method); #define parse_server_method_error(l) parse_method_error(l, 1) #define parse_client_method_error(l) parse_method_error(l, 0) @@ -590,7 +588,7 @@ pt_configure_remaining_proxies(void) * Return 1 if the transport configuration finished, and return 0 * otherwise (if we still have more configuring to do for this * proxy). */ -static int +STATIC int configure_proxy(managed_proxy_t *mp) { int configuration_finished = 0; diff --git a/src/or/transports.h b/src/or/transports.h index cc3e018..7f180a6 100644 --- a/src/or/transports.h +++ b/src/or/transports.h @@ -111,6 +111,8 @@ STATIC int parse_version(const char *line, managed_proxy_t *mp); STATIC void parse_env_error(const char *line); STATIC void handle_proxy_line(const char *line, managed_proxy_t *mp);
+STATIC int configure_proxy(managed_proxy_t *mp); + #endif
#endif diff --git a/src/test/test_pt.c b/src/test/test_pt.c index 16daa28..6648326 100644 --- a/src/test/test_pt.c +++ b/src/test/test_pt.c @@ -5,9 +5,11 @@
#include "orconfig.h" #define PT_PRIVATE +#define UTIL_PRIVATE #include "or.h" #include "transports.h" #include "circuitbuild.h" +#include "util.h" #include "test.h"
static void @@ -153,12 +155,81 @@ test_pt_protocol(void) tor_free(mp); }
+#ifdef _WIN32 +static smartlist_t * +tor_get_lines_from_handle_replacement(HANDLE *handle, + enum stream_status *stream_status_out) +#else +static smartlist_t * +tor_get_lines_from_handle_replacement(FILE *handle, + enum stream_status *stream_status_out) +#endif +{ + (void) handle; + (void) stream_status_out; + static int times_called = 0; + + smartlist_t *retval_sl = smartlist_new(); + + /* Generate some dummy CMETHOD lines the first 5 times. The 6th + time, send 'CMETHODS DONE' to finish configuring the proxy. */ + if (times_called++ != 5) { + smartlist_add_asprintf(retval_sl, "CMETHOD mock%d socks5 127.0.0.1:555%d", + times_called, times_called); + } else { + smartlist_add(retval_sl, tor_strdup("CMETHODS DONE")); + } + + return retval_sl; +} + +/* NOP mock */ +static void +tor_process_handle_destroy_replacement(process_handle_t *process_handle, + int also_terminate_process) +{ + return; +} + +/* Test the configure_proxy() function. */ +static void +test_pt_configure_proxy(void *arg) +{ + (void) arg; + int i; + managed_proxy_t *mp = NULL; + + MOCK(tor_get_lines_from_handle, + tor_get_lines_from_handle_replacement); + MOCK(tor_process_handle_destroy, + tor_process_handle_destroy_replacement); + + mp = tor_malloc(sizeof(managed_proxy_t)); + mp->conf_state = PT_PROTO_ACCEPTING_METHODS; + mp->transports = smartlist_new(); + mp->transports_to_launch = smartlist_new(); + mp->process_handle = tor_malloc_zero(sizeof(process_handle_t)); + + /* Test the return value of configure_proxy() by calling it some + times while it is uninitialized and then finally finalizing its + configuration. */ + for (i = 0 ; i < 5 ; i++) { + test_assert(configure_proxy(mp) == 0); + } + test_assert(configure_proxy(mp) == 1); + + done: + UNMOCK(tor_get_lines_from_handle); + UNMOCK(tor_process_handle_destroy); +} #define PT_LEGACY(name) \ { #name, legacy_test_helper, 0, &legacy_setup, test_pt_ ## name }
struct testcase_t pt_tests[] = { PT_LEGACY(parsing), PT_LEGACY(protocol), + { "configure_proxy",test_pt_configure_proxy, TT_FORK, + NULL, NULL }, END_OF_TESTCASES };
tor-commits@lists.torproject.org