aboutsummaryrefslogtreecommitdiff
path: root/src/processor/minidump_processor_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/processor/minidump_processor_unittest.cc')
-rw-r--r--src/processor/minidump_processor_unittest.cc21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/processor/minidump_processor_unittest.cc b/src/processor/minidump_processor_unittest.cc
index ac0368d5..fcac48ff 100644
--- a/src/processor/minidump_processor_unittest.cc
+++ b/src/processor/minidump_processor_unittest.cc
@@ -36,6 +36,7 @@
#include <iostream>
#include <fstream>
#include <map>
+#include <utility>
#include "breakpad_googletest_includes.h"
#include "google_breakpad/processor/basic_source_line_resolver.h"
@@ -118,11 +119,14 @@ class TestSymbolSupplier : public SymbolSupplier {
string *symbol_file,
char **symbol_data);
+ virtual void FreeSymbolData(const CodeModule *module);
+
// When set to true, causes the SymbolSupplier to return INTERRUPT
void set_interrupt(bool interrupt) { interrupt_ = interrupt; }
private:
bool interrupt_;
+ map<string, char *> memory_buffers_;
};
SymbolSupplier::SymbolResult TestSymbolSupplier::GetSymbolFile(
@@ -181,13 +185,27 @@ SymbolSupplier::SymbolResult TestSymbolSupplier::GetCStringSymbolData(
&symbol_data_string);
if (s == FOUND) {
unsigned int size = symbol_data_string.size() + 1;
- *symbol_data = reinterpret_cast<char*>(operator new(size));
+ *symbol_data = new char[size];
+ if (*symbol_data == NULL) {
+ BPLOG(ERROR) << "Memory allocation failed for module: "
+ << module->code_file() << " size: " << size;
+ return INTERRUPT;
+ }
strcpy(*symbol_data, symbol_data_string.c_str());
+ memory_buffers_.insert(make_pair(module->code_file(), *symbol_data));
}
return s;
}
+void TestSymbolSupplier::FreeSymbolData(const CodeModule *module) {
+ map<string, char *>::iterator it = memory_buffers_.find(module->code_file());
+ if (it != memory_buffers_.end()) {
+ delete [] it->second;
+ memory_buffers_.erase(it);
+ }
+}
+
// A mock symbol supplier that always returns NOT_FOUND; one current
// use for testing the processor's caching of symbol lookups.
class MockSymbolSupplier : public SymbolSupplier {
@@ -204,6 +222,7 @@ class MockSymbolSupplier : public SymbolSupplier {
const SystemInfo*,
string*,
char**));
+ MOCK_METHOD1(FreeSymbolData, void(const CodeModule*));
};
class MinidumpProcessorTest : public ::testing::Test {