[tor-commits] [tor/master] Write unit tests for configure_proxy().

nickm at torproject.org nickm at torproject.org
Wed Jul 31 17:51:25 UTC 2013


commit aaf79eb4d334fb5e1f98d0a68b3a30dde983325a
Author: George Kadianakis <desnacked at 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
 };
 





More information about the tor-commits mailing list