glib/tests/mappedfile: Copy test file before writing to it

This way we're *always* testing writability rather than only sometimes
doing it in the source directory.

https://bugzilla.gnome.org/show_bug.cgi?id=699079
This commit is contained in:
Colin Walters 2013-05-03 18:13:51 -04:00
parent 23f5d8b238
commit 6e64bbe8de

View File

@ -74,19 +74,25 @@ static void
test_writable (void) test_writable (void)
{ {
GMappedFile *file; GMappedFile *file;
GError *error; GError *error = NULL;
gchar *contents; gchar *contents;
gsize len;
const gchar *old = "MMMMMMMMMMMMMMMMMMMMMMMMM"; const gchar *old = "MMMMMMMMMMMMMMMMMMMMMMMMM";
const gchar *new = "abcdefghijklmnopqrstuvxyz"; const gchar *new = "abcdefghijklmnopqrstuvxyz";
char *srcpath;
gchar *tmp_copy_path;
if (access (SRCDIR "/4096-random-bytes", W_OK) != 0) srcpath = g_build_filename (SRCDIR, "4096-random-bytes", NULL);
{ tmp_copy_path = g_build_filename (g_get_user_runtime_dir (), "glib-test-4096-random-bytes", NULL);
g_test_message ("Skipping writable mapping test");
return;
}
error = NULL; g_file_get_contents (srcpath, &contents, &len, &error);
file = g_mapped_file_new (SRCDIR "/4096-random-bytes", TRUE, &error); g_assert_no_error (error);
g_file_set_contents (tmp_copy_path, contents, len, &error);
g_assert_no_error (error);
g_free (contents);
file = g_mapped_file_new (tmp_copy_path, TRUE, &error);
g_assert_no_error (error); g_assert_no_error (error);
contents = g_mapped_file_get_contents (file); contents = g_mapped_file_get_contents (file);
@ -98,33 +104,42 @@ test_writable (void)
g_mapped_file_free (file); g_mapped_file_free (file);
error = NULL; error = NULL;
file = g_mapped_file_new (SRCDIR "/4096-random-bytes", TRUE, &error); file = g_mapped_file_new (tmp_copy_path, FALSE, &error);
g_assert_no_error (error); g_assert_no_error (error);
contents = g_mapped_file_get_contents (file); contents = g_mapped_file_get_contents (file);
g_assert (strncmp (contents, old, strlen (old)) == 0); g_assert (strncmp (contents, old, strlen (old)) == 0);
g_mapped_file_free (file); g_mapped_file_free (file);
g_free (srcpath);
g_free (tmp_copy_path);
} }
static void static void
test_writable_fd (void) test_writable_fd (void)
{ {
GMappedFile *file; GMappedFile *file;
GError *error; GError *error = NULL;
gchar *contents; gchar *contents;
const gchar *old = "MMMMMMMMMMMMMMMMMMMMMMMMM"; const gchar *old = "MMMMMMMMMMMMMMMMMMMMMMMMM";
const gchar *new = "abcdefghijklmnopqrstuvxyz"; const gchar *new = "abcdefghijklmnopqrstuvxyz";
gsize len;
int fd; int fd;
char *srcpath;
gchar *tmp_copy_path;
if (access (SRCDIR "/4096-random-bytes", W_OK) != 0) srcpath = g_build_filename (SRCDIR, "4096-random-bytes", NULL);
{ tmp_copy_path = g_build_filename (g_get_user_runtime_dir (), "glib-test-4096-random-bytes", NULL);
g_test_message ("Skipping writable mapping test");
return;
}
error = NULL; g_file_get_contents (srcpath, &contents, &len, &error);
fd = g_open (SRCDIR "/4096-random-bytes", O_RDWR, 0); g_assert_no_error (error);
g_file_set_contents (tmp_copy_path, contents, len, &error);
g_assert_no_error (error);
g_free (contents);
fd = g_open (tmp_copy_path, O_RDWR, 0);
g_assert (fd != -1); g_assert (fd != -1);
file = g_mapped_file_new_from_fd (fd, TRUE, &error); file = g_mapped_file_new_from_fd (fd, TRUE, &error);
g_assert_no_error (error); g_assert_no_error (error);
@ -139,7 +154,7 @@ test_writable_fd (void)
close (fd); close (fd);
error = NULL; error = NULL;
fd = g_open (SRCDIR "/4096-random-bytes", O_RDWR, 0); fd = g_open (tmp_copy_path, O_RDWR, 0);
g_assert (fd != -1); g_assert (fd != -1);
file = g_mapped_file_new_from_fd (fd, TRUE, &error); file = g_mapped_file_new_from_fd (fd, TRUE, &error);
g_assert_no_error (error); g_assert_no_error (error);
@ -149,6 +164,8 @@ test_writable_fd (void)
g_mapped_file_free (file); g_mapped_file_free (file);
g_free (srcpath);
g_free (tmp_copy_path);
} }
static void static void