16c1a8039SMichał Górny #include "gmock/gmock.h"
26c1a8039SMichał Górny #include "gtest/gtest.h"
36c1a8039SMichał Górny #include <limits.h>
46c1a8039SMichał Górny
56c1a8039SMichał Górny #include "lldb/Utility/StringExtractorGDBRemote.h"
66c1a8039SMichał Górny #include "lldb/lldb-defines.h"
76c1a8039SMichał Górny
TEST(StringExtractorGDBRemoteTest,GetPidTid)86c1a8039SMichał Górny TEST(StringExtractorGDBRemoteTest, GetPidTid) {
96c1a8039SMichał Górny StringExtractorGDBRemote ex("");
10d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
116c1a8039SMichał Górny
126c1a8039SMichał Górny // invalid/short values
136c1a8039SMichał Górny
146c1a8039SMichał Górny ex.Reset("narf");
15d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
166c1a8039SMichał Górny
176c1a8039SMichał Górny ex.Reset(";1234");
18d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
196c1a8039SMichał Górny
206c1a8039SMichał Górny ex.Reset(".1234");
21d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
226c1a8039SMichał Górny
236c1a8039SMichał Górny ex.Reset("p");
24d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
256c1a8039SMichał Górny
266c1a8039SMichał Górny ex.Reset("pnarf");
27d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
286c1a8039SMichał Górny
296c1a8039SMichał Górny ex.Reset("p;1234");
30d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
316c1a8039SMichał Górny
326c1a8039SMichał Górny ex.Reset("p.1234");
33d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
346c1a8039SMichał Górny
356c1a8039SMichał Górny ex.Reset("p1234.");
36d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
376c1a8039SMichał Górny
38d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
396c1a8039SMichał Górny
406c1a8039SMichał Górny ex.Reset("p1234.;1234");
41d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
426c1a8039SMichał Górny
436c1a8039SMichał Górny ex.Reset("-2");
44d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
456c1a8039SMichał Górny
466c1a8039SMichał Górny ex.Reset("p1234.-2");
47d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
486c1a8039SMichał Górny
496c1a8039SMichał Górny ex.Reset("p-2");
50d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
516c1a8039SMichał Górny
526c1a8039SMichał Górny ex.Reset("p-2.1234");
53d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
546c1a8039SMichał Górny
556c1a8039SMichał Górny // overflow
566c1a8039SMichał Górny
576c1a8039SMichał Górny ex.Reset("p10000000000000000");
58d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
596c1a8039SMichał Górny
606c1a8039SMichał Górny ex.Reset("p10000000000000000.0");
61d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
626c1a8039SMichał Górny
636c1a8039SMichał Górny ex.Reset("10000000000000000");
64d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
656c1a8039SMichał Górny
666c1a8039SMichał Górny ex.Reset("p0.10000000000000000");
67d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
686c1a8039SMichał Górny
696c1a8039SMichał Górny ex.Reset("p10000000000000000.10000000000000000");
70d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(0), std::nullopt);
716c1a8039SMichał Górny
726c1a8039SMichał Górny // invalid: all processes but specific thread
736c1a8039SMichał Górny
746c1a8039SMichał Górny ex.Reset("p-1.0");
75d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(100), std::nullopt);
766c1a8039SMichał Górny
776c1a8039SMichał Górny ex.Reset("p-1.1234");
78d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(100), std::nullopt);
796c1a8039SMichał Górny
806c1a8039SMichał Górny ex.Reset("p-1.123456789ABCDEF0");
81d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(100), std::nullopt);
826c1a8039SMichał Górny
836c1a8039SMichał Górny // unsupported: pid/tid 0
846c1a8039SMichał Górny
856c1a8039SMichał Górny ex.Reset("0");
86d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(100), std::nullopt);
876c1a8039SMichał Górny
886c1a8039SMichał Górny ex.Reset("p0");
89d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(100), std::nullopt);
906c1a8039SMichał Górny
916c1a8039SMichał Górny ex.Reset("p0.0");
92d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(100), std::nullopt);
936c1a8039SMichał Górny
946c1a8039SMichał Górny ex.Reset("p0.-1");
95d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(100), std::nullopt);
966c1a8039SMichał Górny
976c1a8039SMichał Górny ex.Reset("p0.1234");
98d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(100), std::nullopt);
996c1a8039SMichał Górny
1006c1a8039SMichał Górny ex.Reset("p0.123456789ABCDEF0");
101d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(100), std::nullopt);
1026c1a8039SMichał Górny
1036c1a8039SMichał Górny ex.Reset("p1234.0");
104d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(100), std::nullopt);
1056c1a8039SMichał Górny
1066c1a8039SMichał Górny ex.Reset("p123456789ABCDEF0.0");
107d2a6114fSKazu Hirata EXPECT_EQ(ex.GetPidTid(100), std::nullopt);
1086c1a8039SMichał Górny
1096c1a8039SMichał Górny // pure thread id
1106c1a8039SMichał Górny
1116c1a8039SMichał Górny ex.Reset("-1");
112*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100),
1136c1a8039SMichał Górny ::testing::Pair(100, StringExtractorGDBRemote::AllThreads));
1146c1a8039SMichał Górny
1156c1a8039SMichał Górny ex.Reset("1234");
116*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100), ::testing::Pair(100, 0x1234ULL));
1176c1a8039SMichał Górny
1186c1a8039SMichał Górny ex.Reset("123456789ABCDEF0");
119*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100), ::testing::Pair(100, 0x123456789ABCDEF0ULL));
1206c1a8039SMichał Górny
1216c1a8039SMichał Górny // pure process id
1226c1a8039SMichał Górny
1236c1a8039SMichał Górny ex.Reset("p-1");
124*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100),
1256c1a8039SMichał Górny ::testing::Pair(StringExtractorGDBRemote::AllProcesses,
1266c1a8039SMichał Górny StringExtractorGDBRemote::AllThreads));
1276c1a8039SMichał Górny
1286c1a8039SMichał Górny ex.Reset("p1234");
129*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100),
1306c1a8039SMichał Górny ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));
1316c1a8039SMichał Górny
1326c1a8039SMichał Górny ex.Reset("p123456789ABCDEF0");
133*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100),
1346c1a8039SMichał Górny ::testing::Pair(0x123456789ABCDEF0ULL,
1356c1a8039SMichał Górny StringExtractorGDBRemote::AllThreads));
1366c1a8039SMichał Górny
1376c1a8039SMichał Górny ex.Reset("pFFFFFFFFFFFFFFFF");
138*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100),
1396c1a8039SMichał Górny ::testing::Pair(StringExtractorGDBRemote::AllProcesses,
1406c1a8039SMichał Górny StringExtractorGDBRemote::AllThreads));
1416c1a8039SMichał Górny
1426c1a8039SMichał Górny // combined thread id + process id
1436c1a8039SMichał Górny
1446c1a8039SMichał Górny ex.Reset("p-1.-1");
145*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100),
1466c1a8039SMichał Górny ::testing::Pair(StringExtractorGDBRemote::AllProcesses,
1476c1a8039SMichał Górny StringExtractorGDBRemote::AllThreads));
1486c1a8039SMichał Górny
1496c1a8039SMichał Górny ex.Reset("p1234.-1");
150*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100),
1516c1a8039SMichał Górny ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));
1526c1a8039SMichał Górny
1536c1a8039SMichał Górny ex.Reset("p1234.123456789ABCDEF0");
154*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100),
1556c1a8039SMichał Górny ::testing::Pair(0x1234ULL, 0x123456789ABCDEF0ULL));
1566c1a8039SMichał Górny
1576c1a8039SMichał Górny ex.Reset("p123456789ABCDEF0.-1");
158*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100),
1596c1a8039SMichał Górny ::testing::Pair(0x123456789ABCDEF0ULL,
1606c1a8039SMichał Górny StringExtractorGDBRemote::AllThreads));
1616c1a8039SMichał Górny
1626c1a8039SMichał Górny ex.Reset("p123456789ABCDEF0.1234");
163*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100),
1646c1a8039SMichał Górny ::testing::Pair(0x123456789ABCDEF0ULL, 0x1234ULL));
1656c1a8039SMichał Górny
1666c1a8039SMichał Górny ex.Reset("p123456789ABCDEF0.123456789ABCDEF0");
167*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100),
1686c1a8039SMichał Górny ::testing::Pair(0x123456789ABCDEF0ULL, 0x123456789ABCDEF0ULL));
1696c1a8039SMichał Górny
1706c1a8039SMichał Górny ex.Reset("p123456789ABCDEF0.123456789ABCDEF0");
171*f43886e7SFangrui Song EXPECT_THAT(*ex.GetPidTid(100),
1726c1a8039SMichał Górny ::testing::Pair(0x123456789ABCDEF0ULL, 0x123456789ABCDEF0ULL));
1736c1a8039SMichał Górny }
1746c1a8039SMichał Górny
TEST(StringExtractorGDBRemoteTest,GetPidTidMultipleValues)1756c1a8039SMichał Górny TEST(StringExtractorGDBRemoteTest, GetPidTidMultipleValues) {
1766c1a8039SMichał Górny StringExtractorGDBRemote ex("1234;p12;p1234.-1");
177*f43886e7SFangrui Song ASSERT_THAT(*ex.GetPidTid(100), ::testing::Pair(100, 0x1234ULL));
1786c1a8039SMichał Górny ASSERT_EQ(ex.GetChar(), ';');
179*f43886e7SFangrui Song ASSERT_THAT(*ex.GetPidTid(100),
1806c1a8039SMichał Górny ::testing::Pair(0x12ULL, StringExtractorGDBRemote::AllThreads));
1816c1a8039SMichał Górny ASSERT_EQ(ex.GetChar(), ';');
182*f43886e7SFangrui Song ASSERT_THAT(*ex.GetPidTid(100),
1836c1a8039SMichał Górny ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));
1846c1a8039SMichał Górny }
185