diff options
Diffstat (limited to 'src/client/mac/tests')
-rw-r--r-- | src/client/mac/tests/auto_tempdir.h | 72 | ||||
-rw-r--r-- | src/client/mac/tests/crash_generation_server_test.cc | 52 | ||||
-rw-r--r-- | src/client/mac/tests/exception_handler_test.cc | 28 | ||||
-rw-r--r-- | src/client/mac/tests/minidump_generator_test.cc | 14 |
4 files changed, 48 insertions, 118 deletions
diff --git a/src/client/mac/tests/auto_tempdir.h b/src/client/mac/tests/auto_tempdir.h deleted file mode 100644 index b6473a5c..00000000 --- a/src/client/mac/tests/auto_tempdir.h +++ /dev/null @@ -1,72 +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. - -// Utility class for creating a temporary directory for unit tests -// that is deleted in the destructor. -#ifndef GOOGLE_BREAKPAD_CLIENT_MAC_TESTS_AUTO_TEMPDIR -#define GOOGLE_BREAKPAD_CLIENT_MAC_TESTS_AUTO_TEMPDIR - -#include <dirent.h> -#include <sys/types.h> - -#include <string> - -namespace google_breakpad { - -class AutoTempDir { - public: - AutoTempDir() { - char tempDir[16] = "/tmp/XXXXXXXXXX"; - mkdtemp(tempDir); - path = tempDir; - } - - ~AutoTempDir() { - // First remove any files in the dir - DIR* dir = opendir(path.c_str()); - if (!dir) - return; - - dirent* entry; - while ((entry = readdir(dir)) != NULL) { - if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) - continue; - std::string entryPath = path + "/" + entry->d_name; - unlink(entryPath.c_str()); - } - closedir(dir); - rmdir(path.c_str()); - } - - std::string path; -}; - -} // namespace google_breakpad - -#endif // GOOGLE_BREAKPAD_CLIENT_MAC_TESTS_AUTO_TEMPDIR diff --git a/src/client/mac/tests/crash_generation_server_test.cc b/src/client/mac/tests/crash_generation_server_test.cc index fdb9cdd1..f71624df 100644 --- a/src/client/mac/tests/crash_generation_server_test.cc +++ b/src/client/mac/tests/crash_generation_server_test.cc @@ -43,8 +43,8 @@ #include "client/mac/crash_generation/crash_generation_client.h" #include "client/mac/crash_generation/crash_generation_server.h" #include "client/mac/handler/exception_handler.h" -#include "client/mac/tests/auto_tempdir.h" #include "client/mac/tests/spawn_child_process.h" +#include "common/tests/auto_tempdir.h" #include "google_breakpad/processor/minidump.h" namespace google_breakpad { @@ -111,12 +111,12 @@ TEST_F(CrashGenerationServerTest, testStartStopServer) { // Test without actually dumping TEST_F(CrashGenerationServerTest, testRequestDumpNoDump) { CrashGenerationServer server(mach_port_name, - NULL, // dump callback - NULL, // dump context - NULL, // exit callback - NULL, // exit context - false, // don't generate dumps - temp_dir.path); // dump path + NULL, // dump callback + NULL, // dump context + NULL, // exit callback + NULL, // exit context + false, // don't generate dumps + temp_dir.path()); // dump path ASSERT_TRUE(server.Start()); pid_t pid = fork(); @@ -133,7 +133,7 @@ TEST_F(CrashGenerationServerTest, testRequestDumpNoDump) { EXPECT_EQ(0, WEXITSTATUS(ret)); EXPECT_TRUE(server.Stop()); // check that no minidump was written - string pattern = temp_dir.path + "/*"; + string pattern = temp_dir.path() + "/*"; glob_t dirContents; ret = glob(pattern.c_str(), GLOB_NOSORT, NULL, &dirContents); EXPECT_EQ(GLOB_NOMATCH, ret); @@ -161,12 +161,12 @@ void *RequestDump(void *context) { // Test that actually writing a minidump works TEST_F(CrashGenerationServerTest, testRequestDump) { CrashGenerationServer server(mach_port_name, - dumpCallback, // dump callback - this, // dump context - NULL, // exit callback - NULL, // exit context - true, // generate dumps - temp_dir.path); // dump path + dumpCallback, // dump callback + this, // dump context + NULL, // exit callback + NULL, // exit context + true, // generate dumps + temp_dir.path()); // dump path ASSERT_TRUE(server.Start()); pid_t pid = fork(); @@ -209,12 +209,12 @@ static void Crasher() { // the parent. TEST_F(CrashGenerationServerTest, testChildProcessCrash) { CrashGenerationServer server(mach_port_name, - dumpCallback, // dump callback - this, // dump context - NULL, // exit callback - NULL, // exit context - true, // generate dumps - temp_dir.path); // dump path + dumpCallback, // dump callback + this, // dump context + NULL, // exit callback + NULL, // exit context + true, // generate dumps + temp_dir.path()); // dump path ASSERT_TRUE(server.Start()); pid_t pid = fork(); @@ -270,12 +270,12 @@ TEST_F(CrashGenerationServerTest, testChildProcessCrash) { // produces a valid minidump. TEST_F(CrashGenerationServerTest, testChildProcessCrashCrossArchitecture) { CrashGenerationServer server(mach_port_name, - dumpCallback, // dump callback - this, // dump context - NULL, // exit callback - NULL, // exit context - true, // generate dumps - temp_dir.path); // dump path + dumpCallback, // dump callback + this, // dump context + NULL, // exit callback + NULL, // exit context + true, // generate dumps + temp_dir.path()); // dump path ASSERT_TRUE(server.Start()); // Spawn a child process diff --git a/src/client/mac/tests/exception_handler_test.cc b/src/client/mac/tests/exception_handler_test.cc index b1b74ef1..02ff0f56 100644 --- a/src/client/mac/tests/exception_handler_test.cc +++ b/src/client/mac/tests/exception_handler_test.cc @@ -36,8 +36,8 @@ #include "breakpad_googletest_includes.h" #include "client/mac/handler/exception_handler.h" -#include "client/mac/tests/auto_tempdir.h" #include "common/mac/MachIPC.h" +#include "common/tests/auto_tempdir.h" #include "google_breakpad/processor/minidump.h" namespace google_breakpad { @@ -103,7 +103,7 @@ TEST_F(ExceptionHandlerTest, InProcess) { if (pid == 0) { // In the child process. close(fds[0]); - ExceptionHandler eh(tempDir.path, NULL, MDCallback, &fds[1], true, NULL); + ExceptionHandler eh(tempDir.path(), NULL, MDCallback, &fds[1], true, NULL); // crash SoonToCrash(); // not reached @@ -141,7 +141,8 @@ static bool DumpNameMDCallback(const char *dump_dir, const char *file_name, } TEST_F(ExceptionHandlerTest, WriteMinidump) { - ExceptionHandler eh(tempDir.path, NULL, DumpNameMDCallback, this, true, NULL); + ExceptionHandler eh(tempDir.path(), NULL, DumpNameMDCallback, this, true, + NULL); ASSERT_TRUE(eh.WriteMinidump()); // Ensure that minidump file exists and is > 0 bytes. @@ -159,7 +160,8 @@ TEST_F(ExceptionHandlerTest, WriteMinidump) { } TEST_F(ExceptionHandlerTest, WriteMinidumpWithException) { - ExceptionHandler eh(tempDir.path, NULL, DumpNameMDCallback, this, true, NULL); + ExceptionHandler eh(tempDir.path(), NULL, DumpNameMDCallback, this, true, + NULL); ASSERT_TRUE(eh.WriteMinidump(true)); // Ensure that minidump file exists and is > 0 bytes. @@ -227,10 +229,10 @@ TEST_F(ExceptionHandlerTest, DumpChildProcess) { // Write a minidump of the child process. bool result = ExceptionHandler::WriteMinidumpForChild(child_task, - child_thread, - tempDir.path, - DumpNameMDCallback, - this); + child_thread, + tempDir.path(), + DumpNameMDCallback, + this); ASSERT_EQ(true, result); // Ensure that minidump file exists and is > 0 bytes. @@ -267,7 +269,7 @@ TEST_F(ExceptionHandlerTest, InstructionPointerMemory) { pid_t pid = fork(); if (pid == 0) { close(fds[0]); - ExceptionHandler eh(tempDir.path, NULL, MDCallback, &fds[1], true, NULL); + ExceptionHandler eh(tempDir.path(), NULL, MDCallback, &fds[1], true, NULL); // Get some executable memory. char* memory = reinterpret_cast<char*>(mmap(NULL, @@ -379,7 +381,7 @@ TEST_F(ExceptionHandlerTest, InstructionPointerMemoryMinBound) { pid_t pid = fork(); if (pid == 0) { close(fds[0]); - ExceptionHandler eh(tempDir.path, NULL, MDCallback, &fds[1], true, NULL); + ExceptionHandler eh(tempDir.path(), NULL, MDCallback, &fds[1], true, NULL); // Get some executable memory. char* memory = reinterpret_cast<char*>(mmap(NULL, @@ -491,7 +493,7 @@ TEST_F(ExceptionHandlerTest, InstructionPointerMemoryMaxBound) { pid_t pid = fork(); if (pid == 0) { close(fds[0]); - ExceptionHandler eh(tempDir.path, NULL, MDCallback, &fds[1], true, NULL); + ExceptionHandler eh(tempDir.path(), NULL, MDCallback, &fds[1], true, NULL); // Get some executable memory. char* memory = reinterpret_cast<char*>(mmap(NULL, @@ -594,7 +596,7 @@ TEST_F(ExceptionHandlerTest, InstructionPointerMemoryNullPointer) { pid_t pid = fork(); if (pid == 0) { close(fds[0]); - ExceptionHandler eh(tempDir.path, NULL, MDCallback, &fds[1], true, NULL); + ExceptionHandler eh(tempDir.path(), NULL, MDCallback, &fds[1], true, NULL); // Try calling a NULL pointer. typedef void (*void_function)(void); void_function memory_function = @@ -651,7 +653,7 @@ TEST_F(ExceptionHandlerTest, MemoryListMultipleThreads) { pid_t pid = fork(); if (pid == 0) { close(fds[0]); - ExceptionHandler eh(tempDir.path, NULL, MDCallback, &fds[1], true, NULL); + ExceptionHandler eh(tempDir.path(), NULL, MDCallback, &fds[1], true, NULL); // Run an extra thread so >2 memory regions will be written. pthread_t junk_thread; diff --git a/src/client/mac/tests/minidump_generator_test.cc b/src/client/mac/tests/minidump_generator_test.cc index f9cf75af..b3f8f0a1 100644 --- a/src/client/mac/tests/minidump_generator_test.cc +++ b/src/client/mac/tests/minidump_generator_test.cc @@ -41,9 +41,9 @@ #include "breakpad_googletest_includes.h" #include "client/mac/handler/minidump_generator.h" -#include "client/mac/tests/auto_tempdir.h" #include "client/mac/tests/spawn_child_process.h" #include "common/mac/MachIPC.h" +#include "common/tests/auto_tempdir.h" #include "google_breakpad/processor/minidump.h" namespace google_breakpad { @@ -88,8 +88,8 @@ static void *Junk(void* data) { TEST_F(MinidumpGeneratorTest, InProcess) { MinidumpGenerator generator; - string dump_filename = MinidumpGenerator::UniqueNameInDirectory(tempDir.path, - NULL); + string dump_filename = + MinidumpGenerator::UniqueNameInDirectory(tempDir.path(), NULL); // Run an extra thread since MinidumpGenerator assumes there // are 2 or more threads. @@ -179,8 +179,8 @@ TEST_F(MinidumpGeneratorTest, OutOfProcess) { // Write a minidump of the child process. MinidumpGenerator generator(child_task, MACH_PORT_NULL); - string dump_filename = MinidumpGenerator::UniqueNameInDirectory(tempDir.path, - NULL); + string dump_filename = + MinidumpGenerator::UniqueNameInDirectory(tempDir.path(), NULL); ASSERT_TRUE(generator.Write(dump_filename.c_str())); // Ensure that minidump file exists and is > 0 bytes. @@ -258,8 +258,8 @@ TEST_F(MinidumpGeneratorTest, CrossArchitectureDump) { // Write a minidump of the child process. MinidumpGenerator generator(child_task, MACH_PORT_NULL); - string dump_filename = MinidumpGenerator::UniqueNameInDirectory(tempDir.path, - NULL); + string dump_filename = + MinidumpGenerator::UniqueNameInDirectory(tempDir.path(), NULL); ASSERT_TRUE(generator.Write(dump_filename.c_str())); // Ensure that minidump file exists and is > 0 bytes. |