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