diff options
author | Zachary Turner <zturner@google.com> | 2016-01-22 23:54:41 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2016-01-22 23:54:41 +0000 |
commit | 1da094a5ec6fe2c72e52e041930c71dbb946420c (patch) | |
tree | e7bc4b661b0e26d786db1b4c69a011772daaf1b3 /lldb/packages/Python/lldbsuite/test/functionalities/thread/thread_exit | |
parent | 8c8c9fb5d4db0c98ca3bee99fa0c0afaa42bfaa4 (diff) | |
download | bcm5719-llvm-1da094a5ec6fe2c72e52e041930c71dbb946420c.tar.gz bcm5719-llvm-1da094a5ec6fe2c72e52e041930c71dbb946420c.zip |
More fixes related to counting threads on Windows.
The Windows 10 loader spawns threads at startup, so
tests which count threads or assume that a given user
thread will be at a specific index are incorrect in
this case. The fix here is to use the standard mechanisms
for getting the stopped thread (which is all we are
really interested in anyway) and correlating them with
the breakpoints that were set, and doing checks against
those things.
This fixes about 6 tests on Windows 10.
llvm-svn: 258586
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/functionalities/thread/thread_exit')
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/functionalities/thread/thread_exit/TestThreadExit.py | 68 |
1 files changed, 21 insertions, 47 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/thread/thread_exit/TestThreadExit.py b/lldb/packages/Python/lldbsuite/test/functionalities/thread/thread_exit/TestThreadExit.py index f785401277a..2ba6f2e57f2 100644 --- a/lldb/packages/Python/lldbsuite/test/functionalities/thread/thread_exit/TestThreadExit.py +++ b/lldb/packages/Python/lldbsuite/test/functionalities/thread/thread_exit/TestThreadExit.py @@ -24,7 +24,6 @@ class ThreadExitTestCase(TestBase): self.break_3 = line_number('main.cpp', '// Set third breakpoint here') self.break_4 = line_number('main.cpp', '// Set fourth breakpoint here') - @expectedFailureWindows("llvm.org/pr24681") def test(self): """Test thread exit handling.""" self.build(dictionary=self.getBuildFlags()) @@ -32,10 +31,10 @@ class ThreadExitTestCase(TestBase): self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) # This should create a breakpoint with 1 location. - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_1, num_expected_locations=1) - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_2, num_expected_locations=1) - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_3, num_expected_locations=1) - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_4, num_expected_locations=1) + bp1_id = lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_1, num_expected_locations=1) + bp2_id = lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_2, num_expected_locations=1) + bp3_id = lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_3, num_expected_locations=1) + bp4_id = lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_4, num_expected_locations=1) # The breakpoint list should show 1 locations. self.expect("breakpoint list -f", "Breakpoint location shown correctly", @@ -46,71 +45,46 @@ class ThreadExitTestCase(TestBase): # Run the program. self.runCmd("run", RUN_SUCCEEDED) - - # The stop reason of the thread should be breakpoint 1. - self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT + " 1", - substrs = ['stopped', - '* thread #1', - 'stop reason = breakpoint 1', - 'thread #2']) - # Get the target process target = self.dbg.GetSelectedTarget() process = target.GetProcess() + stopped_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id(process, bp1_id) + self.assertIsNotNone(stopped_thread, "Process is not stopped at breakpoint 1") + # Get the number of threads num_threads = process.GetNumThreads() - - self.assertTrue(num_threads == 2, 'Number of expected threads and actual threads do not match at breakpoint 1.') + self.assertGreaterEqual(num_threads, 2, 'Number of expected threads and actual threads do not match at breakpoint 1.') # Run to the second breakpoint self.runCmd("continue") - - # The stop reason of the thread should be breakpoint 1. - self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT + " 2", - substrs = ['stopped', - 'thread #1', - 'thread #2', - 'stop reason = breakpoint 2', - 'thread #3']) + stopped_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id(process, bp2_id) + self.assertIsNotNone(stopped_thread, "Process is not stopped at breakpoint 2") # Update the number of threads - num_threads = process.GetNumThreads() - - self.assertTrue(num_threads == 3, 'Number of expected threads and actual threads do not match at breakpoint 2.') + new_num_threads = process.GetNumThreads() + self.assertEqual(new_num_threads, num_threads+1, 'Number of expected threads did not increase by 1 at bp 2.') # Run to the third breakpoint self.runCmd("continue") - - # The stop reason of the thread should be breakpoint 3. - self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT + " 3", - substrs = ['stopped', - 'thread #1', - 'stop reason = breakpoint 3', - 'thread #3', - ]) + stopped_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id(process, bp3_id) + self.assertIsNotNone(stopped_thread, "Process is not stopped at breakpoint 3") # Update the number of threads - num_threads = process.GetNumThreads() - - self.assertTrue(num_threads == 2, 'Number of expected threads and actual threads do not match at breakpoint 3.') + new_num_threads = process.GetNumThreads() + self.assertEqual(new_num_threads, num_threads, 'Number of expected threads is not equal to original number of threads at bp 3.') # Run to the fourth breakpoint self.runCmd("continue") - - # The stop reason of the thread should be breakpoint 4. - self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT + " 4", - substrs = ['stopped', - 'thread #1', - 'stop reason = breakpoint 4']) + stopped_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id(process, bp4_id) + self.assertIsNotNone(stopped_thread, "Process is not stopped at breakpoint 4") # Update the number of threads - num_threads = process.GetNumThreads() - - self.assertTrue(num_threads == 1, 'Number of expected threads and actual threads do not match at breakpoint 4.') + new_num_threads = process.GetNumThreads() + self.assertEqual(new_num_threads, num_threads-1, 'Number of expected threads did not decrease by 1 at bp 4.') # Run to completion self.runCmd("continue") # At this point, the inferior process should have exited. - self.assertTrue(process.GetState() == lldb.eStateExited, PROCESS_EXITED) + self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED) |