| 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 1fa6f1ff0a27ecb9c2202086173dc74fe7c5b4be..035e73c1aa83c98da02bdf654ec3c0fa00dfc8a4 100644
|
| --- a/src/client/linux/microdump_writer/microdump_writer_unittest.cc
|
| +++ b/src/client/linux/microdump_writer/microdump_writer_unittest.cc
|
| @@ -27,10 +27,12 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| +#include <ctype.h>
|
| #include <sys/syscall.h>
|
| #include <sys/types.h>
|
| #include <unistd.h>
|
|
|
| +#include <sstream>
|
| #include <string>
|
|
|
| #include "breakpad_googletest_includes.h"
|
| @@ -103,7 +105,40 @@ void CrashAndGetMicrodump(
|
| buf->get(), "-----BEGIN BREAKPAD MICRODUMP-----"));
|
| ASSERT_NE(static_cast<char*>(0), strstr(
|
| 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);
|
| + bool did_find_os_info = false;
|
| + bool did_find_product_info = false;
|
| + for (string line; std::getline(iss, line);) {
|
| + if (line.find("O ") == 0) {
|
| + std::istringstream os_info_tokens(line);
|
| + string token;
|
| + os_info_tokens.ignore(2); // Ignore the "O " preamble.
|
| + // Check the OS descriptor char (L=Linux, A=Android).
|
| + os_info_tokens >> token;
|
| + ASSERT_TRUE(token == "L" || token == "A");
|
| +
|
| + os_info_tokens >> token; // HW architecture.
|
| + os_info_tokens >> token; // Number of cpus.
|
| + for (size_t i = 0; i < token.size(); ++i)
|
| + ASSERT_TRUE(isxdigit(token[i]));
|
| + os_info_tokens >> token; // SW architecture.
|
| +
|
| + // Check that the build fingerprint is in the right place.
|
| + os_info_tokens >> token;
|
| + ASSERT_EQ(expected_fingerprint, token);
|
| + did_find_os_info = true;
|
| + } else if (line.find("V ") == 0) {
|
| + ASSERT_EQ("V " + expected_product_info, line);
|
| + did_find_product_info = true;
|
| + }
|
| + }
|
| + ASSERT_TRUE(did_find_os_info);
|
| + ASSERT_TRUE(did_find_product_info);
|
| }
|
|
|
| TEST(MicrodumpWriterTest, BasicWithMappings) {
|
| @@ -156,9 +191,15 @@ TEST(MicrodumpWriterTest, BuildFingerprintAndProductInfo) {
|
| MappingList no_mappings;
|
|
|
| CrashAndGetMicrodump(no_mappings, kBuildFingerprint, kProductInfo, &buf);
|
| -
|
| - ASSERT_NE(static_cast<char*>(0), strstr(buf.get(), kBuildFingerprint));
|
| - ASSERT_NE(static_cast<char*>(0), strstr(buf.get(), kProductInfo));
|
| + CheckMicrodumpContents(string(buf.get()), kBuildFingerprint, kProductInfo);
|
| }
|
|
|
| +TEST(MicrodumpWriterTest, NoProductInfo) {
|
| + const char kBuildFingerprint[] = "foobar";
|
| + scoped_array<char> buf;
|
| + MappingList no_mappings;
|
| +
|
| + CrashAndGetMicrodump(no_mappings, kBuildFingerprint, NULL, &buf);
|
| + CheckMicrodumpContents(string(buf.get()), kBuildFingerprint, "UNKNOWN:0.0.0.0");
|
| +}
|
| } // namespace
|
|
|