X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Funittests%2Fscoped_mmap-selftests.c;h=37d91ae1f25f413c5f7e92f35715d5846326aa65;hb=268a13a5a3f7c6b9b6ffc5ac2d1b24eb41f3fbdc;hp=ece3d7a18ac28fa69fdbc50a1a0b584a61593151;hpb=84696f37ae92280ded0e6600074ad8bc518255fa;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/unittests/scoped_mmap-selftests.c b/gdb/unittests/scoped_mmap-selftests.c index ece3d7a18a..37d91ae1f2 100644 --- a/gdb/unittests/scoped_mmap-selftests.c +++ b/gdb/unittests/scoped_mmap-selftests.c @@ -1,6 +1,6 @@ /* 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. @@ -19,12 +19,14 @@ #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 @@ -78,15 +80,68 @@ run_tests () } } /* 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 }