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