xref: /llvm-project/lldb/unittests/Utility/StringExtractorGDBRemoteTest.cpp (revision f43886e7ba5abf9ee8c4d3f0ffbd18eee724466f)
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