glib/tests/mappedfile: Copy test file before writing to it
authorColin Walters <walters@verbum.org>
Fri, 3 May 2013 22:13:51 +0000 (18:13 -0400)
committerColin Walters <walters@verbum.org>
Thu, 16 May 2013 12:51:57 +0000 (08:51 -0400)
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

glib/tests/mappedfile.c

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