mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +01:00
Add a unit test for write_str_to_file_if_not_equal()
This commit is contained in:
parent
f3e5b283ad
commit
fcf4954cc8
@ -357,6 +357,55 @@ test_util_write_chunks_to_file(void *arg)
|
||||
tor_free(temp_str);
|
||||
}
|
||||
|
||||
/* Test write_str_to_file_if_not_equal(). */
|
||||
static void
|
||||
test_util_write_str_if_changed(void *arg)
|
||||
{
|
||||
(void)arg;
|
||||
char *fname = tor_strdup(get_fname("write_if_changed"));
|
||||
char *s = NULL;
|
||||
int rv;
|
||||
const char str1[] = "The wombat lives across the seas";
|
||||
const char str2[] = "Among the far Antipodes"; /* -- Ogden Nash */
|
||||
|
||||
/* We can create files. */
|
||||
rv = write_str_to_file_if_not_equal(fname, str1);
|
||||
tt_int_op(rv, OP_EQ, 0);
|
||||
s = read_file_to_str(fname, 0, NULL);
|
||||
tt_str_op(s, OP_EQ, str1);
|
||||
tor_free(s);
|
||||
|
||||
/* We can replace files. */
|
||||
rv = write_str_to_file_if_not_equal(fname, str2);
|
||||
tt_int_op(rv, OP_EQ, 0);
|
||||
s = read_file_to_str(fname, 0, NULL);
|
||||
tt_str_op(s, OP_EQ, str2);
|
||||
tor_free(s);
|
||||
|
||||
/* Make sure we don't replace files when they're equal. (That's the whole
|
||||
* point of the function we're testing. */
|
||||
/* First, change the mtime of the file so that we can tell whether we
|
||||
* replaced it. */
|
||||
const time_t now = time(NULL);
|
||||
const time_t five_sec_ago = now - 5;
|
||||
set_file_mtime(fname, five_sec_ago);
|
||||
rv = write_str_to_file_if_not_equal(fname, str2);
|
||||
tt_int_op(rv, OP_EQ, 0);
|
||||
/* Make sure that the file's mtime is unchanged... */
|
||||
struct stat st;
|
||||
rv = stat(fname, &st);
|
||||
tt_int_op(rv, OP_EQ, 0);
|
||||
tt_i64_op(st.st_mtime, OP_EQ, five_sec_ago);
|
||||
/* And make sure its contents are unchanged. */
|
||||
s = read_file_to_str(fname, 0, NULL);
|
||||
tt_str_op(s, OP_EQ, str2);
|
||||
tor_free(s);
|
||||
|
||||
done:
|
||||
tor_free(fname);
|
||||
tor_free(s);
|
||||
}
|
||||
|
||||
#ifndef COCCI
|
||||
#define _TFE(a, b, f) tt_int_op((a).f, OP_EQ, (b).f)
|
||||
/** test the minimum set of struct tm fields needed for a unique epoch value
|
||||
@ -6557,6 +6606,7 @@ struct testcase_t util_tests[] = {
|
||||
UTIL_TEST(read_file_eof_zero_bytes, 0),
|
||||
UTIL_TEST(read_file_endlines, 0),
|
||||
UTIL_TEST(write_chunks_to_file, 0),
|
||||
UTIL_TEST(write_str_if_changed, 0),
|
||||
UTIL_TEST(mathlog, 0),
|
||||
UTIL_TEST(fraction, 0),
|
||||
UTIL_TEST(weak_random, 0),
|
||||
|
Loading…
Reference in New Issue
Block a user