123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file. 423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <signal.h> 623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <stdlib.h> 7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include <sys/types.h> 8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include <sys/wait.h> 9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include <unistd.h> 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 11a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/logging.h" 12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/posix/eintr_wrapper.h" 1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "sandbox/linux/tests/unit_tests.h" 1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace sandbox { 1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace { 1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Let's not use any of the "magic" values used internally in unit_tests.cc, 20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// such as kExpectedValue. 21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochconst int kExpectedExitCode = 100; 2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)SANDBOX_DEATH_TEST(UnitTests, 2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DeathExitCode, 2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DEATH_EXIT_CODE(kExpectedExitCode)) { 26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch _exit(kExpectedExitCode); 2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)const int kExpectedSignalNumber = SIGKILL; 3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)SANDBOX_DEATH_TEST(UnitTests, 3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DeathBySignal, 3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DEATH_BY_SIGNAL(kExpectedSignalNumber)) { 3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) raise(kExpectedSignalNumber); 3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)SANDBOX_DEATH_TEST(UnitTests, 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DeathWithMessage, 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DEATH_MESSAGE("Hello")) { 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LOG(ERROR) << "Hello"; 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) _exit(1); 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)SANDBOX_DEATH_TEST(UnitTests, 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SEGVDeathWithMessage, 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DEATH_SEGV_MESSAGE("Hello")) { 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LOG(ERROR) << "Hello"; 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) while (1) { 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) volatile char* addr = reinterpret_cast<volatile char*>(NULL); 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *addr = '\0'; 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) _exit(2); 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 56a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochSANDBOX_TEST_ALLOW_NOISE(UnitTests, NoisyTest) { 57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch LOG(ERROR) << "The cow says moo!"; 58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 6023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} // namespace 6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} // namespace sandbox 63