/* Self tests for scoped_mmap for GDB, the GNU debugger.
- Copyright (C) 2018 Free Software Foundation, Inc.
+ Copyright (C) 2018-2019 Free Software Foundation, Inc.
This file is part of GDB.
#include "defs.h"
-#include "common/scoped_mmap.h"
+#include "gdbsupport/filestuff.h"
+#include "gdbsupport/scoped_mmap.h"
#include "config.h"
-#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_UNISTD_H)
+#if defined(HAVE_SYS_MMAN_H)
-#include "selftest.h"
+#include "gdbsupport/selftest.h"
+#include "gdbsupport/gdb_unlinker.h"
#include <unistd.h>
}
} /* namespace scoped_mmap */
+
+namespace mmap_file
+{
+
+/* Test the standard usage of mmap_file. */
+static void
+test_normal ()
+{
+ char filename[] = "scoped_mmapped_file-selftest-XXXXXX";
+ int fd = gdb_mkostemp_cloexec (filename);
+ SELF_CHECK (fd >= 0);
+
+ SELF_CHECK (write (fd, "Hello!", 7) == 7);
+ close (fd);
+
+ gdb::unlinker unlink_test_file (filename);
+
+ {
+ ::scoped_mmap m = ::mmap_file (filename);
+
+ SELF_CHECK (m.get () != MAP_FAILED);
+ SELF_CHECK (m.size () == 7);
+ SELF_CHECK (0 == strcmp ((char *) m.get (), "Hello!"));
+ }
+}
+
+/* Calling mmap_file with a non-existent file should throw an exception. */
+static void
+test_invalid_filename ()
+{
+ bool threw = false;
+
+ try {
+ ::scoped_mmap m = ::mmap_file ("/this/file/should/not/exist");
+ } catch (gdb_exception &e) {
+ threw = true;
+ }
+
+ SELF_CHECK (threw);
+}
+
+
+/* Run selftests. */
+static void
+run_tests ()
+{
+ test_normal ();
+ test_invalid_filename ();
+}
+
+} /* namespace mmap_file */
} /* namespace selftests */
-#endif /* !defined(HAVE_SYS_MMAN_H) || !defined(HAVE_UNISTD_H) */
+#endif /* !defined(HAVE_SYS_MMAN_H) */
void
_initialize_scoped_mmap_selftests ()
{
-#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_UNISTD_H)
+#if defined(HAVE_SYS_MMAN_H)
selftests::register_test ("scoped_mmap",
selftests::scoped_mmap::run_tests);
+ selftests::register_test ("mmap_file",
+ selftests::mmap_file::run_tests);
#endif
}