|  | // Copyright 2014 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include <signal.h> | 
|  | #include <stdlib.h> | 
|  | #include <sys/types.h> | 
|  | #include <sys/wait.h> | 
|  | #include <unistd.h> | 
|  |  | 
|  | #include "base/logging.h" | 
|  | #include "base/posix/eintr_wrapper.h" | 
|  | #include "sandbox/linux/tests/unit_tests.h" | 
|  |  | 
|  | namespace sandbox { | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | // Let's not use any of the "magic" values used internally in unit_tests.cc, | 
|  | // such as kExpectedValue. | 
|  | const int kExpectedExitCode = 100; | 
|  |  | 
|  | SANDBOX_DEATH_TEST(UnitTests, | 
|  | DeathExitCode, | 
|  | DEATH_EXIT_CODE(kExpectedExitCode)) { | 
|  | _exit(kExpectedExitCode); | 
|  | } | 
|  |  | 
|  | const int kExpectedSignalNumber = SIGKILL; | 
|  |  | 
|  | SANDBOX_DEATH_TEST(UnitTests, | 
|  | DeathBySignal, | 
|  | DEATH_BY_SIGNAL(kExpectedSignalNumber)) { | 
|  | raise(kExpectedSignalNumber); | 
|  | } | 
|  |  | 
|  | SANDBOX_DEATH_TEST(UnitTests, | 
|  | DeathWithMessage, | 
|  | DEATH_MESSAGE("Hello")) { | 
|  | LOG(ERROR) << "Hello"; | 
|  | _exit(1); | 
|  | } | 
|  |  | 
|  | SANDBOX_DEATH_TEST(UnitTests, | 
|  | SEGVDeathWithMessage, | 
|  | DEATH_SEGV_MESSAGE("Hello")) { | 
|  | LOG(ERROR) << "Hello"; | 
|  | while (1) { | 
|  | volatile char* addr = reinterpret_cast<volatile char*>(NULL); | 
|  | *addr = '\0'; | 
|  | } | 
|  |  | 
|  | _exit(2); | 
|  | } | 
|  |  | 
|  | SANDBOX_TEST_ALLOW_NOISE(UnitTests, NoisyTest) { | 
|  | LOG(ERROR) << "The cow says moo!"; | 
|  | } | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | }  // namespace sandbox |