diff options
Diffstat (limited to 'src/processor/network_source_line_resolver_server_unittest.cc')
-rw-r--r-- | src/processor/network_source_line_resolver_server_unittest.cc | 195 |
1 files changed, 0 insertions, 195 deletions
diff --git a/src/processor/network_source_line_resolver_server_unittest.cc b/src/processor/network_source_line_resolver_server_unittest.cc deleted file mode 100644 index 0e84536c..00000000 --- a/src/processor/network_source_line_resolver_server_unittest.cc +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright (c) 2010, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Full system test for NetworkSourceLineResolver / NetworkSourceLineServer. -// Forks a background process to run a NetworkSourceLineServer, then -// instantiates a MinidumpProcessor with a NetworkSourceLineResolver to -// connect to the background server and process a minidump. - -#include <string> - -#include <signal.h> -#include <sys/wait.h> -#include <unistd.h> - -#include "breakpad_googletest_includes.h" -#include "google_breakpad/processor/basic_source_line_resolver.h" -#include "google_breakpad/processor/call_stack.h" -#include "google_breakpad/processor/minidump_processor.h" -#include "google_breakpad/processor/process_state.h" -#include "google_breakpad/processor/network_source_line_resolver.h" -#include "processor/simple_symbol_supplier.h" -#include "processor/network_source_line_server.h" -#include "processor/simple_symbol_supplier.h" -#include "processor/udp_network.h" - -namespace { - -using std::string; -using google_breakpad::BasicSourceLineResolver; -using google_breakpad::CallStack; -using google_breakpad::MinidumpProcessor; -using google_breakpad::NetworkSourceLineResolver; -using google_breakpad::NetworkSourceLineServer; -using google_breakpad::ProcessState; -using google_breakpad::SimpleSymbolSupplier; -using google_breakpad::UDPNetwork; - -static const char *kSystemInfoOS = "Windows NT"; -static const char *kSystemInfoOSShort = "windows"; -static const char *kSystemInfoOSVersion = "5.1.2600 Service Pack 2"; -static const char *kSystemInfoCPU = "x86"; -static const char *kSystemInfoCPUInfo = - "GenuineIntel family 6 model 13 stepping 8"; - -bool exitProcess = false; - -void signal_handler(int signal) { - if (signal == SIGINT) - exitProcess = true; -} - -void RunSourceLineServer(int fd) { - // Set a signal handler so the parent process - // can signal this process to end. - signal(SIGINT, signal_handler); - - BasicSourceLineResolver resolver; - SimpleSymbolSupplier supplier(string(getenv("srcdir") ? - getenv("srcdir") : ".") + - "/src/processor/testdata/symbols/"); - UDPNetwork net("localhost", - 0, // pick a free port - true); // IPv4 only - - NetworkSourceLineServer server(&supplier, &resolver, &net, - 0); // no source line limit - unsigned short port = -1; - bool initialized = server.Initialize(); - if (initialized) - port = net.port(); - - // send port number back to parent - ssize_t written = write(fd, &port, sizeof(port)); - close(fd); - - if (!initialized || written != sizeof(port)) - return; - - while (!exitProcess) { - server.RunOnce(100); - } -} - -TEST(NetworkSourceLineResolverServer, SystemTest) { - int fds[2]; - ASSERT_EQ(0, pipe(fds)); - // Fork a background process to run the server. - pid_t pid = fork(); - if (pid == 0) { - close(fds[0]); - RunSourceLineServer(fds[1]); - exit(0); - } - ASSERT_NE(-1, pid); - // Wait for the background process to return info about the port. - close(fds[1]); - unsigned short port; - ssize_t nbytes = read(fds[0], &port, sizeof(port)); - ASSERT_EQ(sizeof(port), nbytes); - ASSERT_NE(-1, port); - - NetworkSourceLineResolver resolver("localhost", port, - 5000); // wait at most 5 seconds for reply - MinidumpProcessor processor(&resolver, &resolver); - // this is all copied from minidump_processor_unittest.cc - string minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/minidump2.dmp"; - - ProcessState state; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); - EXPECT_EQ(state.system_info()->os, kSystemInfoOS); - EXPECT_EQ(state.system_info()->os_short, kSystemInfoOSShort); - EXPECT_EQ(state.system_info()->os_version, kSystemInfoOSVersion); - EXPECT_EQ(state.system_info()->cpu, kSystemInfoCPU); - EXPECT_EQ(state.system_info()->cpu_info, kSystemInfoCPUInfo); - ASSERT_TRUE(state.crashed()); - EXPECT_EQ(state.crash_reason(), "EXCEPTION_ACCESS_VIOLATION_WRITE"); - EXPECT_EQ(state.crash_address(), 0x45U); - ASSERT_EQ(state.threads()->size(), size_t(1)); - ASSERT_EQ(state.requesting_thread(), 0); - - CallStack *stack = state.threads()->at(0); - ASSERT_TRUE(stack); - ASSERT_EQ(stack->frames()->size(), 4U); - - // Can now only set non-empty/zero values for function_name, source_file_name - // and source line on certain platforms (ie. windows), so those are untested. - ASSERT_TRUE(stack->frames()->at(0)->module); - EXPECT_EQ(stack->frames()->at(0)->module->base_address(), 0x400000U); - EXPECT_EQ(stack->frames()->at(0)->module->code_file(), "c:\\test_app.exe"); - - ASSERT_TRUE(stack->frames()->at(1)->module); - EXPECT_EQ(stack->frames()->at(1)->module->base_address(), 0x400000U); - EXPECT_EQ(stack->frames()->at(1)->module->code_file(), "c:\\test_app.exe"); - - // This comes from the CRT - ASSERT_TRUE(stack->frames()->at(2)->module); - EXPECT_EQ(stack->frames()->at(2)->module->base_address(), 0x400000U); - EXPECT_EQ(stack->frames()->at(2)->module->code_file(), "c:\\test_app.exe"); - - // OS frame, kernel32.dll - ASSERT_TRUE(stack->frames()->at(3)->module); - EXPECT_EQ(stack->frames()->at(3)->module->base_address(), 0x7c800000U); - EXPECT_EQ(stack->frames()->at(3)->module->code_file(), - "C:\\WINDOWS\\system32\\kernel32.dll"); - - ASSERT_EQ(state.modules()->module_count(), 13U); - ASSERT_TRUE(state.modules()->GetMainModule()); - EXPECT_EQ(state.modules()->GetMainModule()->code_file(), "c:\\test_app.exe"); - EXPECT_FALSE(state.modules()->GetModuleForAddress(0)); - EXPECT_EQ(state.modules()->GetMainModule(), - state.modules()->GetModuleForAddress(0x400000)); - EXPECT_EQ(state.modules()->GetModuleForAddress(0x7c801234)->debug_file(), - "kernel32.pdb"); - EXPECT_EQ(state.modules()->GetModuleForAddress(0x77d43210)->version(), - "5.1.2600.2622"); - - // Kill background process - kill(pid, SIGINT); - ASSERT_EQ(pid, waitpid(pid, NULL, 0)); -} - -} - -int main(int argc, char *argv[]) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} |