summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGeorge Kadianakis <desnacked@riseup.net>2013-08-14 18:00:08 +0300
committerNick Mathewson <nickm@torproject.org>2013-08-15 12:03:38 -0400
commitc5269a59b011c8e961c7e88185b84e78af33d904 (patch)
treed22705c08b3db56d045a320b1e6c7fc359757957 /src
parent94db455472c2bf0484bcfacb81f8ca05836c5cdf (diff)
downloadtor-c5269a59b011c8e961c7e88185b84e78af33d904.tar.gz
tor-c5269a59b011c8e961c7e88185b84e78af33d904.zip
Test ExtORPort cookie initialization when file writing is broken.
Diffstat (limited to 'src')
-rw-r--r--src/common/util.c6
-rw-r--r--src/common/util.h5
-rw-r--r--src/test/test_extorport.c21
3 files changed, 27 insertions, 5 deletions
diff --git a/src/common/util.c b/src/common/util.c
index 0e8d34eafd..a4c2ef4c24 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -2216,9 +2216,9 @@ write_bytes_to_file_impl(const char *fname, const char *str, size_t len,
/** As write_str_to_file, but does not assume a NUL-terminated
* string. Instead, we write <b>len</b> bytes, starting at <b>str</b>. */
-int
-write_bytes_to_file(const char *fname, const char *str, size_t len,
- int bin)
+MOCK_IMPL(int,
+write_bytes_to_file,(const char *fname, const char *str, size_t len,
+ int bin))
{
return write_bytes_to_file_impl(fname, str, len,
OPEN_FLAGS_REPLACE|(bin?O_BINARY:O_TEXT));
diff --git a/src/common/util.h b/src/common/util.h
index 0a8e4a23fc..8dfb2de5fc 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -355,8 +355,9 @@ FILE *fdopen_file(open_file_t *file_data);
int finish_writing_to_file(open_file_t *file_data);
int abort_writing_to_file(open_file_t *file_data);
int write_str_to_file(const char *fname, const char *str, int bin);
-int write_bytes_to_file(const char *fname, const char *str, size_t len,
- int bin);
+MOCK_DECL(int,
+write_bytes_to_file,(const char *fname, const char *str, size_t len,
+ int bin));
/** An ad-hoc type to hold a string of characters and a count; used by
* write_chunks_to_file. */
typedef struct sized_chunk_t {
diff --git a/src/test/test_extorport.c b/src/test/test_extorport.c
index a3ccc412ab..7e38ba57dc 100644
--- a/src/test/test_extorport.c
+++ b/src/test/test_extorport.c
@@ -149,6 +149,18 @@ test_ext_or_write_command(void *arg)
UNMOCK(connection_write_to_buf_impl_);
}
+static int
+write_bytes_to_file_fail(const char *fname, const char *str, size_t len,
+ int bin)
+{
+ (void) fname;
+ (void) str;
+ (void) len;
+ (void) bin;
+
+ return -1;
+}
+
static void
test_ext_or_init_auth(void *arg)
{
@@ -177,6 +189,14 @@ test_ext_or_init_auth(void *arg)
tt_str_op(cp, ==, fn);
tor_free(cp);
+ /* Test the initialization function with a broken
+ write_bytes_to_file(). See if the problem is handled properly. */
+ MOCK(write_bytes_to_file, write_bytes_to_file_fail);
+ tt_int_op(-1, ==, init_ext_or_cookie_authentication(1));
+ tt_int_op(ext_or_auth_cookie_is_set, ==, 0);
+ UNMOCK(write_bytes_to_file);
+
+ /* Now do the actual initialization. */
tt_int_op(0, ==, init_ext_or_cookie_authentication(1));
tt_int_op(ext_or_auth_cookie_is_set, ==, 1);
cp = read_file_to_str(fn, RFTS_BIN, &st);
@@ -193,6 +213,7 @@ test_ext_or_init_auth(void *arg)
done:
tor_free(cp);
+ ext_orport_free_all();
}
static void