diff options
author | David Goulet <dgoulet@torproject.org> | 2021-01-28 12:46:31 -0500 |
---|---|---|
committer | David Goulet <dgoulet@torproject.org> | 2021-01-28 12:46:31 -0500 |
commit | 79cb47cfc2ed83911f78fa24ba4205bf69958105 (patch) | |
tree | ad92e37bc8cbdc8145d2ddf7518711d93af79a68 /src/test/test_util.c | |
parent | f058db1f3d6fee5bc6506ece88cfd100eb86729d (diff) | |
parent | 9556276f07e62e8b2e6a496e9b2a918293367839 (diff) | |
download | tor-79cb47cfc2ed83911f78fa24ba4205bf69958105.tar.gz tor-79cb47cfc2ed83911f78fa24ba4205bf69958105.zip |
Merge branch 'maint-0.3.5' into maint-0.4.3
Diffstat (limited to 'src/test/test_util.c')
-rw-r--r-- | src/test/test_util.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/test/test_util.c b/src/test/test_util.c index 0d86a5ab5d..e7f4106d91 100644 --- a/src/test/test_util.c +++ b/src/test/test_util.c @@ -206,6 +206,54 @@ test_util_read_file_eof_zero_bytes(void *arg) test_util_read_until_eof_impl("tor_test_fifo_empty", 0, 10000); } +static void +test_util_read_file_endlines(void *arg) +{ + (void)arg; + + char *fname = NULL; + char *read_content = NULL; + int r = -1; + + /* Write a file that contains both \n and \r\n as line ending. */ + const char *file_content = "foo bar\n" + "foo bar baz\r\n" + "foo bar\r\n"; + + const char *expected_file_content = "foo bar\n" + "foo bar baz\n" + "foo bar\n"; + + fname = tor_strdup(get_fname("file_with_crlf_ending")); + + r = write_bytes_to_file(fname, file_content, strlen(file_content), 1); + tt_int_op(r, OP_EQ, 0); + + /* Read the file in text mode: we strip \r's from the files on both Windows + * and UNIX. */ + read_content = read_file_to_str(fname, 0, NULL); + + tt_ptr_op(read_content, OP_NE, NULL); + tt_int_op(strlen(read_content), OP_EQ, strlen(expected_file_content)); + tt_str_op(read_content, OP_EQ, expected_file_content); + + tor_free(read_content); + + /* Read the file in binary mode: we should preserve the \r here. */ + read_content = read_file_to_str(fname, RFTS_BIN, NULL); + + tt_ptr_op(read_content, OP_NE, NULL); + tt_int_op(strlen(read_content), OP_EQ, strlen(file_content)); + tt_str_op(read_content, OP_EQ, file_content); + + tor_free(read_content); + + done: + unlink(fname); + tor_free(fname); + tor_free(read_content); +} + /* Test the basic expected behaviour for write_chunks_to_file. * NOTE: This will need to be updated if we ever change the tempfile location * or extension */ @@ -6414,6 +6462,7 @@ struct testcase_t util_tests[] = { UTIL_TEST(read_file_eof_two_loops, 0), UTIL_TEST(read_file_eof_two_loops_b, 0), UTIL_TEST(read_file_eof_zero_bytes, 0), + UTIL_TEST(read_file_endlines, 0), UTIL_TEST(write_chunks_to_file, 0), UTIL_TEST(mathlog, 0), UTIL_TEST(fraction, 0), |