blob: 3ef299eac990686e33ab80cae4ec63df34833e2b [file] [log] [blame]
Zachary Turner77db4a82015-10-22 20:06:20 +00001import lldb_shared
2
Todd Fialaf76a8912014-08-26 17:19:10 +00003import gdbremote_testcase
4import lldbgdbserverutils
Todd Fialac540dd02014-08-26 18:21:02 +00005import sys
Todd Fialaf76a8912014-08-26 17:19:10 +00006
7from lldbtest import *
8
9class TestGdbRemoteProcessInfo(gdbremote_testcase.GdbRemoteTestCaseBase):
10
Vince Harron65f99162015-05-21 18:54:12 +000011 mydir = TestBase.compute_mydir(__file__)
12
Todd Fialaf76a8912014-08-26 17:19:10 +000013 def qProcessInfo_returns_running_process(self):
14 procs = self.prep_debug_monitor_and_inferior()
15 self.add_process_info_collection_packets()
16
17 # Run the stream
18 context = self.expect_gdbremote_sequence()
19 self.assertIsNotNone(context)
20
21 # Gather process info response
22 process_info = self.parse_process_info_response(context)
23 self.assertIsNotNone(process_info)
24
25 # Ensure the process id looks reasonable.
26 pid_text = process_info.get("pid")
27 self.assertIsNotNone(pid_text)
28 pid = int(pid_text, base=16)
29 self.assertNotEqual(0, pid)
30
31 # If possible, verify that the process is running.
32 self.assertTrue(lldbgdbserverutils.process_is_running(pid, True))
33
34 @debugserver_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000035 def test_qProcessInfo_returns_running_process_debugserver(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000036 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000037 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +000038 self.qProcessInfo_returns_running_process()
39
40 @llgs_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000041 def test_qProcessInfo_returns_running_process_llgs(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000042 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000043 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +000044 self.qProcessInfo_returns_running_process()
45
46 def attach_commandline_qProcessInfo_reports_correct_pid(self):
47 procs = self.prep_debug_monitor_and_inferior()
48 self.assertIsNotNone(procs)
49 self.add_process_info_collection_packets()
50
51 # Run the stream
52 context = self.expect_gdbremote_sequence()
53 self.assertIsNotNone(context)
54
55 # Gather process info response
56 process_info = self.parse_process_info_response(context)
57 self.assertIsNotNone(process_info)
58
59 # Ensure the process id matches what we expected.
60 pid_text = process_info.get('pid', None)
61 self.assertIsNotNone(pid_text)
62 reported_pid = int(pid_text, base=16)
63 self.assertEqual(reported_pid, procs["inferior"].pid)
64
65 @debugserver_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000066 def test_attach_commandline_qProcessInfo_reports_correct_pid_debugserver(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000067 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000068 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +000069 self.set_inferior_startup_attach()
70 self.attach_commandline_qProcessInfo_reports_correct_pid()
71
72 @llgs_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000073 def test_attach_commandline_qProcessInfo_reports_correct_pid_llgs(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000074 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000075 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +000076 self.set_inferior_startup_attach()
77 self.attach_commandline_qProcessInfo_reports_correct_pid()
78
79 def qProcessInfo_reports_valid_endian(self):
80 procs = self.prep_debug_monitor_and_inferior()
81 self.add_process_info_collection_packets()
82
83 # Run the stream
84 context = self.expect_gdbremote_sequence()
85 self.assertIsNotNone(context)
86
87 # Gather process info response
88 process_info = self.parse_process_info_response(context)
89 self.assertIsNotNone(process_info)
90
91 # Ensure the process id looks reasonable.
92 endian = process_info.get("endian")
93 self.assertIsNotNone(endian)
94 self.assertTrue(endian in ["little", "big", "pdp"])
95
96 @debugserver_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000097 def test_qProcessInfo_reports_valid_endian_debugserver(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000098 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000099 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +0000100 self.qProcessInfo_reports_valid_endian()
101
102 @llgs_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000103 def test_qProcessInfo_reports_valid_endian_llgs(self):
Todd Fialaf76a8912014-08-26 17:19:10 +0000104 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000105 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +0000106 self.qProcessInfo_reports_valid_endian()
107
Todd Fialac540dd02014-08-26 18:21:02 +0000108 def qProcessInfo_contains_keys(self, expected_key_set):
109 procs = self.prep_debug_monitor_and_inferior()
110 self.add_process_info_collection_packets()
111
112 # Run the stream
113 context = self.expect_gdbremote_sequence()
114 self.assertIsNotNone(context)
115
116 # Gather process info response
117 process_info = self.parse_process_info_response(context)
118 self.assertIsNotNone(process_info)
119
120 # Ensure the expected keys are present and non-None within the process info.
121 missing_key_set = set()
122 for expected_key in expected_key_set:
123 if expected_key not in process_info:
124 missing_key_set.add(expected_key)
125
126 self.assertEquals(missing_key_set, set(), "the listed keys are missing in the qProcessInfo result")
127
Todd Fiala6c9053e2014-08-26 18:40:56 +0000128 def qProcessInfo_does_not_contain_keys(self, absent_key_set):
129 procs = self.prep_debug_monitor_and_inferior()
130 self.add_process_info_collection_packets()
131
132 # Run the stream
133 context = self.expect_gdbremote_sequence()
134 self.assertIsNotNone(context)
135
136 # Gather process info response
137 process_info = self.parse_process_info_response(context)
138 self.assertIsNotNone(process_info)
139
140 # Ensure the unexpected keys are not present
141 unexpected_key_set = set()
142 for unexpected_key in absent_key_set:
143 if unexpected_key in process_info:
144 unexpected_key_set.add(unexpected_key)
145
146 self.assertEquals(unexpected_key_set, set(), "the listed keys were present but unexpected in qProcessInfo result")
147
Robert Flack13c7ad92015-03-30 14:12:17 +0000148 @skipUnlessDarwin
Todd Fialac540dd02014-08-26 18:21:02 +0000149 @debugserver_test
Todd Fialac540dd02014-08-26 18:21:02 +0000150 def test_qProcessInfo_contains_cputype_cpusubtype_debugserver_darwin(self):
151 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000152 self.build()
Todd Fialac540dd02014-08-26 18:21:02 +0000153 self.qProcessInfo_contains_keys(set(['cputype', 'cpusubtype']))
154
Robert Flack13c7ad92015-03-30 14:12:17 +0000155 @skipUnlessPlatform(["linux"])
Todd Fialac540dd02014-08-26 18:21:02 +0000156 @llgs_test
Todd Fialac540dd02014-08-26 18:21:02 +0000157 def test_qProcessInfo_contains_triple_llgs_linux(self):
158 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000159 self.build()
Todd Fialac540dd02014-08-26 18:21:02 +0000160 self.qProcessInfo_contains_keys(set(['triple']))
161
Robert Flack13c7ad92015-03-30 14:12:17 +0000162 @skipUnlessDarwin
Todd Fiala6c9053e2014-08-26 18:40:56 +0000163 @debugserver_test
Todd Fiala6c9053e2014-08-26 18:40:56 +0000164 def test_qProcessInfo_does_not_contain_triple_debugserver_darwin(self):
165 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000166 self.build()
Todd Fiala6c9053e2014-08-26 18:40:56 +0000167 # We don't expect to see triple on darwin. If we do, we'll prefer triple
168 # to cputype/cpusubtype and skip some darwin-based ProcessGDBRemote ArchSpec setup
169 # for the remote Host and Process.
170 self.qProcessInfo_does_not_contain_keys(set(['triple']))
171
Robert Flack13c7ad92015-03-30 14:12:17 +0000172 @skipUnlessPlatform(["linux"])
Todd Fiala6c9053e2014-08-26 18:40:56 +0000173 @llgs_test
Todd Fiala6c9053e2014-08-26 18:40:56 +0000174 def test_qProcessInfo_does_not_contain_cputype_cpusubtype_llgs_linux(self):
175 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000176 self.build()
Todd Fiala6c9053e2014-08-26 18:40:56 +0000177 self.qProcessInfo_does_not_contain_keys(set(['cputype', 'cpusubtype']))