1from __future__ import print_function
2import lldb
3from lldbsuite.test.lldbtest import *
4from lldbsuite.test.decorators import *
5from gdbclientutils import *
6
7
8class TestMultiprocess(GDBRemoteTestBase):
9    def test_qfThreadInfo(self):
10        class MyResponder(MockGDBServerResponder):
11            def qfThreadInfo(self):
12                return "mp400.10200,p400.10204,p401.10300,p400.10208"
13
14        self.server.responder = MyResponder()
15        target = self.dbg.CreateTarget('')
16        if self.TraceOn():
17          self.runCmd("log enable gdb-remote packets")
18          self.addTearDownHook(
19                lambda: self.runCmd("log disable gdb-remote packets"))
20        process = self.connect(target)
21        self.assertEqual(process.id, 0x400)
22        self.assertEqual(
23            [process.threads[i].id for i in range(process.num_threads)],
24            [0x10200, 0x10204, 0x10208])
25
26    def test_stop_reason(self):
27        class MyResponder(MockGDBServerResponder):
28            def qfThreadInfo(self):
29                return "mp400.10200,p400.10204"
30
31            def cont(self):
32                return "S02thread:p400.10200;"
33
34        self.server.responder = MyResponder()
35        target = self.dbg.CreateTarget('')
36        if self.TraceOn():
37          self.runCmd("log enable gdb-remote packets")
38          self.addTearDownHook(
39                lambda: self.runCmd("log disable gdb-remote packets"))
40        process = self.connect(target)
41        process.Continue()
42        self.assertEqual(process.GetThreadByID(0x10200).stop_reason,
43                         lldb.eStopReasonSignal)
44        self.assertEqual(process.GetThreadByID(0x10204).stop_reason,
45                         lldb.eStopReasonNone)
46