TestMultithreaded.py revision d2771ed2249c645019b7b1e46bdd677d2ed1cfe1
1d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea"""Test the lldb public C++ api breakpoint callbacks.  """
2d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
3d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaimport os, re, StringIO
4d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaimport unittest2
5d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleafrom lldbtest import *
6d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaimport lldbutil
7d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaimport subprocess
8d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
9d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaclass SBBreakpointCallbackCase(TestBase):
10d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
11d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    mydir = os.path.join("api", "multithreaded")
12d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
13d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    def setUp(self):
14d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        TestBase.setUp(self)
15d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        self.lib_dir = os.environ["LLDB_LIB_DIR"]
16d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        self.inferior = 'inferior_program'
17d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        if self.getArchitecture() != "i386":
18d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea          self.buildProgram('inferior.cpp', self.inferior)
19d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea          self.addTearDownHook(lambda: os.remove(self.inferior))
20d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
21d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    @unittest2.expectedFailure # llvm.org/pr-1600: SBBreakpoint.SetCallback() does nothing
22d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    @skipIfi386
23d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    def test_breakpoint_callback(self):
24d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        """Test the that SBBreakpoint callback is invoked when a breakpoint is hit. """
25d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        self.build_and_test('driver.cpp test_breakpoint_callback.cpp',
26d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea                            'test_breakpoint_callback')
27d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
28d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    @skipIfi386
29d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    def test_sb_api_listener_event_description(self):
30d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        """ Test the description of an SBListener breakpoint event is valid."""
31d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        self.build_and_test('driver.cpp listener_test.cpp test_listener_event_description.cpp',
32d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea                            'test_listener_event_description')
33d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        pass
34d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
35d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    @skipIfi386
36d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    def test_sb_api_listener_event_process_state(self):
37d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        """ Test that a registered SBListener receives events when a process
38d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea            changes state.
39d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        """
40d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        self.build_and_test('driver.cpp listener_test.cpp test_listener_event_process_state.cpp',
41d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea                            'test_listener_event_process_state')
42d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        pass
43d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
44d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
45d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    @skipIfi386
46d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    def test_sb_api_listener_resume(self):
47d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        """ Test that a process can be resumed from a non-main thread. """
48d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        self.build_and_test('driver.cpp listener_test.cpp test_listener_resume.cpp',
49d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea                            'test_listener_resume')
50d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        pass
51d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
52d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    def build_and_test(self, sources, test_name, args = None):
53d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        """ Build LLDB test from sources, and run expecting 0 exit code """
54d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        self.buildDriver(sources, test_name)
55d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        self.addTearDownHook(lambda: os.remove(test_name))
56d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
57d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        exe = [os.path.join(os.getcwd(), test_name), self.inferior]
58d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
59d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        if self.TraceOn():
60d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea            print "Running test %s" % " ".join(exe)
61d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
62d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        check_call(exe, env={self.dylibPath : self.getLLDBLibraryEnvVal()})
63d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
64d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
65d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
66d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    def build_program(self, sources, program):
67d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        return self.buildDriver(sources, program)
68d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
69d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaif __name__ == '__main__':
70d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    import atexit
71d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    lldb.SBDebugger.Initialize()
72d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    atexit.register(lambda: lldb.SBDebugger.Terminate())
73d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    unittest2.main()
74