1 //===-- BreakpadRecordsTest.cpp ---------------------------------*- C++ -*-===// 2 // 3 // 4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5 // See https://llvm.org/LICENSE.txt for license information. 6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "Plugins/ObjectFile/Breakpad/BreakpadRecords.h" 11 #include "gtest/gtest.h" 12 13 using namespace lldb_private; 14 using namespace lldb_private::breakpad; 15 16 TEST(Record, classify) { 17 EXPECT_EQ(Record::Module, Record::classify("MODULE")); 18 EXPECT_EQ(Record::Info, Record::classify("INFO")); 19 EXPECT_EQ(Record::File, Record::classify("FILE")); 20 EXPECT_EQ(Record::Func, Record::classify("FUNC")); 21 EXPECT_EQ(Record::Public, Record::classify("PUBLIC")); 22 EXPECT_EQ(Record::Stack, Record::classify("STACK")); 23 24 // Any line which does not start with a known keyword will be classified as a 25 // line record, as those are the only ones that start without a keyword. 26 EXPECT_EQ(Record::Line, Record::classify("deadbeef")); 27 EXPECT_EQ(Record::Line, Record::classify("12")); 28 EXPECT_EQ(Record::Line, Record::classify("CODE_ID")); 29 } 30 31 TEST(ModuleRecord, parse) { 32 EXPECT_EQ(ModuleRecord(llvm::Triple::Linux, llvm::Triple::x86_64, 33 UUID::fromData("@ABCDEFGHIJKLMNO", 16)), 34 ModuleRecord::parse( 35 "MODULE Linux x86_64 434241404544474648494a4b4c4d4e4f0 a.out")); 36 37 EXPECT_EQ(llvm::None, ModuleRecord::parse("MODULE")); 38 EXPECT_EQ(llvm::None, ModuleRecord::parse("MODULE Linux")); 39 EXPECT_EQ(llvm::None, ModuleRecord::parse("MODULE Linux x86_64")); 40 EXPECT_EQ(llvm::None, 41 ModuleRecord::parse("MODULE Linux x86_64 deadbeefbaadf00d")); 42 } 43 44 TEST(InfoRecord, parse) { 45 EXPECT_EQ(InfoRecord(UUID::fromData("@ABCDEFGHIJKLMNO", 16)), 46 InfoRecord::parse("INFO CODE_ID 404142434445464748494a4b4c4d4e4f")); 47 EXPECT_EQ(InfoRecord(UUID()), InfoRecord::parse("INFO CODE_ID 47 a.exe")); 48 49 EXPECT_EQ(llvm::None, InfoRecord::parse("INFO")); 50 EXPECT_EQ(llvm::None, InfoRecord::parse("INFO CODE_ID")); 51 } 52 53 TEST(FuncRecord, parse) { 54 EXPECT_EQ(FuncRecord(true, 0x47, 0x7, 0x8, "foo"), 55 FuncRecord::parse("FUNC m 47 7 8 foo")); 56 EXPECT_EQ(FuncRecord(false, 0x47, 0x7, 0x8, "foo"), 57 FuncRecord::parse("FUNC 47 7 8 foo")); 58 59 EXPECT_EQ(llvm::None, FuncRecord::parse("PUBLIC 47 7 8 foo")); 60 EXPECT_EQ(llvm::None, FuncRecord::parse("FUNC 47 7 8")); 61 EXPECT_EQ(llvm::None, FuncRecord::parse("FUNC 47 7")); 62 EXPECT_EQ(llvm::None, FuncRecord::parse("FUNC 47")); 63 EXPECT_EQ(llvm::None, FuncRecord::parse("FUNC m")); 64 EXPECT_EQ(llvm::None, FuncRecord::parse("FUNC")); 65 } 66 67 TEST(PublicRecord, parse) { 68 EXPECT_EQ(PublicRecord(true, 0x47, 0x8, "foo"), 69 PublicRecord::parse("PUBLIC m 47 8 foo")); 70 EXPECT_EQ(PublicRecord(false, 0x47, 0x8, "foo"), 71 PublicRecord::parse("PUBLIC 47 8 foo")); 72 73 EXPECT_EQ(llvm::None, PublicRecord::parse("FUNC 47 8 foo")); 74 EXPECT_EQ(llvm::None, PublicRecord::parse("PUBLIC 47 8")); 75 EXPECT_EQ(llvm::None, PublicRecord::parse("PUBLIC 47")); 76 EXPECT_EQ(llvm::None, PublicRecord::parse("PUBLIC m")); 77 EXPECT_EQ(llvm::None, PublicRecord::parse("PUBLIC")); 78 } 79