199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest calling a function that waits a while, and make sure the timeout option to expr works. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprecht 699451b44SJordan Rupprecht 799451b44SJordan Rupprechtimport lldb 899451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1099451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprecht 1399451b44SJordan Rupprechtclass ExprCommandWithTimeoutsTestCase(TestBase): 1499451b44SJordan Rupprecht 1599451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 1699451b44SJordan Rupprecht 1799451b44SJordan Rupprecht def setUp(self): 1899451b44SJordan Rupprecht # Call super's setUp(). 1999451b44SJordan Rupprecht TestBase.setUp(self) 2099451b44SJordan Rupprecht 2199451b44SJordan Rupprecht self.main_source = "wait-a-while.cpp" 2299451b44SJordan Rupprecht self.main_source_spec = lldb.SBFileSpec(self.main_source) 2399451b44SJordan Rupprecht 2499451b44SJordan Rupprecht @expectedFlakeyFreeBSD("llvm.org/pr19605") 2599451b44SJordan Rupprecht @expectedFailureAll( 2699451b44SJordan Rupprecht oslist=[ 2799451b44SJordan Rupprecht "windows"], 2899451b44SJordan Rupprecht bugnumber="llvm.org/pr21765") 29c30c2368SJonas Devlieghere @skipIfReproducer # Timeouts are not currently modeled. 3099451b44SJordan Rupprecht def test(self): 3199451b44SJordan Rupprecht """Test calling std::String member function.""" 3299451b44SJordan Rupprecht self.build() 3399451b44SJordan Rupprecht 3499451b44SJordan Rupprecht (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( 3599451b44SJordan Rupprecht self, 'stop here in main.', self.main_source_spec) 3699451b44SJordan Rupprecht 3799451b44SJordan Rupprecht # First set the timeout too short, and make sure we fail. 3899451b44SJordan Rupprecht options = lldb.SBExpressionOptions() 3999451b44SJordan Rupprecht options.SetTimeoutInMicroSeconds(10) 4099451b44SJordan Rupprecht options.SetUnwindOnError(True) 4199451b44SJordan Rupprecht 4299451b44SJordan Rupprecht frame = thread.GetFrameAtIndex(0) 4399451b44SJordan Rupprecht 4499451b44SJordan Rupprecht value = frame.EvaluateExpression("wait_a_while(1000000)", options) 4599451b44SJordan Rupprecht self.assertTrue(value.IsValid()) 4699451b44SJordan Rupprecht self.assertFalse(value.GetError().Success()) 4799451b44SJordan Rupprecht 4899451b44SJordan Rupprecht # Now do the same thing with the command line command, and make sure it 4999451b44SJordan Rupprecht # works too. 5099451b44SJordan Rupprecht interp = self.dbg.GetCommandInterpreter() 5199451b44SJordan Rupprecht 5299451b44SJordan Rupprecht result = lldb.SBCommandReturnObject() 5399451b44SJordan Rupprecht return_value = interp.HandleCommand( 5499451b44SJordan Rupprecht "expr -t 100 -u true -- wait_a_while(1000000)", result) 55b3a0c4d7SRaphael Isemann self.assertEquals(return_value, lldb.eReturnStatusFailed) 5699451b44SJordan Rupprecht 5799451b44SJordan Rupprecht # Okay, now do it again with long enough time outs: 5899451b44SJordan Rupprecht 5999451b44SJordan Rupprecht options.SetTimeoutInMicroSeconds(1000000) 6099451b44SJordan Rupprecht value = frame.EvaluateExpression("wait_a_while (1000)", options) 6199451b44SJordan Rupprecht self.assertTrue(value.IsValid()) 62*35674976SPavel Labath self.assertSuccess(value.GetError()) 6399451b44SJordan Rupprecht 6499451b44SJordan Rupprecht # Now do the same thingwith the command line command, and make sure it 6599451b44SJordan Rupprecht # works too. 6699451b44SJordan Rupprecht interp = self.dbg.GetCommandInterpreter() 6799451b44SJordan Rupprecht 6899451b44SJordan Rupprecht result = lldb.SBCommandReturnObject() 6999451b44SJordan Rupprecht return_value = interp.HandleCommand( 7099451b44SJordan Rupprecht "expr -t 1000000 -u true -- wait_a_while(1000)", result) 71b3a0c4d7SRaphael Isemann self.assertEquals(return_value, lldb.eReturnStatusSuccessFinishResult) 7299451b44SJordan Rupprecht 7399451b44SJordan Rupprecht # Finally set the one thread timeout and make sure that doesn't change 7499451b44SJordan Rupprecht # things much: 7599451b44SJordan Rupprecht 7699451b44SJordan Rupprecht options.SetTimeoutInMicroSeconds(1000000) 7799451b44SJordan Rupprecht options.SetOneThreadTimeoutInMicroSeconds(500000) 7899451b44SJordan Rupprecht value = frame.EvaluateExpression("wait_a_while (1000)", options) 7999451b44SJordan Rupprecht self.assertTrue(value.IsValid()) 80*35674976SPavel Labath self.assertSuccess(value.GetError()) 81