minidump_processor_unittest.cc revision e5dc60822e5938fea2ae892ccddb906641ba174e
17daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// Copyright (c) 2006, Google Inc. 27daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// All rights reserved. 3cce3492afc263be86236600d41dca40be7224ee7bryner// 47daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// Redistribution and use in source and binary forms, with or without 57daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// modification, are permitted provided that the following conditions are 67daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// met: 7cce3492afc263be86236600d41dca40be7224ee7bryner// 87daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// * Redistributions of source code must retain the above copyright 97daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// notice, this list of conditions and the following disclaimer. 107daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// * Redistributions in binary form must reproduce the above 117daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// copyright notice, this list of conditions and the following disclaimer 127daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// in the documentation and/or other materials provided with the 137daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// distribution. 147daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// * Neither the name of Google Inc. nor the names of its 157daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// contributors may be used to endorse or promote products derived from 167daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// this software without specific prior written permission. 17cce3492afc263be86236600d41dca40be7224ee7bryner// 187daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 197daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 207daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 217daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 227daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 237daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 247daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 257daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 267daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 277daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 287daf246e4baf0837e25429668cc23e92b6afe3b3mmentovai// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29cce3492afc263be86236600d41dca40be7224ee7bryner 30cce3492afc263be86236600d41dca40be7224ee7bryner// Unit test for MinidumpProcessor. Uses a pre-generated minidump and 31cce3492afc263be86236600d41dca40be7224ee7bryner// corresponding symbol file, and checks the stack frames for correctness. 32cce3492afc263be86236600d41dca40be7224ee7bryner 3397d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai#include <cstdlib> 34cce3492afc263be86236600d41dca40be7224ee7bryner#include <string> 35e5dc60822e5938fea2ae892ccddb906641ba174emmentovai#include "google_breakpad/processor/basic_source_line_resolver.h" 36e5dc60822e5938fea2ae892ccddb906641ba174emmentovai#include "google_breakpad/processor/call_stack.h" 37e5dc60822e5938fea2ae892ccddb906641ba174emmentovai#include "google_breakpad/processor/code_module.h" 38e5dc60822e5938fea2ae892ccddb906641ba174emmentovai#include "google_breakpad/processor/code_modules.h" 39e5dc60822e5938fea2ae892ccddb906641ba174emmentovai#include "google_breakpad/processor/minidump_processor.h" 40e5dc60822e5938fea2ae892ccddb906641ba174emmentovai#include "google_breakpad/processor/process_state.h" 41e5dc60822e5938fea2ae892ccddb906641ba174emmentovai#include "google_breakpad/processor/stack_frame.h" 42e5dc60822e5938fea2ae892ccddb906641ba174emmentovai#include "google_breakpad/processor/symbol_supplier.h" 432466d8e993a800a17e00deda2f3a27e0505140e1mmentovai#include "processor/scoped_ptr.h" 44cce3492afc263be86236600d41dca40be7224ee7bryner 458647dde8cc03ef16b565dccc75574ee5f0d9cf72mmentovainamespace { 468647dde8cc03ef16b565dccc75574ee5f0d9cf72mmentovai 47cce3492afc263be86236600d41dca40be7224ee7brynerusing std::string; 48e5dc60822e5938fea2ae892ccddb906641ba174emmentovaiusing google_breakpad::BasicSourceLineResolver; 49e5dc60822e5938fea2ae892ccddb906641ba174emmentovaiusing google_breakpad::CallStack; 50e5dc60822e5938fea2ae892ccddb906641ba174emmentovaiusing google_breakpad::CodeModule; 51e5dc60822e5938fea2ae892ccddb906641ba174emmentovaiusing google_breakpad::MinidumpProcessor; 52e5dc60822e5938fea2ae892ccddb906641ba174emmentovaiusing google_breakpad::ProcessState; 53e5dc60822e5938fea2ae892ccddb906641ba174emmentovaiusing google_breakpad::scoped_ptr; 54e5dc60822e5938fea2ae892ccddb906641ba174emmentovaiusing google_breakpad::SymbolSupplier; 55e5dc60822e5938fea2ae892ccddb906641ba174emmentovaiusing google_breakpad::SystemInfo; 5697d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai 5797d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovaistatic const char *kSystemInfoOS = "Windows NT"; 5897d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovaistatic const char *kSystemInfoOSShort = "windows"; 5997d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovaistatic const char *kSystemInfoOSVersion = "5.1.2600 Service Pack 2"; 6097d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovaistatic const char *kSystemInfoCPU = "x86"; 6197d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovaistatic const char *kSystemInfoCPUInfo = 6297d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai "GenuineIntel family 6 model 13 stepping 8"; 63cce3492afc263be86236600d41dca40be7224ee7bryner 64cce3492afc263be86236600d41dca40be7224ee7bryner#define ASSERT_TRUE(cond) \ 65cce3492afc263be86236600d41dca40be7224ee7bryner if (!(cond)) { \ 66cce3492afc263be86236600d41dca40be7224ee7bryner fprintf(stderr, "FAILED: %s at %s:%d\n", #cond, __FILE__, __LINE__); \ 67cce3492afc263be86236600d41dca40be7224ee7bryner return false; \ 68cce3492afc263be86236600d41dca40be7224ee7bryner } 69cce3492afc263be86236600d41dca40be7224ee7bryner 70db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai#define ASSERT_FALSE(cond) ASSERT_TRUE(!(cond)) 71db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai 72cce3492afc263be86236600d41dca40be7224ee7bryner#define ASSERT_EQ(e1, e2) ASSERT_TRUE((e1) == (e2)) 73cce3492afc263be86236600d41dca40be7224ee7bryner 7497d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai// Use ASSERT_*_ABORT in functions that can't return a boolean. 7597d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai#define ASSERT_TRUE_ABORT(cond) \ 7697d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai if (!(cond)) { \ 7797d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai fprintf(stderr, "FAILED: %s at %s:%d\n", #cond, __FILE__, __LINE__); \ 7897d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai abort(); \ 7997d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai } 8097d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai 8197d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai#define ASSERT_EQ_ABORT(e1, e2) ASSERT_TRUE_ABORT((e1) == (e2)) 8297d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai 83cce3492afc263be86236600d41dca40be7224ee7brynerclass TestSymbolSupplier : public SymbolSupplier { 84cce3492afc263be86236600d41dca40be7224ee7bryner public: 85f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner TestSymbolSupplier() : interrupt_(false) {} 86f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner 87f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner virtual SymbolResult GetSymbolFile(const CodeModule *module, 8897d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai const SystemInfo *system_info, 89f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner string *symbol_file); 90f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner 91f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner // When set to true, causes the SymbolSupplier to return INTERRUPT 92f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner void set_interrupt(bool interrupt) { interrupt_ = interrupt; } 93f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner 94f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner private: 95f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner bool interrupt_; 96cce3492afc263be86236600d41dca40be7224ee7bryner}; 97cce3492afc263be86236600d41dca40be7224ee7bryner 98f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3brynerSymbolSupplier::SymbolResult TestSymbolSupplier::GetSymbolFile( 9997d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai const CodeModule *module, 10097d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai const SystemInfo *system_info, 10197d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai string *symbol_file) { 10297d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai ASSERT_TRUE_ABORT(module); 10397d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai ASSERT_TRUE_ABORT(system_info); 10497d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai ASSERT_EQ_ABORT(system_info->cpu, kSystemInfoCPU); 10597d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai ASSERT_EQ_ABORT(system_info->cpu_info, kSystemInfoCPUInfo); 10697d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai ASSERT_EQ_ABORT(system_info->os, kSystemInfoOS); 10797d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai ASSERT_EQ_ABORT(system_info->os_short, kSystemInfoOSShort); 10897d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai ASSERT_EQ_ABORT(system_info->os_version, kSystemInfoOSVersion); 10997d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai 110f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner if (interrupt_) { 111f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner return INTERRUPT; 112f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner } 113f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner 114e5dc60822e5938fea2ae892ccddb906641ba174emmentovai if (module && module->code_file() == "c:\\test_app.exe") { 115f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner *symbol_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + 116f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner "/src/processor/testdata/symbols/test_app.pdb/" + 117f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner module->debug_identifier() + 118f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner "/test_app.sym"; 119f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner return FOUND; 120cce3492afc263be86236600d41dca40be7224ee7bryner } 121cce3492afc263be86236600d41dca40be7224ee7bryner 122f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner return NOT_FOUND; 123cce3492afc263be86236600d41dca40be7224ee7bryner} 124cce3492afc263be86236600d41dca40be7224ee7bryner 125cce3492afc263be86236600d41dca40be7224ee7brynerstatic bool RunTests() { 126cce3492afc263be86236600d41dca40be7224ee7bryner TestSymbolSupplier supplier; 127fd38d48e6d5e56cb66b0fa0f7e25f840a83dac5cbryner BasicSourceLineResolver resolver; 128fd38d48e6d5e56cb66b0fa0f7e25f840a83dac5cbryner MinidumpProcessor processor(&supplier, &resolver); 129cce3492afc263be86236600d41dca40be7224ee7bryner 130cce3492afc263be86236600d41dca40be7224ee7bryner string minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + 131cce3492afc263be86236600d41dca40be7224ee7bryner "/src/processor/testdata/minidump2.dmp"; 132cce3492afc263be86236600d41dca40be7224ee7bryner 133f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ProcessState state; 134f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ASSERT_EQ(processor.Process(minidump_file, &state), 135f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner MinidumpProcessor::PROCESS_OK); 13697d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai ASSERT_EQ(state.system_info()->os, kSystemInfoOS); 13797d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai ASSERT_EQ(state.system_info()->os_short, kSystemInfoOSShort); 13897d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai ASSERT_EQ(state.system_info()->os_version, kSystemInfoOSVersion); 13997d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai ASSERT_EQ(state.system_info()->cpu, kSystemInfoCPU); 14097d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai ASSERT_EQ(state.system_info()->cpu_info, kSystemInfoCPUInfo); 141f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ASSERT_TRUE(state.crashed()); 142f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ASSERT_EQ(state.crash_reason(), "EXCEPTION_ACCESS_VIOLATION"); 143f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ASSERT_EQ(state.crash_address(), 0x45); 144f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ASSERT_EQ(state.threads()->size(), 1); 145f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ASSERT_EQ(state.requesting_thread(), 0); 146f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner 147f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner CallStack *stack = state.threads()->at(0); 148e5468b8a49ac6a4e5acb9d4003838e3e323f85e4mmentovai ASSERT_TRUE(stack); 149d119a921ea611dc38cfcb7411759ddf2c688603fmmentovai ASSERT_EQ(stack->frames()->size(), 4); 150cce3492afc263be86236600d41dca40be7224ee7bryner 151db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai ASSERT_TRUE(stack->frames()->at(0)->module); 152db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai ASSERT_EQ(stack->frames()->at(0)->module->base_address(), 0x400000); 153e5dc60822e5938fea2ae892ccddb906641ba174emmentovai ASSERT_EQ(stack->frames()->at(0)->module->code_file(), "c:\\test_app.exe"); 15497d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai ASSERT_EQ(stack->frames()->at(0)->function_name, 15597d392dc4b60f0099cd7ad8c8a5f06581a532392mmentovai "`anonymous namespace'::CrashFunction"); 156d119a921ea611dc38cfcb7411759ddf2c688603fmmentovai ASSERT_EQ(stack->frames()->at(0)->source_file_name, "c:\\test_app.cc"); 157e5dc60822e5938fea2ae892ccddb906641ba174emmentovai ASSERT_EQ(stack->frames()->at(0)->source_line, 58); 158cce3492afc263be86236600d41dca40be7224ee7bryner 159db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai ASSERT_TRUE(stack->frames()->at(1)->module); 160db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai ASSERT_EQ(stack->frames()->at(1)->module->base_address(), 0x400000); 161e5dc60822e5938fea2ae892ccddb906641ba174emmentovai ASSERT_EQ(stack->frames()->at(1)->module->code_file(), "c:\\test_app.exe"); 162d119a921ea611dc38cfcb7411759ddf2c688603fmmentovai ASSERT_EQ(stack->frames()->at(1)->function_name, "main"); 163d119a921ea611dc38cfcb7411759ddf2c688603fmmentovai ASSERT_EQ(stack->frames()->at(1)->source_file_name, "c:\\test_app.cc"); 164e5dc60822e5938fea2ae892ccddb906641ba174emmentovai ASSERT_EQ(stack->frames()->at(1)->source_line, 65); 165cce3492afc263be86236600d41dca40be7224ee7bryner 166cce3492afc263be86236600d41dca40be7224ee7bryner // This comes from the CRT 167db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai ASSERT_TRUE(stack->frames()->at(2)->module); 168db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai ASSERT_EQ(stack->frames()->at(2)->module->base_address(), 0x400000); 169e5dc60822e5938fea2ae892ccddb906641ba174emmentovai ASSERT_EQ(stack->frames()->at(2)->module->code_file(), "c:\\test_app.exe"); 170d119a921ea611dc38cfcb7411759ddf2c688603fmmentovai ASSERT_EQ(stack->frames()->at(2)->function_name, "__tmainCRTStartup"); 171d119a921ea611dc38cfcb7411759ddf2c688603fmmentovai ASSERT_EQ(stack->frames()->at(2)->source_file_name, 172e5dc60822e5938fea2ae892ccddb906641ba174emmentovai "f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c"); 173e5dc60822e5938fea2ae892ccddb906641ba174emmentovai ASSERT_EQ(stack->frames()->at(2)->source_line, 327); 174cce3492afc263be86236600d41dca40be7224ee7bryner 175cce3492afc263be86236600d41dca40be7224ee7bryner // No debug info available for kernel32.dll 176db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai ASSERT_TRUE(stack->frames()->at(3)->module); 177db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai ASSERT_EQ(stack->frames()->at(3)->module->base_address(), 0x7c800000); 178db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai ASSERT_EQ(stack->frames()->at(3)->module->code_file(), 179cce3492afc263be86236600d41dca40be7224ee7bryner "C:\\WINDOWS\\system32\\kernel32.dll"); 180d119a921ea611dc38cfcb7411759ddf2c688603fmmentovai ASSERT_TRUE(stack->frames()->at(3)->function_name.empty()); 181d119a921ea611dc38cfcb7411759ddf2c688603fmmentovai ASSERT_TRUE(stack->frames()->at(3)->source_file_name.empty()); 182d119a921ea611dc38cfcb7411759ddf2c688603fmmentovai ASSERT_EQ(stack->frames()->at(3)->source_line, 0); 183cce3492afc263be86236600d41dca40be7224ee7bryner 184f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ASSERT_EQ(state.modules()->module_count(), 13); 185f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ASSERT_TRUE(state.modules()->GetMainModule()); 186e5dc60822e5938fea2ae892ccddb906641ba174emmentovai ASSERT_EQ(state.modules()->GetMainModule()->code_file(), "c:\\test_app.exe"); 187f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ASSERT_FALSE(state.modules()->GetModuleForAddress(0)); 188f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ASSERT_EQ(state.modules()->GetMainModule(), 189f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner state.modules()->GetModuleForAddress(0x400000)); 190f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ASSERT_EQ(state.modules()->GetModuleForAddress(0x7c801234)->debug_file(), 191db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai "kernel32.pdb"); 192f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ASSERT_EQ(state.modules()->GetModuleForAddress(0x77d43210)->version(), 193db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai "5.1.2600.2622"); 194db3342a10ec30902aa9018b80e1d9a40bd01c487mmentovai 195f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner // Test that the symbol supplier can interrupt processing 196f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner state.Clear(); 197f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner supplier.set_interrupt(true); 198f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner ASSERT_EQ(processor.Process(minidump_file, &state), 199f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner MinidumpProcessor::PROCESS_INTERRUPTED); 200f33b8d2d07a057fdd667c2e0db629ba7cbc37cc3bryner 201cce3492afc263be86236600d41dca40be7224ee7bryner return true; 202cce3492afc263be86236600d41dca40be7224ee7bryner} 203cce3492afc263be86236600d41dca40be7224ee7bryner 2048647dde8cc03ef16b565dccc75574ee5f0d9cf72mmentovai} // namespace 2058647dde8cc03ef16b565dccc75574ee5f0d9cf72mmentovai 206cce3492afc263be86236600d41dca40be7224ee7brynerint main(int argc, char *argv[]) { 207cce3492afc263be86236600d41dca40be7224ee7bryner if (!RunTests()) { 208cce3492afc263be86236600d41dca40be7224ee7bryner return 1; 209cce3492afc263be86236600d41dca40be7224ee7bryner } 210cce3492afc263be86236600d41dca40be7224ee7bryner 211cce3492afc263be86236600d41dca40be7224ee7bryner return 0; 212cce3492afc263be86236600d41dca40be7224ee7bryner} 213