From 5f6e1f0fe74bc01878d80531a91c39df9dfaa62a Mon Sep 17 00:00:00 2001 From: "ivan.penkov@gmail.com" Date: Mon, 2 Jul 2012 22:55:57 +0000 Subject: Fixing various compiler warnings and applying minor tweaks to allow running of the mojority of breakpad unittests in Google. http://breakpad.appspot.com/399002/ git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@978 4c0a9323-5329-0410-9bdc-e9ce6186880e --- .../minidump_writer/linux_core_dumper_unittest.cc | 3 +- .../linux_dumper_unittest_helper.cc | 3 +- .../linux_ptrace_dumper_unittest.cc | 23 ++------ .../minidump_writer/minidump_writer_unittest.cc | 42 ++++++-------- .../minidump_writer_unittest_utils.cc | 66 ++++++++++++++++++++++ .../minidump_writer_unittest_utils.h | 49 ++++++++++++++++ 6 files changed, 141 insertions(+), 45 deletions(-) create mode 100644 src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc create mode 100644 src/client/linux/minidump_writer/minidump_writer_unittest_utils.h (limited to 'src/client/linux') diff --git a/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc b/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc index e7af11d4..d04ef3e1 100644 --- a/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc +++ b/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc @@ -83,11 +83,10 @@ TEST(LinuxCoreDumperTest, VerifyDumpWithMultipleThreads) { return; } - pid_t pid = getpid(); const string core_file = crash_generator.GetCoreFilePath(); const string procfs_path = crash_generator.GetDirectoryOfProcFilesCopy(); LinuxCoreDumper dumper(child_pid, core_file.c_str(), procfs_path.c_str()); - dumper.Init(); + EXPECT_TRUE(dumper.Init()); EXPECT_TRUE(dumper.IsPostMortem()); diff --git a/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc b/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc index 418e7e67..df4ecece 100644 --- a/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc +++ b/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc @@ -38,6 +38,7 @@ #include #include +#include "processor/scoped_ptr.h" #include "third_party/lss/linux_syscall_support.h" #if defined(__ARM_EABI__) @@ -77,7 +78,7 @@ int main(int argc, char *argv[]) { fprintf(stderr, "ERROR: number of threads is 0"); return 1; } - pthread_t threads[num_threads]; + google_breakpad::scoped_array threads(new pthread_t[num_threads]); pthread_attr_t thread_attributes; pthread_attr_init(&thread_attributes); pthread_attr_setdetachstate(&thread_attributes, PTHREAD_CREATE_DETACHED); diff --git a/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc b/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc index 5e2b431c..6fabfd84 100644 --- a/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc +++ b/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc @@ -33,11 +33,13 @@ // This file was renamed from linux_dumper_unittest.cc and modified due // to LinuxDumper being splitted into two classes. +#include #include #include #include #include #include +#include #include #include #include @@ -47,6 +49,7 @@ #include "breakpad_googletest_includes.h" #include "client/linux/minidump_writer/linux_ptrace_dumper.h" +#include "client/linux/minidump_writer/minidump_writer_unittest_utils.h" #include "common/linux/eintr_wrapper.h" #include "common/linux/file_id.h" #include "common/linux/safe_readlink.h" @@ -59,23 +62,6 @@ namespace { typedef testing::Test LinuxPtraceDumperTest; -string GetHelperBinary() { - // Locate helper binary next to the current binary. - char self_path[PATH_MAX]; - if (!SafeReadLink("/proc/self/exe", self_path)) { - return ""; - } - string helper_path(self_path); - size_t pos = helper_path.rfind('/'); - if (pos == string::npos) { - return ""; - } - helper_path.erase(pos + 1); - helper_path += "linux_dumper_unittest_helper"; - - return helper_path; -} - } // namespace TEST(LinuxPtraceDumperTest, Setup) { @@ -134,7 +120,8 @@ TEST(LinuxPtraceDumperTest, MergedMappings) { const size_t kPageSize = sysconf(_SC_PAGESIZE); const size_t kMappingSize = 3 * kPageSize; int fd = open(helper_path.c_str(), O_RDONLY); - ASSERT_NE(-1, fd); + ASSERT_NE(-1, fd) << "Failed to open file: " << helper_path + << ", Error: " << strerror(errno); char* mapping = reinterpret_cast(mmap(NULL, kMappingSize, diff --git a/src/client/linux/minidump_writer/minidump_writer_unittest.cc b/src/client/linux/minidump_writer/minidump_writer_unittest.cc index b751f50a..4dbbbe86 100644 --- a/src/client/linux/minidump_writer/minidump_writer_unittest.cc +++ b/src/client/linux/minidump_writer/minidump_writer_unittest.cc @@ -40,12 +40,14 @@ #include "client/linux/handler/exception_handler.h" #include "client/linux/minidump_writer/linux_dumper.h" #include "client/linux/minidump_writer/minidump_writer.h" +#include "client/linux/minidump_writer/minidump_writer_unittest_utils.h" #include "common/linux/eintr_wrapper.h" #include "common/linux/file_id.h" #include "common/linux/safe_readlink.h" #include "common/tests/auto_tempdir.h" #include "common/using_std_string.h" #include "google_breakpad/processor/minidump.h" +#include "processor/scoped_ptr.h" using namespace google_breakpad; @@ -94,7 +96,7 @@ TEST(MinidumpWriterTest, MappingInfo) { // These are defined here so the parent can use them to check the // data from the minidump afterwards. - const u_int32_t kMemorySize = sysconf(_SC_PAGESIZE); + const u_int32_t memory_size = sysconf(_SC_PAGESIZE); const char* kMemoryName = "a fake module"; const u_int8_t kModuleGUID[sizeof(MDGUID)] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, @@ -117,7 +119,7 @@ TEST(MinidumpWriterTest, MappingInfo) { // Get some memory. char* memory = reinterpret_cast(mmap(NULL, - kMemorySize, + memory_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, @@ -145,7 +147,7 @@ TEST(MinidumpWriterTest, MappingInfo) { // Add information about the mapped memory. MappingInfo info; info.start_addr = kMemoryAddress; - info.size = kMemorySize; + info.size = memory_size; info.offset = 0; strcpy(info.name, kMemoryName); @@ -170,7 +172,7 @@ TEST(MinidumpWriterTest, MappingInfo) { ASSERT_TRUE(module); EXPECT_EQ(kMemoryAddress, module->base_address()); - EXPECT_EQ(kMemorySize, module->size()); + EXPECT_EQ(memory_size, module->size()); EXPECT_EQ(kMemoryName, module->code_file()); EXPECT_EQ(module_identifier, module->debug_identifier()); @@ -186,7 +188,7 @@ TEST(MinidumpWriterTest, MappingInfoContained) { // These are defined here so the parent can use them to check the // data from the minidump afterwards. - const u_int32_t kMemorySize = sysconf(_SC_PAGESIZE); + const u_int32_t memory_size = sysconf(_SC_PAGESIZE); const char* kMemoryName = "a fake module"; const u_int8_t kModuleGUID[sizeof(MDGUID)] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, @@ -213,14 +215,14 @@ TEST(MinidumpWriterTest, MappingInfoContained) { ASSERT_NE(-1, fd); unlink(tempfile.c_str()); // fill with zeros - char buffer[kMemorySize]; - memset(buffer, 0, kMemorySize); - ASSERT_EQ(kMemorySize, write(fd, buffer, kMemorySize)); + google_breakpad::scoped_array buffer(new char[memory_size]); + memset(buffer.get(), 0, memory_size); + ASSERT_EQ(memory_size, write(fd, buffer.get(), memory_size)); lseek(fd, 0, SEEK_SET); char* memory = reinterpret_cast(mmap(NULL, - kMemorySize, + memory_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, @@ -248,8 +250,8 @@ TEST(MinidumpWriterTest, MappingInfoContained) { // Add information about the mapped memory. Report it as being larger than // it actually is. MappingInfo info; - info.start_addr = kMemoryAddress - kMemorySize; - info.size = kMemorySize * 3; + info.start_addr = kMemoryAddress - memory_size; + info.size = memory_size * 3; info.offset = 0; strcpy(info.name, kMemoryName); @@ -287,20 +289,11 @@ TEST(MinidumpWriterTest, DeletedBinary) { char kNumberOfThreadsArgument[2]; sprintf(kNumberOfThreadsArgument, "%d", kNumberOfThreadsInHelperProgram); - // Locate helper binary next to the current binary. - char self_path[PATH_MAX]; - if (!SafeReadLink("/proc/self/exe", self_path)) { - FAIL() << "readlink failed"; + string helper_path(GetHelperBinary()); + if (helper_path.empty()) { + FAIL() << "Couldn't find helper binary"; exit(1); } - string helper_path(self_path); - size_t pos = helper_path.rfind('/'); - if (pos == string::npos) { - FAIL() << "no trailing slash in path: " << helper_path; - exit(1); - } - helper_path.erase(pos + 1); - helper_path += "linux_dumper_unittest_helper"; // Copy binary to a temp file. AutoTempDir temp_dir; @@ -308,7 +301,7 @@ TEST(MinidumpWriterTest, DeletedBinary) { char cmdline[2 * PATH_MAX]; sprintf(cmdline, "/bin/cp \"%s\" \"%s\"", helper_path.c_str(), binpath.c_str()); - ASSERT_EQ(0, system(cmdline)); + ASSERT_EQ(0, system(cmdline)) << "Failed to execute: " << cmdline; ASSERT_EQ(0, chmod(binpath.c_str(), 0755)); int fds[2]; @@ -381,6 +374,7 @@ TEST(MinidumpWriterTest, DeletedBinary) { kGUIDStringSize); string module_identifier(identifier_string); // Strip out dashes + size_t pos; while ((pos = module_identifier.find('-')) != string::npos) { module_identifier.erase(pos, 1); } diff --git a/src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc b/src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc new file mode 100644 index 00000000..9f46fa65 --- /dev/null +++ b/src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc @@ -0,0 +1,66 @@ +// Copyright (c) 2011 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. + +// minidump_writer_unittest_utils.cc: +// Shared routines used by unittests under client/linux/minidump_writer. + +#include +#include + +#include "client/linux/minidump_writer/minidump_writer_unittest_utils.h" +#include "common/linux/safe_readlink.h" +#include "common/using_std_string.h" + +namespace google_breakpad { + +string GetHelperBinary() { + string helper_path; + char *bindir = getenv("bindir"); + if (bindir) { + helper_path = string(bindir) + "/"; + } else { + // Locate helper binary next to the current binary. + char self_path[PATH_MAX]; + if (!SafeReadLink("/proc/self/exe", self_path)) { + return ""; + } + helper_path = string(self_path); + size_t pos = helper_path.rfind('/'); + if (pos == string::npos) { + return ""; + } + helper_path.erase(pos + 1); + } + + helper_path += "linux_dumper_unittest_helper"; + + return helper_path; +} + +} // namespace google_breakpad diff --git a/src/client/linux/minidump_writer/minidump_writer_unittest_utils.h b/src/client/linux/minidump_writer/minidump_writer_unittest_utils.h new file mode 100644 index 00000000..f16cc086 --- /dev/null +++ b/src/client/linux/minidump_writer/minidump_writer_unittest_utils.h @@ -0,0 +1,49 @@ +// Copyright (c) 2012, 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. + +// minidump_writer_unittest_utils.h: +// Shared routines used by unittests under client/linux/minidump_writer. + +#ifndef CLIENT_LINUX_MINIDUMP_WRITER_MINIDUMP_WRITER_UNITTEST_UTILS_H_ +#define CLIENT_LINUX_MINIDUMP_WRITER_MINIDUMP_WRITER_UNITTEST_UTILS_H_ + +#include + +#include "common/using_std_string.h" + +namespace google_breakpad { + +// Returns the full path to linux_dumper_unittest_helper. The full path is +// discovered either by using the environment variable "bindir" or by using +// the location of the main module of the currently running process. +string GetHelperBinary(); + +} // namespace google_breakpad + +#endif // CLIENT_LINUX_MINIDUMP_WRITER_MINIDUMP_WRITER_UNITTEST_UTILS_H_ -- cgit v1.2.1