Test ExtORPort cookie initialization when file writing is broken.

This commit is contained in:
George Kadianakis 2013-08-14 18:00:08 +03:00 committed by Nick Mathewson
parent 94db455472
commit c5269a59b0
3 changed files with 27 additions and 5 deletions

View File

@ -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 /** 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>. */ * string. Instead, we write <b>len</b> bytes, starting at <b>str</b>. */
int MOCK_IMPL(int,
write_bytes_to_file(const char *fname, const char *str, size_t len, write_bytes_to_file,(const char *fname, const char *str, size_t len,
int bin) int bin))
{ {
return write_bytes_to_file_impl(fname, str, len, return write_bytes_to_file_impl(fname, str, len,
OPEN_FLAGS_REPLACE|(bin?O_BINARY:O_TEXT)); OPEN_FLAGS_REPLACE|(bin?O_BINARY:O_TEXT));

View File

@ -355,8 +355,9 @@ FILE *fdopen_file(open_file_t *file_data);
int finish_writing_to_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 abort_writing_to_file(open_file_t *file_data);
int write_str_to_file(const char *fname, const char *str, int bin); 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, MOCK_DECL(int,
int bin); 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 /** An ad-hoc type to hold a string of characters and a count; used by
* write_chunks_to_file. */ * write_chunks_to_file. */
typedef struct sized_chunk_t { typedef struct sized_chunk_t {

View File

@ -149,6 +149,18 @@ test_ext_or_write_command(void *arg)
UNMOCK(connection_write_to_buf_impl_); 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 static void
test_ext_or_init_auth(void *arg) test_ext_or_init_auth(void *arg)
{ {
@ -177,6 +189,14 @@ test_ext_or_init_auth(void *arg)
tt_str_op(cp, ==, fn); tt_str_op(cp, ==, fn);
tor_free(cp); 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(0, ==, init_ext_or_cookie_authentication(1));
tt_int_op(ext_or_auth_cookie_is_set, ==, 1); tt_int_op(ext_or_auth_cookie_is_set, ==, 1);
cp = read_file_to_str(fn, RFTS_BIN, &st); cp = read_file_to_str(fn, RFTS_BIN, &st);
@ -193,6 +213,7 @@ test_ext_or_init_auth(void *arg)
done: done:
tor_free(cp); tor_free(cp);
ext_orport_free_all();
} }
static void static void