Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Unified Diff: base/process_util_unittest.cc

Issue 391044: For Linux, override malloc and friends so that we can detect and then stop on... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Readability & style. Fix new unittest on 32bit Linux Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/process_util_linux.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/process_util_unittest.cc
===================================================================
--- base/process_util_unittest.cc (revision 32206)
+++ base/process_util_unittest.cc (working copy)
@@ -4,6 +4,8 @@
#define _CRT_SECURE_NO_WARNINGS
+#include <limits>
+
#include "base/command_line.h"
#include "base/eintr_wrapper.h"
#include "base/file_path.h"
@@ -15,6 +17,7 @@
#if defined(OS_LINUX)
#include <dlfcn.h>
+#include <malloc.h>
#endif
#if defined(OS_POSIX)
#include <fcntl.h>
@@ -361,4 +364,95 @@
#endif // defined(OS_POSIX)
+#if defined(OS_LINUX)
+// TODO(vandebo) make this work on Windows and Mac too.
+
+class OutOfMemoryTest : public testing::Test {
+ public:
+ OutOfMemoryTest()
+ : value_(NULL),
+ // Make test size as large as possible minus a few pages so
+ // that alignment or other rounding doesn't make it wrap.
+ test_size_(std::numeric_limits<std::size_t>::max() - 8192) {
+ }
+
+ virtual void SetUp() {
+ // Must call EnableTerminationOnOutOfMemory() because that is called from
+ // chrome's main function and therefore hasn't been called yet.
+ EnableTerminationOnOutOfMemory();
+ }
+
+ void* value_;
+ size_t test_size_;
+};
+
+TEST_F(OutOfMemoryTest, New) {
+ ASSERT_DEATH(value_ = new char[test_size_], "");
+}
+
+TEST_F(OutOfMemoryTest, Malloc) {
+ ASSERT_DEATH(value_ = malloc(test_size_), "");
+}
+
+TEST_F(OutOfMemoryTest, Realloc) {
+ ASSERT_DEATH(value_ = realloc(NULL, test_size_), "");
+}
+
+TEST_F(OutOfMemoryTest, Calloc) {
+ ASSERT_DEATH(value_ = calloc(1024, test_size_ / 1024L), "");
+}
+
+TEST_F(OutOfMemoryTest, Valloc) {
+ ASSERT_DEATH(value_ = valloc(test_size_), "");
+}
+
+TEST_F(OutOfMemoryTest, Pvalloc) {
+ ASSERT_DEATH(value_ = pvalloc(test_size_), "");
+}
+
+TEST_F(OutOfMemoryTest, Memalign) {
+ ASSERT_DEATH(value_ = memalign(4, test_size_), "");
+}
+
+TEST_F(OutOfMemoryTest, Posix_memalign) {
+ ASSERT_DEATH(posix_memalign(&value_, 8, test_size_), "");
+}
+
+extern "C" {
+
+void* __libc_malloc(size_t size);
+void* __libc_realloc(void* ptr, size_t size);
+void* __libc_calloc(size_t nmemb, size_t size);
+void* __libc_valloc(size_t size);
+void* __libc_pvalloc(size_t size);
+void* __libc_memalign(size_t alignment, size_t size);
+
+} // extern "C"
+
+TEST_F(OutOfMemoryTest, __libc_malloc) {
+ ASSERT_DEATH(value_ = __libc_malloc(test_size_), "");
+}
+
+TEST_F(OutOfMemoryTest, __libc_realloc) {
+ ASSERT_DEATH(value_ = __libc_realloc(NULL, test_size_), "");
+}
+
+TEST_F(OutOfMemoryTest, __libc_calloc) {
+ ASSERT_DEATH(value_ = __libc_calloc(1024, test_size_ / 1024L), "");
+}
+
+TEST_F(OutOfMemoryTest, __libc_valloc) {
+ ASSERT_DEATH(value_ = __libc_valloc(test_size_), "");
+}
+
+TEST_F(OutOfMemoryTest, __libc_pvalloc) {
+ ASSERT_DEATH(value_ = __libc_pvalloc(test_size_), "");
+}
+
+TEST_F(OutOfMemoryTest, __libc_memalign) {
+ ASSERT_DEATH(value_ = __libc_memalign(4, test_size_), "");
+}
+
+#endif // defined(OS_LINUX)
+
} // namespace base
« no previous file with comments | « base/process_util_linux.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698