Blame glib/tests/mappedfile.c

Packit ae235b
#define GLIB_DISABLE_DEPRECATION_WARNINGS
Packit ae235b
Packit ae235b
#include <glib.h>
Packit ae235b
#include <string.h>
Packit ae235b
#include <glib/gstdio.h>
Packit ae235b
#include <sys/stat.h>
Packit ae235b
#include <sys/types.h>
Packit ae235b
#include <fcntl.h>
Packit ae235b
Packit ae235b
#ifdef G_OS_UNIX
Packit ae235b
#include <unistd.h>
Packit ae235b
#endif
Packit ae235b
#ifdef G_OS_WIN32
Packit ae235b
#include <io.h>
Packit ae235b
#endif
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_basic (void)
Packit ae235b
{
Packit ae235b
  GMappedFile *file;
Packit ae235b
  GError *error;
Packit ae235b
Packit ae235b
  error = NULL;
Packit ae235b
  file = g_mapped_file_new (g_test_get_filename (G_TEST_DIST, "empty", NULL), FALSE, &error);
Packit ae235b
  g_assert_no_error (error);
Packit ae235b
Packit ae235b
  g_mapped_file_ref (file);
Packit ae235b
  g_mapped_file_unref (file);
Packit ae235b
Packit ae235b
  g_mapped_file_unref (file);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_empty (void)
Packit ae235b
{
Packit ae235b
  GMappedFile *file;
Packit ae235b
  GError *error;
Packit ae235b
Packit ae235b
  error = NULL;
Packit ae235b
  file = g_mapped_file_new (g_test_get_filename (G_TEST_DIST, "empty", NULL), FALSE, &error);
Packit ae235b
  g_assert_no_error (error);
Packit ae235b
Packit ae235b
  g_assert (g_mapped_file_get_contents (file) == NULL);
Packit ae235b
Packit ae235b
  g_mapped_file_free (file);
Packit ae235b
}
Packit ae235b
Packit ae235b
#ifdef G_OS_UNIX
Packit ae235b
static void
Packit ae235b
test_device (void)
Packit ae235b
{
Packit ae235b
  GError *error = NULL;
Packit ae235b
  GMappedFile *file;
Packit ae235b
Packit ae235b
  file = g_mapped_file_new ("/dev/null", FALSE, &error);
Packit ae235b
  g_assert (g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_INVAL) ||
Packit ae235b
            g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NODEV) ||
Packit ae235b
            g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOMEM));
Packit ae235b
  g_assert (file == NULL);
Packit ae235b
  g_error_free (error);
Packit ae235b
}
Packit ae235b
#endif
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_nonexisting (void)
Packit ae235b
{
Packit ae235b
  GMappedFile *file;
Packit ae235b
  GError *error;
Packit ae235b
Packit ae235b
  error = NULL;
Packit ae235b
  file = g_mapped_file_new ("no-such-file", FALSE, &error);
Packit ae235b
  g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_NOENT);
Packit ae235b
  g_clear_error (&error);
Packit ae235b
  g_assert (file == NULL);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_writable (void)
Packit ae235b
{
Packit ae235b
  GMappedFile *file;
Packit ae235b
  GError *error = NULL;
Packit ae235b
  gchar *contents;
Packit ae235b
  gsize len;
Packit ae235b
  const gchar *old = "MMMMMMMMMMMMMMMMMMMMMMMMM";
Packit ae235b
  const gchar *new = "abcdefghijklmnopqrstuvxyz";
Packit ae235b
  gchar *tmp_copy_path;
Packit ae235b
Packit ae235b
  tmp_copy_path = g_build_filename (g_get_tmp_dir (), "glib-test-4096-random-bytes", NULL);
Packit ae235b
Packit ae235b
  g_file_get_contents (g_test_get_filename (G_TEST_DIST, "4096-random-bytes", NULL), &contents, &len, &error);
Packit ae235b
  g_assert_no_error (error);
Packit ae235b
  g_file_set_contents (tmp_copy_path, contents, len, &error);
Packit ae235b
  g_assert_no_error (error);
Packit ae235b
  
Packit ae235b
  g_free (contents);
Packit ae235b
Packit ae235b
  file = g_mapped_file_new (tmp_copy_path, TRUE, &error);
Packit ae235b
  g_assert_no_error (error);
Packit ae235b
Packit ae235b
  contents = g_mapped_file_get_contents (file);
Packit ae235b
  g_assert (strncmp (contents, old, strlen (old)) == 0);
Packit ae235b
Packit ae235b
  memcpy (contents, new, strlen (new));
Packit ae235b
  g_assert (strncmp (contents, new, strlen (new)) == 0);
Packit ae235b
Packit ae235b
  g_mapped_file_free (file);
Packit ae235b
Packit ae235b
  error = NULL;
Packit ae235b
  file = g_mapped_file_new (tmp_copy_path, FALSE, &error);
Packit ae235b
  g_assert_no_error (error);
Packit ae235b
Packit ae235b
  contents = g_mapped_file_get_contents (file);
Packit ae235b
  g_assert (strncmp (contents, old, strlen (old)) == 0);
Packit ae235b
Packit ae235b
  g_mapped_file_free (file);
Packit ae235b
Packit ae235b
  g_free (tmp_copy_path);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_writable_fd (void)
Packit ae235b
{
Packit ae235b
  GMappedFile *file;
Packit ae235b
  GError *error = NULL;
Packit ae235b
  gchar *contents;
Packit ae235b
  const gchar *old = "MMMMMMMMMMMMMMMMMMMMMMMMM";
Packit ae235b
  const gchar *new = "abcdefghijklmnopqrstuvxyz";
Packit ae235b
  gsize len;
Packit ae235b
  int fd;
Packit ae235b
  gchar *tmp_copy_path;
Packit ae235b
Packit ae235b
  tmp_copy_path = g_build_filename (g_get_tmp_dir (), "glib-test-4096-random-bytes", NULL);
Packit ae235b
Packit ae235b
  g_file_get_contents (g_test_get_filename (G_TEST_DIST, "4096-random-bytes", NULL), &contents, &len, &error);
Packit ae235b
  g_assert_no_error (error);
Packit ae235b
  g_file_set_contents (tmp_copy_path, contents, len, &error);
Packit ae235b
  g_assert_no_error (error);
Packit ae235b
  
Packit ae235b
  g_free (contents);
Packit ae235b
Packit ae235b
  fd = g_open (tmp_copy_path, O_RDWR, 0);
Packit ae235b
  g_assert (fd != -1);
Packit ae235b
  file = g_mapped_file_new_from_fd (fd, TRUE, &error);
Packit ae235b
  g_assert_no_error (error);
Packit ae235b
Packit ae235b
  contents = g_mapped_file_get_contents (file);
Packit ae235b
  g_assert (strncmp (contents, old, strlen (old)) == 0);
Packit ae235b
Packit ae235b
  memcpy (contents, new, strlen (new));
Packit ae235b
  g_assert (strncmp (contents, new, strlen (new)) == 0);
Packit ae235b
Packit ae235b
  g_mapped_file_free (file);
Packit ae235b
  close (fd);
Packit ae235b
Packit ae235b
  error = NULL;
Packit ae235b
  fd = g_open (tmp_copy_path, O_RDWR, 0);
Packit ae235b
  g_assert (fd != -1);
Packit ae235b
  file = g_mapped_file_new_from_fd (fd, TRUE, &error);
Packit ae235b
  g_assert_no_error (error);
Packit ae235b
Packit ae235b
  contents = g_mapped_file_get_contents (file);
Packit ae235b
  g_assert (strncmp (contents, old, strlen (old)) == 0);
Packit ae235b
Packit ae235b
  g_mapped_file_free (file);
Packit ae235b
Packit ae235b
  g_free (tmp_copy_path);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_gbytes (void)
Packit ae235b
{
Packit ae235b
  GMappedFile *file;
Packit ae235b
  GBytes *bytes;
Packit ae235b
  GError *error;
Packit ae235b
Packit ae235b
  error = NULL;
Packit ae235b
  file = g_mapped_file_new (g_test_get_filename (G_TEST_DIST, "empty", NULL), FALSE, &error);
Packit ae235b
  g_assert_no_error (error);
Packit ae235b
Packit ae235b
  bytes = g_mapped_file_get_bytes (file);
Packit ae235b
  g_mapped_file_unref (file);
Packit ae235b
Packit ae235b
  g_assert_cmpint (g_bytes_get_size (bytes), ==, 0);
Packit ae235b
  g_bytes_unref (bytes);
Packit ae235b
}
Packit ae235b
Packit ae235b
int
Packit ae235b
main (int argc, char *argv[])
Packit ae235b
{
Packit ae235b
  g_test_init (&argc, &argv, NULL);
Packit ae235b
Packit ae235b
  g_test_add_func ("/mappedfile/basic", test_basic);
Packit ae235b
  g_test_add_func ("/mappedfile/empty", test_empty);
Packit ae235b
#ifdef G_OS_UNIX
Packit ae235b
  g_test_add_func ("/mappedfile/device", test_device);
Packit ae235b
#endif
Packit ae235b
  g_test_add_func ("/mappedfile/nonexisting", test_nonexisting);
Packit ae235b
  g_test_add_func ("/mappedfile/writable", test_writable);
Packit ae235b
  g_test_add_func ("/mappedfile/writable_fd", test_writable_fd);
Packit ae235b
  g_test_add_func ("/mappedfile/gbytes", test_gbytes);
Packit ae235b
Packit ae235b
  return g_test_run ();
Packit ae235b
}