brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 5bf7440 Raw
185 lines · cpp
1#include "gmock/gmock.h"2#include "gtest/gtest.h"3#include <limits.h>4 5#include "lldb/Utility/StringExtractorGDBRemote.h"6#include "lldb/lldb-defines.h"7 8TEST(StringExtractorGDBRemoteTest, GetPidTid) {9  StringExtractorGDBRemote ex("");10  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);11 12  // invalid/short values13 14  ex.Reset("narf");15  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);16 17  ex.Reset(";1234");18  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);19 20  ex.Reset(".1234");21  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);22 23  ex.Reset("p");24  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);25 26  ex.Reset("pnarf");27  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);28 29  ex.Reset("p;1234");30  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);31 32  ex.Reset("p.1234");33  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);34 35  ex.Reset("p1234.");36  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);37 38  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);39 40  ex.Reset("p1234.;1234");41  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);42 43  ex.Reset("-2");44  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);45 46  ex.Reset("p1234.-2");47  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);48 49  ex.Reset("p-2");50  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);51 52  ex.Reset("p-2.1234");53  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);54 55  // overflow56 57  ex.Reset("p10000000000000000");58  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);59 60  ex.Reset("p10000000000000000.0");61  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);62 63  ex.Reset("10000000000000000");64  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);65 66  ex.Reset("p0.10000000000000000");67  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);68 69  ex.Reset("p10000000000000000.10000000000000000");70  EXPECT_EQ(ex.GetPidTid(0), std::nullopt);71 72  // invalid: all processes but specific thread73 74  ex.Reset("p-1.0");75  EXPECT_EQ(ex.GetPidTid(100), std::nullopt);76 77  ex.Reset("p-1.1234");78  EXPECT_EQ(ex.GetPidTid(100), std::nullopt);79 80  ex.Reset("p-1.123456789ABCDEF0");81  EXPECT_EQ(ex.GetPidTid(100), std::nullopt);82 83  // unsupported: pid/tid 084 85  ex.Reset("0");86  EXPECT_EQ(ex.GetPidTid(100), std::nullopt);87 88  ex.Reset("p0");89  EXPECT_EQ(ex.GetPidTid(100), std::nullopt);90 91  ex.Reset("p0.0");92  EXPECT_EQ(ex.GetPidTid(100), std::nullopt);93 94  ex.Reset("p0.-1");95  EXPECT_EQ(ex.GetPidTid(100), std::nullopt);96 97  ex.Reset("p0.1234");98  EXPECT_EQ(ex.GetPidTid(100), std::nullopt);99 100  ex.Reset("p0.123456789ABCDEF0");101  EXPECT_EQ(ex.GetPidTid(100), std::nullopt);102 103  ex.Reset("p1234.0");104  EXPECT_EQ(ex.GetPidTid(100), std::nullopt);105 106  ex.Reset("p123456789ABCDEF0.0");107  EXPECT_EQ(ex.GetPidTid(100), std::nullopt);108 109  // pure thread id110 111  ex.Reset("-1");112  EXPECT_THAT(*ex.GetPidTid(100),113              ::testing::Pair(100, StringExtractorGDBRemote::AllThreads));114 115  ex.Reset("1234");116  EXPECT_THAT(*ex.GetPidTid(100), ::testing::Pair(100, 0x1234ULL));117 118  ex.Reset("123456789ABCDEF0");119  EXPECT_THAT(*ex.GetPidTid(100), ::testing::Pair(100, 0x123456789ABCDEF0ULL));120 121  // pure process id122 123  ex.Reset("p-1");124  EXPECT_THAT(*ex.GetPidTid(100),125              ::testing::Pair(StringExtractorGDBRemote::AllProcesses,126                              StringExtractorGDBRemote::AllThreads));127 128  ex.Reset("p1234");129  EXPECT_THAT(*ex.GetPidTid(100),130              ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));131 132  ex.Reset("p123456789ABCDEF0");133  EXPECT_THAT(*ex.GetPidTid(100),134              ::testing::Pair(0x123456789ABCDEF0ULL,135                              StringExtractorGDBRemote::AllThreads));136 137  ex.Reset("pFFFFFFFFFFFFFFFF");138  EXPECT_THAT(*ex.GetPidTid(100),139              ::testing::Pair(StringExtractorGDBRemote::AllProcesses,140                              StringExtractorGDBRemote::AllThreads));141 142  // combined thread id + process id143 144  ex.Reset("p-1.-1");145  EXPECT_THAT(*ex.GetPidTid(100),146              ::testing::Pair(StringExtractorGDBRemote::AllProcesses,147                              StringExtractorGDBRemote::AllThreads));148 149  ex.Reset("p1234.-1");150  EXPECT_THAT(*ex.GetPidTid(100),151              ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));152 153  ex.Reset("p1234.123456789ABCDEF0");154  EXPECT_THAT(*ex.GetPidTid(100),155              ::testing::Pair(0x1234ULL, 0x123456789ABCDEF0ULL));156 157  ex.Reset("p123456789ABCDEF0.-1");158  EXPECT_THAT(*ex.GetPidTid(100),159              ::testing::Pair(0x123456789ABCDEF0ULL,160                              StringExtractorGDBRemote::AllThreads));161 162  ex.Reset("p123456789ABCDEF0.1234");163  EXPECT_THAT(*ex.GetPidTid(100),164              ::testing::Pair(0x123456789ABCDEF0ULL, 0x1234ULL));165 166  ex.Reset("p123456789ABCDEF0.123456789ABCDEF0");167  EXPECT_THAT(*ex.GetPidTid(100),168              ::testing::Pair(0x123456789ABCDEF0ULL, 0x123456789ABCDEF0ULL));169 170  ex.Reset("p123456789ABCDEF0.123456789ABCDEF0");171  EXPECT_THAT(*ex.GetPidTid(100),172              ::testing::Pair(0x123456789ABCDEF0ULL, 0x123456789ABCDEF0ULL));173}174 175TEST(StringExtractorGDBRemoteTest, GetPidTidMultipleValues) {176  StringExtractorGDBRemote ex("1234;p12;p1234.-1");177  ASSERT_THAT(*ex.GetPidTid(100), ::testing::Pair(100, 0x1234ULL));178  ASSERT_EQ(ex.GetChar(), ';');179  ASSERT_THAT(*ex.GetPidTid(100),180              ::testing::Pair(0x12ULL, StringExtractorGDBRemote::AllThreads));181  ASSERT_EQ(ex.GetChar(), ';');182  ASSERT_THAT(*ex.GetPidTid(100),183              ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));184}185