OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #define _CRT_SECURE_NO_WARNINGS | 5 #define _CRT_SECURE_NO_WARNINGS |
6 | 6 |
| 7 #include <limits> |
| 8 |
7 #include "base/command_line.h" | 9 #include "base/command_line.h" |
8 #include "base/eintr_wrapper.h" | 10 #include "base/eintr_wrapper.h" |
9 #include "base/file_path.h" | 11 #include "base/file_path.h" |
10 #include "base/multiprocess_test.h" | 12 #include "base/multiprocess_test.h" |
11 #include "base/path_service.h" | 13 #include "base/path_service.h" |
12 #include "base/platform_thread.h" | 14 #include "base/platform_thread.h" |
13 #include "base/process_util.h" | 15 #include "base/process_util.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
15 | 17 |
16 #if defined(OS_LINUX) | 18 #if defined(OS_LINUX) |
17 #include <dlfcn.h> | 19 #include <dlfcn.h> |
| 20 #include <malloc.h> |
18 #endif | 21 #endif |
19 #if defined(OS_POSIX) | 22 #if defined(OS_POSIX) |
20 #include <fcntl.h> | 23 #include <fcntl.h> |
21 #include <sys/socket.h> | 24 #include <sys/socket.h> |
22 #endif | 25 #endif |
23 #if defined(OS_WIN) | 26 #if defined(OS_WIN) |
24 #include <windows.h> | 27 #include <windows.h> |
25 #endif | 28 #endif |
26 | 29 |
27 namespace base { | 30 namespace base { |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 "0 0 0 0 " // <- No CPU, apparently. | 357 "0 0 0 0 " // <- No CPU, apparently. |
355 "16 0 1 0 1676099790 2957312 114 4294967295 134512640 134528148 " | 358 "16 0 1 0 1676099790 2957312 114 4294967295 134512640 134528148 " |
356 "3221224832 3221224344 3086339742 0 0 0 0 0 0 0 17 0 0 0"; | 359 "3221224832 3221224344 3086339742 0 0 0 0 0 0 0 17 0 0 0"; |
357 | 360 |
358 EXPECT_EQ(0, ParseProcStatCPU(kSelfStat)); | 361 EXPECT_EQ(0, ParseProcStatCPU(kSelfStat)); |
359 } | 362 } |
360 #endif | 363 #endif |
361 | 364 |
362 #endif // defined(OS_POSIX) | 365 #endif // defined(OS_POSIX) |
363 | 366 |
| 367 #if defined(OS_LINUX) |
| 368 // TODO(vandebo) make this work on Windows and Mac too. |
| 369 |
| 370 class OutOfMemoryTest : public testing::Test { |
| 371 public: |
| 372 OutOfMemoryTest() |
| 373 : value_(NULL), |
| 374 // Make test size as large as possible minus a few pages so |
| 375 // that alignment or other rounding doesn't make it wrap. |
| 376 test_size_(std::numeric_limits<std::size_t>::max() - 8192) { |
| 377 } |
| 378 |
| 379 virtual void SetUp() { |
| 380 // Must call EnableTerminationOnOutOfMemory() because that is called from |
| 381 // chrome's main function and therefore hasn't been called yet. |
| 382 EnableTerminationOnOutOfMemory(); |
| 383 } |
| 384 |
| 385 void* value_; |
| 386 size_t test_size_; |
| 387 }; |
| 388 |
| 389 TEST_F(OutOfMemoryTest, New) { |
| 390 ASSERT_DEATH(value_ = new char[test_size_], ""); |
| 391 } |
| 392 |
| 393 TEST_F(OutOfMemoryTest, Malloc) { |
| 394 ASSERT_DEATH(value_ = malloc(test_size_), ""); |
| 395 } |
| 396 |
| 397 TEST_F(OutOfMemoryTest, Realloc) { |
| 398 ASSERT_DEATH(value_ = realloc(NULL, test_size_), ""); |
| 399 } |
| 400 |
| 401 TEST_F(OutOfMemoryTest, Calloc) { |
| 402 ASSERT_DEATH(value_ = calloc(1024, test_size_ / 1024L), ""); |
| 403 } |
| 404 |
| 405 TEST_F(OutOfMemoryTest, Valloc) { |
| 406 ASSERT_DEATH(value_ = valloc(test_size_), ""); |
| 407 } |
| 408 |
| 409 TEST_F(OutOfMemoryTest, Pvalloc) { |
| 410 ASSERT_DEATH(value_ = pvalloc(test_size_), ""); |
| 411 } |
| 412 |
| 413 TEST_F(OutOfMemoryTest, Memalign) { |
| 414 ASSERT_DEATH(value_ = memalign(4, test_size_), ""); |
| 415 } |
| 416 |
| 417 TEST_F(OutOfMemoryTest, Posix_memalign) { |
| 418 ASSERT_DEATH(posix_memalign(&value_, 8, test_size_), ""); |
| 419 } |
| 420 |
| 421 extern "C" { |
| 422 |
| 423 void* __libc_malloc(size_t size); |
| 424 void* __libc_realloc(void* ptr, size_t size); |
| 425 void* __libc_calloc(size_t nmemb, size_t size); |
| 426 void* __libc_valloc(size_t size); |
| 427 void* __libc_pvalloc(size_t size); |
| 428 void* __libc_memalign(size_t alignment, size_t size); |
| 429 |
| 430 } // extern "C" |
| 431 |
| 432 TEST_F(OutOfMemoryTest, __libc_malloc) { |
| 433 ASSERT_DEATH(value_ = __libc_malloc(test_size_), ""); |
| 434 } |
| 435 |
| 436 TEST_F(OutOfMemoryTest, __libc_realloc) { |
| 437 ASSERT_DEATH(value_ = __libc_realloc(NULL, test_size_), ""); |
| 438 } |
| 439 |
| 440 TEST_F(OutOfMemoryTest, __libc_calloc) { |
| 441 ASSERT_DEATH(value_ = __libc_calloc(1024, test_size_ / 1024L), ""); |
| 442 } |
| 443 |
| 444 TEST_F(OutOfMemoryTest, __libc_valloc) { |
| 445 ASSERT_DEATH(value_ = __libc_valloc(test_size_), ""); |
| 446 } |
| 447 |
| 448 TEST_F(OutOfMemoryTest, __libc_pvalloc) { |
| 449 ASSERT_DEATH(value_ = __libc_pvalloc(test_size_), ""); |
| 450 } |
| 451 |
| 452 TEST_F(OutOfMemoryTest, __libc_memalign) { |
| 453 ASSERT_DEATH(value_ = __libc_memalign(4, test_size_), ""); |
| 454 } |
| 455 |
| 456 #endif // defined(OS_LINUX) |
| 457 |
364 } // namespace base | 458 } // namespace base |
OLD | NEW |