aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Kadianakis <desnacked@riseup.net>2013-08-05 20:54:54 +0300
committerGeorge Kadianakis <desnacked@riseup.net>2013-08-05 21:05:39 +0300
commit0c4baa016feadd945172022ab91ff11bb0bc2117 (patch)
tree23376050430f99f73c12d9d28f06cd359002198e
parent00a7d1af9f0b1658f74fca00cff339696d326c4d (diff)
downloadtor-0c4baa016feadd945172022ab91ff11bb0bc2117.tar
tor-0c4baa016feadd945172022ab91ff11bb0bc2117.tar.gz
Also test that server transports get written to Tor's state.
-rw-r--r--src/or/statefile.c3
-rw-r--r--src/or/statefile.h4
-rw-r--r--src/test/test_pt.c27
3 files changed, 31 insertions, 3 deletions
diff --git a/src/or/statefile.c b/src/or/statefile.c
index aac8850b1..8736c35a2 100644
--- a/src/or/statefile.c
+++ b/src/or/statefile.c
@@ -4,6 +4,7 @@
* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
+#define STATEFILE_PRIVATE
#include "or.h"
#include "circuitstats.h"
#include "config.h"
@@ -449,7 +450,7 @@ or_state_save(time_t now)
/** Return the config line for transport <b>transport</b> in the current state.
* Return NULL if there is no config line for <b>transport</b>. */
-static config_line_t *
+STATIC config_line_t *
get_transport_in_state_by_name(const char *transport)
{
or_state_t *or_state = get_or_state();
diff --git a/src/or/statefile.h b/src/or/statefile.h
index 762b0f5ee..c1413ff95 100644
--- a/src/or/statefile.h
+++ b/src/or/statefile.h
@@ -18,5 +18,9 @@ int or_state_load(void);
int or_state_loaded(void);
void or_state_free_all(void);
+#ifdef STATEFILE_PRIVATE
+STATIC config_line_t *get_transport_in_state_by_name(const char *transport);
+#endif
+
#endif
diff --git a/src/test/test_pt.c b/src/test/test_pt.c
index e4aa39f86..433f85dfb 100644
--- a/src/test/test_pt.c
+++ b/src/test/test_pt.c
@@ -6,6 +6,7 @@
#include "orconfig.h"
#define PT_PRIVATE
#define UTIL_PRIVATE
+#define STATEFILE_PRIVATE
#include "or.h"
#include "config.h"
#include "confparse.h"
@@ -291,10 +292,10 @@ tor_get_lines_from_handle_replacement(STDIN_HANDLE *handle,
/* 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",
+ smartlist_add_asprintf(retval_sl, "SMETHOD mock%d 127.0.0.1:555%d",
times_called, times_called);
} else {
- smartlist_add(retval_sl, tor_strdup("CMETHODS DONE"));
+ smartlist_add(retval_sl, tor_strdup("SMETHODS DONE"));
}
return retval_sl;
@@ -341,6 +342,7 @@ test_pt_configure_proxy(void *arg)
mp->process_handle = tor_malloc_zero(sizeof(process_handle_t));
mp->argv = tor_malloc_zero(sizeof(char*)*2);
mp->argv[0] = tor_strdup("<testcase>");
+ mp->is_server = 1;
/* Test the return value of configure_proxy() by calling it some
times while it is uninitialized and then finally finalizing its
@@ -362,6 +364,27 @@ test_pt_configure_proxy(void *arg)
/* check the mp state */
test_assert(mp->conf_state == PT_PROTO_COMPLETED);
+ { /* check that the transport info were saved properly in the tor state */
+ config_line_t *transport_in_state = NULL;
+ smartlist_t *transport_info_sl = smartlist_new();
+ char *name_of_transport = NULL;
+ char *bindaddr = NULL;
+
+ /* Get the bindaddr for "mock1" and check it against the bindaddr
+ that the mocked tor_get_lines_from_handle() generated. */
+ transport_in_state = get_transport_in_state_by_name("mock1");
+ test_assert(transport_in_state);
+ smartlist_split_string(transport_info_sl, transport_in_state->value,
+ NULL, 0, 0);
+ name_of_transport = smartlist_get(transport_info_sl, 0);
+ bindaddr = smartlist_get(transport_info_sl, 1);
+ tt_str_op(name_of_transport, ==, "mock1");
+ tt_str_op(bindaddr, ==, "127.0.0.1:5551");
+
+ SMARTLIST_FOREACH(transport_info_sl, char *, cp, tor_free(cp));
+ smartlist_free(transport_info_sl);
+ }
+
done:
tor_free(dummy_state);
UNMOCK(tor_get_lines_from_handle);