Files
clang-p2996/lldb/test/functionalities/expr-doesnt-deadlock/TestExprDoesntBlock.py
Zachary Turner 2156787b96 XFAIL pthreads test on Windows.
This test needs to be ported to c++ threads.

llvm-svn: 245751
2015-08-21 22:11:50 +00:00

76 lines
2.6 KiB
Python

"""
Test that expr will time out and allow other threads to run if it blocks.
"""
import os, time
import re
import unittest2
import lldb, lldbutil
from lldbtest import *
class ExprDoesntDeadlockTestCase(TestBase):
def getCategories(self):
return ['basic_process']
mydir = TestBase.compute_mydir(__file__)
@skipUnlessDarwin
@dsym_test
def test_with_dsym_and_run_command(self):
"""Test that expr will time out and allow other threads to run if it blocks - with dsym."""
self.buildDsym()
self.expr_doesnt_deadlock()
@dwarf_test
@expectedFailureFreeBSD('llvm.org/pr17946')
@expectedFlakeyLinux # failed 1/365 test runs, line 61, thread.IsValid()
@expectedFailureWindows # Windows doesn't have pthreads, need to port this test.
def test_with_dwarf_and_run_command(self):
"""Test that expr will time out and allow other threads to run if it blocks."""
self.buildDwarf()
self.expr_doesnt_deadlock()
def setUp(self):
# Call super's setUp().
TestBase.setUp(self)
def expr_doesnt_deadlock (self):
"""Test that expr will time out and allow other threads to run if it blocks."""
exe = os.path.join(os.getcwd(), "a.out")
# Create a target by the debugger.
target = self.dbg.CreateTarget(exe)
self.assertTrue(target, VALID_TARGET)
# Now create a breakpoint at source line before call_me_to_get_lock gets called.
main_file_spec = lldb.SBFileSpec ("locking.c")
breakpoint = target.BreakpointCreateBySourceRegex('Break here', main_file_spec)
if self.TraceOn():
print "breakpoint:", breakpoint
self.assertTrue(breakpoint and
breakpoint.GetNumLocations() == 1,
VALID_BREAKPOINT)
# Now launch the process, and do not stop at entry point.
process = target.LaunchSimple (None, None, self.get_process_working_directory())
self.assertTrue(process, PROCESS_IS_VALID)
# Frame #0 should be on self.line1 and the break condition should hold.
from lldbutil import get_stopped_thread
thread = get_stopped_thread(process, lldb.eStopReasonBreakpoint)
self.assertTrue(thread.IsValid(), "There should be a thread stopped due to breakpoint condition")
frame0 = thread.GetFrameAtIndex(0)
var = frame0.EvaluateExpression ("call_me_to_get_lock()")
self.assertTrue (var.IsValid())
self.assertTrue (var.GetValueAsSigned (0) == 567)
if __name__ == '__main__':
import atexit
lldb.SBDebugger.Initialize()
atexit.register(lambda: lldb.SBDebugger.Terminate())
unittest2.main()