| Index: src/client/linux/microdump_writer/microdump_writer_unittest.cc
|
| diff --git a/src/client/linux/microdump_writer/microdump_writer_unittest.cc b/src/client/linux/microdump_writer/microdump_writer_unittest.cc
|
| index 035e73c1aa83c98da02bdf654ec3c0fa00dfc8a4..58a73118894c2d8fe62d601075f1f1085bc86d09 100644
|
| --- a/src/client/linux/microdump_writer/microdump_writer_unittest.cc
|
| +++ b/src/client/linux/microdump_writer/microdump_writer_unittest.cc
|
| @@ -37,6 +37,7 @@
|
|
|
| #include "breakpad_googletest_includes.h"
|
| #include "client/linux/handler/exception_handler.h"
|
| +#include "client/linux/handler/microdump_extra_info.h"
|
| #include "client/linux/microdump_writer/microdump_writer.h"
|
| #include "common/linux/eintr_wrapper.h"
|
| #include "common/linux/ignore_ret.h"
|
| @@ -50,10 +51,20 @@ namespace {
|
|
|
| typedef testing::Test MicrodumpWriterTest;
|
|
|
| -void CrashAndGetMicrodump(
|
| - const MappingList& mappings,
|
| +MicrodumpExtraInfo MakeMicrodumpExtraInfo(
|
| const char* build_fingerprint,
|
| const char* product_info,
|
| + const char* gpu_fingerprint) {
|
| + MicrodumpExtraInfo info;
|
| + info.build_fingerprint = build_fingerprint;
|
| + info.product_info = product_info;
|
| + info.gpu_fingerprint = gpu_fingerprint;
|
| + return info;
|
| +}
|
| +
|
| +void CrashAndGetMicrodump(
|
| + const MappingList& mappings,
|
| + const MicrodumpExtraInfo& microdump_extra_info,
|
| scoped_array<char>* buf) {
|
| int fds[2];
|
| ASSERT_NE(-1, pipe(fds));
|
| @@ -85,7 +96,7 @@ void CrashAndGetMicrodump(
|
| ASSERT_NE(-1, dup2(err_fd, STDERR_FILENO));
|
|
|
| ASSERT_TRUE(WriteMicrodump(child, &context, sizeof(context), mappings,
|
| - build_fingerprint, product_info));
|
| + microdump_extra_info));
|
|
|
| // Revert stderr back to the console.
|
| dup2(save_err, STDERR_FILENO);
|
| @@ -107,12 +118,12 @@ void CrashAndGetMicrodump(
|
| buf->get(), "-----END BREAKPAD MICRODUMP-----"));
|
| }
|
|
|
| -void CheckMicrodumpContents(const string µdum_content,
|
| - const string &expected_fingerprint,
|
| - const string &expected_product_info) {
|
| - std::istringstream iss(microdum_content);
|
| +void CheckMicrodumpContents(const string& microdump_content,
|
| + const MicrodumpExtraInfo& expected_info) {
|
| + std::istringstream iss(microdump_content);
|
| bool did_find_os_info = false;
|
| bool did_find_product_info = false;
|
| + bool did_find_gpu_info = false;
|
| for (string line; std::getline(iss, line);) {
|
| if (line.find("O ") == 0) {
|
| std::istringstream os_info_tokens(line);
|
| @@ -130,15 +141,33 @@ void CheckMicrodumpContents(const string µdum_content,
|
|
|
| // Check that the build fingerprint is in the right place.
|
| os_info_tokens >> token;
|
| - ASSERT_EQ(expected_fingerprint, token);
|
| + if (expected_info.build_fingerprint)
|
| + ASSERT_EQ(expected_info.build_fingerprint, token);
|
| did_find_os_info = true;
|
| } else if (line.find("V ") == 0) {
|
| - ASSERT_EQ("V " + expected_product_info, line);
|
| + if (expected_info.product_info)
|
| + ASSERT_EQ(string("V ") + expected_info.product_info, line);
|
| did_find_product_info = true;
|
| + } else if (line.find("G ") == 0) {
|
| + if (expected_info.gpu_fingerprint)
|
| + ASSERT_EQ(string("G ") + expected_info.gpu_fingerprint, line);
|
| + did_find_gpu_info = true;
|
| }
|
| }
|
| ASSERT_TRUE(did_find_os_info);
|
| ASSERT_TRUE(did_find_product_info);
|
| + ASSERT_TRUE(did_find_gpu_info);
|
| +}
|
| +
|
| +void CheckMicrodumpContents(const string& microdump_content,
|
| + const string& expected_fingerprint,
|
| + const string& expected_product_info,
|
| + const string& expected_gpu_fingerprint) {
|
| + CheckMicrodumpContents(
|
| + microdump_content,
|
| + MakeMicrodumpExtraInfo(expected_fingerprint.c_str(),
|
| + expected_product_info.c_str(),
|
| + expected_gpu_fingerprint.c_str()));
|
| }
|
|
|
| TEST(MicrodumpWriterTest, BasicWithMappings) {
|
| @@ -163,7 +192,7 @@ TEST(MicrodumpWriterTest, BasicWithMappings) {
|
| mappings.push_back(mapping);
|
|
|
| scoped_array<char> buf;
|
| - CrashAndGetMicrodump(mappings, NULL, NULL, &buf);
|
| + CrashAndGetMicrodump(mappings, MicrodumpExtraInfo(), &buf);
|
|
|
| #ifdef __LP64__
|
| ASSERT_NE(static_cast<char*>(0), strstr(
|
| @@ -187,19 +216,42 @@ TEST(MicrodumpWriterTest, BuildFingerprintAndProductInfo) {
|
| const char kProductInfo[] = "MockProduct:42.0.2311.99";
|
| const char kBuildFingerprint[] =
|
| "aosp/occam/mako:5.1.1/LMY47W/12345678:userdegbug/dev-keys";
|
| + const char kGPUFingerprint[] =
|
| + "Qualcomm;Adreno (TM) 330;OpenGL ES 3.0 V@104.0 AU@ (GIT@Id3510ff6dc)";
|
| + const MicrodumpExtraInfo kMicrodumpExtraInfo(
|
| + MakeMicrodumpExtraInfo(kBuildFingerprint, kProductInfo, kGPUFingerprint));
|
| scoped_array<char> buf;
|
| MappingList no_mappings;
|
|
|
| - CrashAndGetMicrodump(no_mappings, kBuildFingerprint, kProductInfo, &buf);
|
| - CheckMicrodumpContents(string(buf.get()), kBuildFingerprint, kProductInfo);
|
| + CrashAndGetMicrodump(no_mappings, kMicrodumpExtraInfo, &buf);
|
| + CheckMicrodumpContents(string(buf.get()), kMicrodumpExtraInfo);
|
| }
|
|
|
| TEST(MicrodumpWriterTest, NoProductInfo) {
|
| const char kBuildFingerprint[] = "foobar";
|
| + const char kGPUFingerprint[] = "bazqux";
|
| scoped_array<char> buf;
|
| MappingList no_mappings;
|
|
|
| - CrashAndGetMicrodump(no_mappings, kBuildFingerprint, NULL, &buf);
|
| - CheckMicrodumpContents(string(buf.get()), kBuildFingerprint, "UNKNOWN:0.0.0.0");
|
| + const MicrodumpExtraInfo kMicrodumpExtraInfoNoProductInfo(
|
| + MakeMicrodumpExtraInfo(kBuildFingerprint, NULL, kGPUFingerprint));
|
| +
|
| + CrashAndGetMicrodump(no_mappings, kMicrodumpExtraInfoNoProductInfo, &buf);
|
| + CheckMicrodumpContents(string(buf.get()), kBuildFingerprint,
|
| + "UNKNOWN:0.0.0.0", kGPUFingerprint);
|
| +}
|
| +
|
| +TEST(MicrodumpWriterTest, NoGPUInfo) {
|
| + const char kProductInfo[] = "bazqux";
|
| + const char kBuildFingerprint[] = "foobar";
|
| + scoped_array<char> buf;
|
| + MappingList no_mappings;
|
| +
|
| + const MicrodumpExtraInfo kMicrodumpExtraInfoNoGPUInfo(
|
| + MakeMicrodumpExtraInfo(kBuildFingerprint, kProductInfo, NULL));
|
| +
|
| + CrashAndGetMicrodump(no_mappings, kMicrodumpExtraInfoNoGPUInfo, &buf);
|
| + CheckMicrodumpContents(string(buf.get()), kBuildFingerprint,
|
| + kProductInfo, "UNKNOWN");
|
| }
|
| } // namespace
|
|
|