blob: 4aa9218de366bc286961b9f96431b71745d4fff7 [file] [log] [blame]
Todd Fialaf76a8912014-08-26 17:19:10 +00001import gdbremote_testcase
2import lldbgdbserverutils
Todd Fialac540dd02014-08-26 18:21:02 +00003import sys
4import unittest2
Todd Fialaf76a8912014-08-26 17:19:10 +00005
6from lldbtest import *
7
8class TestGdbRemoteProcessInfo(gdbremote_testcase.GdbRemoteTestCaseBase):
9
Vince Harron65f99162015-05-21 18:54:12 +000010 mydir = TestBase.compute_mydir(__file__)
11
Todd Fialaf76a8912014-08-26 17:19:10 +000012 def qProcessInfo_returns_running_process(self):
13 procs = self.prep_debug_monitor_and_inferior()
14 self.add_process_info_collection_packets()
15
16 # Run the stream
17 context = self.expect_gdbremote_sequence()
18 self.assertIsNotNone(context)
19
20 # Gather process info response
21 process_info = self.parse_process_info_response(context)
22 self.assertIsNotNone(process_info)
23
24 # Ensure the process id looks reasonable.
25 pid_text = process_info.get("pid")
26 self.assertIsNotNone(pid_text)
27 pid = int(pid_text, base=16)
28 self.assertNotEqual(0, pid)
29
30 # If possible, verify that the process is running.
31 self.assertTrue(lldbgdbserverutils.process_is_running(pid, True))
32
33 @debugserver_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000034 def test_qProcessInfo_returns_running_process_debugserver(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000035 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000036 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +000037 self.qProcessInfo_returns_running_process()
38
39 @llgs_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000040 def test_qProcessInfo_returns_running_process_llgs(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000041 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000042 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +000043 self.qProcessInfo_returns_running_process()
44
45 def attach_commandline_qProcessInfo_reports_correct_pid(self):
46 procs = self.prep_debug_monitor_and_inferior()
47 self.assertIsNotNone(procs)
48 self.add_process_info_collection_packets()
49
50 # Run the stream
51 context = self.expect_gdbremote_sequence()
52 self.assertIsNotNone(context)
53
54 # Gather process info response
55 process_info = self.parse_process_info_response(context)
56 self.assertIsNotNone(process_info)
57
58 # Ensure the process id matches what we expected.
59 pid_text = process_info.get('pid', None)
60 self.assertIsNotNone(pid_text)
61 reported_pid = int(pid_text, base=16)
62 self.assertEqual(reported_pid, procs["inferior"].pid)
63
64 @debugserver_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000065 def test_attach_commandline_qProcessInfo_reports_correct_pid_debugserver(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000066 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000067 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +000068 self.set_inferior_startup_attach()
69 self.attach_commandline_qProcessInfo_reports_correct_pid()
70
71 @llgs_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000072 def test_attach_commandline_qProcessInfo_reports_correct_pid_llgs(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000073 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000074 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +000075 self.set_inferior_startup_attach()
76 self.attach_commandline_qProcessInfo_reports_correct_pid()
77
78 def qProcessInfo_reports_valid_endian(self):
79 procs = self.prep_debug_monitor_and_inferior()
80 self.add_process_info_collection_packets()
81
82 # Run the stream
83 context = self.expect_gdbremote_sequence()
84 self.assertIsNotNone(context)
85
86 # Gather process info response
87 process_info = self.parse_process_info_response(context)
88 self.assertIsNotNone(process_info)
89
90 # Ensure the process id looks reasonable.
91 endian = process_info.get("endian")
92 self.assertIsNotNone(endian)
93 self.assertTrue(endian in ["little", "big", "pdp"])
94
95 @debugserver_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000096 def test_qProcessInfo_reports_valid_endian_debugserver(self):
Todd Fialaf76a8912014-08-26 17:19:10 +000097 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +000098 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +000099 self.qProcessInfo_reports_valid_endian()
100
101 @llgs_test
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000102 def test_qProcessInfo_reports_valid_endian_llgs(self):
Todd Fialaf76a8912014-08-26 17:19:10 +0000103 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000104 self.build()
Todd Fialaf76a8912014-08-26 17:19:10 +0000105 self.qProcessInfo_reports_valid_endian()
106
Todd Fialac540dd02014-08-26 18:21:02 +0000107 def qProcessInfo_contains_keys(self, expected_key_set):
108 procs = self.prep_debug_monitor_and_inferior()
109 self.add_process_info_collection_packets()
110
111 # Run the stream
112 context = self.expect_gdbremote_sequence()
113 self.assertIsNotNone(context)
114
115 # Gather process info response
116 process_info = self.parse_process_info_response(context)
117 self.assertIsNotNone(process_info)
118
119 # Ensure the expected keys are present and non-None within the process info.
120 missing_key_set = set()
121 for expected_key in expected_key_set:
122 if expected_key not in process_info:
123 missing_key_set.add(expected_key)
124
125 self.assertEquals(missing_key_set, set(), "the listed keys are missing in the qProcessInfo result")
126
Todd Fiala6c9053e2014-08-26 18:40:56 +0000127 def qProcessInfo_does_not_contain_keys(self, absent_key_set):
128 procs = self.prep_debug_monitor_and_inferior()
129 self.add_process_info_collection_packets()
130
131 # Run the stream
132 context = self.expect_gdbremote_sequence()
133 self.assertIsNotNone(context)
134
135 # Gather process info response
136 process_info = self.parse_process_info_response(context)
137 self.assertIsNotNone(process_info)
138
139 # Ensure the unexpected keys are not present
140 unexpected_key_set = set()
141 for unexpected_key in absent_key_set:
142 if unexpected_key in process_info:
143 unexpected_key_set.add(unexpected_key)
144
145 self.assertEquals(unexpected_key_set, set(), "the listed keys were present but unexpected in qProcessInfo result")
146
Robert Flack13c7ad92015-03-30 14:12:17 +0000147 @skipUnlessDarwin
Todd Fialac540dd02014-08-26 18:21:02 +0000148 @debugserver_test
Todd Fialac540dd02014-08-26 18:21:02 +0000149 def test_qProcessInfo_contains_cputype_cpusubtype_debugserver_darwin(self):
150 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000151 self.build()
Todd Fialac540dd02014-08-26 18:21:02 +0000152 self.qProcessInfo_contains_keys(set(['cputype', 'cpusubtype']))
153
Robert Flack13c7ad92015-03-30 14:12:17 +0000154 @skipUnlessPlatform(["linux"])
Todd Fialac540dd02014-08-26 18:21:02 +0000155 @llgs_test
Todd Fialac540dd02014-08-26 18:21:02 +0000156 def test_qProcessInfo_contains_triple_llgs_linux(self):
157 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000158 self.build()
Todd Fialac540dd02014-08-26 18:21:02 +0000159 self.qProcessInfo_contains_keys(set(['triple']))
160
Robert Flack13c7ad92015-03-30 14:12:17 +0000161 @skipUnlessDarwin
Todd Fiala6c9053e2014-08-26 18:40:56 +0000162 @debugserver_test
Todd Fiala6c9053e2014-08-26 18:40:56 +0000163 def test_qProcessInfo_does_not_contain_triple_debugserver_darwin(self):
164 self.init_debugserver_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000165 self.build()
Todd Fiala6c9053e2014-08-26 18:40:56 +0000166 # We don't expect to see triple on darwin. If we do, we'll prefer triple
167 # to cputype/cpusubtype and skip some darwin-based ProcessGDBRemote ArchSpec setup
168 # for the remote Host and Process.
169 self.qProcessInfo_does_not_contain_keys(set(['triple']))
170
Robert Flack13c7ad92015-03-30 14:12:17 +0000171 @skipUnlessPlatform(["linux"])
Todd Fiala6c9053e2014-08-26 18:40:56 +0000172 @llgs_test
Todd Fiala6c9053e2014-08-26 18:40:56 +0000173 def test_qProcessInfo_does_not_contain_cputype_cpusubtype_llgs_linux(self):
174 self.init_llgs_test()
Tamas Berghammerc8fd1302015-09-30 10:12:40 +0000175 self.build()
Todd Fiala6c9053e2014-08-26 18:40:56 +0000176 self.qProcessInfo_does_not_contain_keys(set(['cputype', 'cpusubtype']))
177
Todd Fialaf76a8912014-08-26 17:19:10 +0000178
179if __name__ == '__main__':
180 unittest2.main()