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);
|
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
|
#ifndef COCCI
|
||||||
#define _TFE(a, b, f) tt_int_op((a).f, OP_EQ, (b).f)
|
#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
|
/** 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_eof_zero_bytes, 0),
|
||||||
UTIL_TEST(read_file_endlines, 0),
|
UTIL_TEST(read_file_endlines, 0),
|
||||||
UTIL_TEST(write_chunks_to_file, 0),
|
UTIL_TEST(write_chunks_to_file, 0),
|
||||||
|
UTIL_TEST(write_str_if_changed, 0),
|
||||||
UTIL_TEST(mathlog, 0),
|
UTIL_TEST(mathlog, 0),
|
||||||
UTIL_TEST(fraction, 0),
|
UTIL_TEST(fraction, 0),
|
||||||
UTIL_TEST(weak_random, 0),
|
UTIL_TEST(weak_random, 0),
|
||||||
|
Loading…
Reference in New Issue
Block a user