blob: 9c2363ac4da893ba5f80d97d1de0bc490825185a [file] [log] [blame]
Zachary Turner35d017f2015-10-23 17:04:29 +00001from __future__ import print_function
2
Zachary Turner0a0490b2015-10-27 20:12:05 +00003import use_lldb_suite
Zachary Turner77db4a82015-10-22 20:06:20 +00004
Todd Fialaf76a8912014-08-26 17:19:10 +00005import gdbremote_testcase
6import lldbgdbserverutils
Todd Fialac540dd02014-08-26 18:21:02 +00007import sys
Todd Fialaf76a8912014-08-26 17:19:10 +00008
9from lldbtest import *
10
11class TestGdbRemoteProcessInfo(gdbremote_testcase.GdbRemoteTestCaseBase):
12
Vince Harron65f99162015-05-21 18:54:12 +000013 mydir = TestBase.compute_mydir(__file__)
14
Todd Fialaf76a8912014-08-26 17:19:10 +000015 def qProcessInfo_returns_running_process(self):
16 procs = self.prep_debug_monitor_and_inferior()
17 self.add_process_info_collection_packets()
18
19 # Run the stream
20 context = self.expect_gdbremote_sequence()
21 self.assertIsNotNone(context)
22
23 # Gather process info response
24 process_info = self.parse_process_info_response(context)
25 self.assertIsNotNone(process_info)
26
27 # Ensure the process id looks reasonable.
28 pid_text = process_info.get("pid")
29 self.assertIsNotNone(pid_text)
30 pid = int(pid_text, base=16)
31 self.assertNotEqual(0, pid)
32
33 # If possible, verify that the process is running.
34 self.assertTrue(lldbgdbserverutils.process_is_running(pid, True))
35
36 @debugserver_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000037 def test_qProcessInfo_returns_running_process_debugserver(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000038 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000039 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +000040 self.qProcessInfo_returns_running_process()
41
42 @llgs_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000043 def test_qProcessInfo_returns_running_process_llgs(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000044 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000045 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +000046 self.qProcessInfo_returns_running_process()
47
48 def attach_commandline_qProcessInfo_reports_correct_pid(self):
49 procs = self.prep_debug_monitor_and_inferior()
50 self.assertIsNotNone(procs)
51 self.add_process_info_collection_packets()
52
53 # Run the stream
54 context = self.expect_gdbremote_sequence()
55 self.assertIsNotNone(context)
56
57 # Gather process info response
58 process_info = self.parse_process_info_response(context)
59 self.assertIsNotNone(process_info)
60
61 # Ensure the process id matches what we expected.
62 pid_text = process_info.get('pid', None)
63 self.assertIsNotNone(pid_text)
64 reported_pid = int(pid_text, base=16)
65 self.assertEqual(reported_pid, procs["inferior"].pid)
66
67 @debugserver_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000068 def test_attach_commandline_qProcessInfo_reports_correct_pid_debugserver(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000069 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000070 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +000071 self.set_inferior_startup_attach()
72 self.attach_commandline_qProcessInfo_reports_correct_pid()
73
74 @llgs_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000075 def test_attach_commandline_qProcessInfo_reports_correct_pid_llgs(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000076 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000077 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +000078 self.set_inferior_startup_attach()
79 self.attach_commandline_qProcessInfo_reports_correct_pid()
80
81 def qProcessInfo_reports_valid_endian(self):
82 procs = self.prep_debug_monitor_and_inferior()
83 self.add_process_info_collection_packets()
84
85 # Run the stream
86 context = self.expect_gdbremote_sequence()
87 self.assertIsNotNone(context)
88
89 # Gather process info response
90 process_info = self.parse_process_info_response(context)
91 self.assertIsNotNone(process_info)
92
93 # Ensure the process id looks reasonable.
94 endian = process_info.get("endian")
95 self.assertIsNotNone(endian)
96 self.assertTrue(endian in ["little", "big", "pdp"])
97
98 @debugserver_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000099 def test_qProcessInfo_reports_valid_endian_debugserver(self):
Todd Fialaf76a8912014-08-26 17:19:10 +0000100 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000101 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +0000102 self.qProcessInfo_reports_valid_endian()
103
104 @llgs_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000105 def test_qProcessInfo_reports_valid_endian_llgs(self):
Todd Fialaf76a8912014-08-26 17:19:10 +0000106 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000107 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +0000108 self.qProcessInfo_reports_valid_endian()
109
Todd Fialac540dd02014-08-26 18:21:02 +0000110 def qProcessInfo_contains_keys(self, expected_key_set):
111 procs = self.prep_debug_monitor_and_inferior()
112 self.add_process_info_collection_packets()
113
114 # Run the stream
115 context = self.expect_gdbremote_sequence()
116 self.assertIsNotNone(context)
117
118 # Gather process info response
119 process_info = self.parse_process_info_response(context)
120 self.assertIsNotNone(process_info)
121
122 # Ensure the expected keys are present and non-None within the process info.
123 missing_key_set = set()
124 for expected_key in expected_key_set:
125 if expected_key not in process_info:
126 missing_key_set.add(expected_key)
127
Zachary Turner210eb9702015-10-26 16:50:39 +0000128 self.assertEqual(missing_key_set, set(), "the listed keys are missing in the qProcessInfo result")
Todd Fialac540dd02014-08-26 18:21:02 +0000129
Todd Fiala6c9053e2014-08-26 18:40:56 +0000130 def qProcessInfo_does_not_contain_keys(self, absent_key_set):
131 procs = self.prep_debug_monitor_and_inferior()
132 self.add_process_info_collection_packets()
133
134 # Run the stream
135 context = self.expect_gdbremote_sequence()
136 self.assertIsNotNone(context)
137
138 # Gather process info response
139 process_info = self.parse_process_info_response(context)
140 self.assertIsNotNone(process_info)
141
142 # Ensure the unexpected keys are not present
143 unexpected_key_set = set()
144 for unexpected_key in absent_key_set:
145 if unexpected_key in process_info:
146 unexpected_key_set.add(unexpected_key)
147
Zachary Turner210eb9702015-10-26 16:50:39 +0000148 self.assertEqual(unexpected_key_set, set(), "the listed keys were present but unexpected in qProcessInfo result")
Todd Fiala6c9053e2014-08-26 18:40:56 +0000149
Robert Flack13c7ad92015-03-30 14:12:17 +0000150 @skipUnlessDarwin
Todd Fialac540dd02014-08-26 18:21:02 +0000151 @debugserver_test
Todd Fialac540dd02014-08-26 18:21:02 +0000152 def test_qProcessInfo_contains_cputype_cpusubtype_debugserver_darwin(self):
153 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000154 self.build()
Todd Fialac540dd02014-08-26 18:21:02 +0000155 self.qProcessInfo_contains_keys(set(['cputype', 'cpusubtype']))
156
Robert Flack13c7ad92015-03-30 14:12:17 +0000157 @skipUnlessPlatform(["linux"])
Todd Fialac540dd02014-08-26 18:21:02 +0000158 @llgs_test
Todd Fialac540dd02014-08-26 18:21:02 +0000159 def test_qProcessInfo_contains_triple_llgs_linux(self):
160 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000161 self.build()
Todd Fialac540dd02014-08-26 18:21:02 +0000162 self.qProcessInfo_contains_keys(set(['triple']))
163
Robert Flack13c7ad92015-03-30 14:12:17 +0000164 @skipUnlessDarwin
Todd Fiala6c9053e2014-08-26 18:40:56 +0000165 @debugserver_test
Todd Fiala6c9053e2014-08-26 18:40:56 +0000166 def test_qProcessInfo_does_not_contain_triple_debugserver_darwin(self):
167 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000168 self.build()
Todd Fiala6c9053e2014-08-26 18:40:56 +0000169 # We don't expect to see triple on darwin. If we do, we'll prefer triple
170 # to cputype/cpusubtype and skip some darwin-based ProcessGDBRemote ArchSpec setup
171 # for the remote Host and Process.
172 self.qProcessInfo_does_not_contain_keys(set(['triple']))
173
Robert Flack13c7ad92015-03-30 14:12:17 +0000174 @skipUnlessPlatform(["linux"])
Todd Fiala6c9053e2014-08-26 18:40:56 +0000175 @llgs_test
Todd Fiala6c9053e2014-08-26 18:40:56 +0000176 def test_qProcessInfo_does_not_contain_cputype_cpusubtype_llgs_linux(self):
177 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000178 self.build()
Todd Fiala6c9053e2014-08-26 18:40:56 +0000179 self.qProcessInfo_does_not_contain_keys(set(['cputype', 'cpusubtype']))