mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 14:23:30 +01:00
Test ExtORPort cookie initialization when file writing is broken.
This commit is contained in:
parent
94db455472
commit
c5269a59b0
@ -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));
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user