Files
clang-p2996/lldb/test/API/tools/lldb-vscode/restart/TestVSCode_restart_runInTerminal.py
Leandro Lupori b58dd9230e [lldb-vscode] Skip restart tests on ARM
These tests always time out on ARM buildbot. Disabling them for
now, until https://github.com/llvm/llvm-project/issues/62684 is
fixed.
2023-05-12 13:52:17 -03:00

107 lines
4.0 KiB
Python

"""
Test lldb-vscode RestartRequest.
"""
import os
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import line_number
import lldbvscode_testcase
class TestVSCode_restart_runInTerminal(lldbvscode_testcase.VSCodeTestCaseBase):
def isTestSupported(self):
try:
# We skip this test for debug builds because it takes too long
# parsing lldb's own debug info. Release builds are fine.
# Checking the size of the lldb-vscode binary seems to be a decent
# proxy for a quick detection. It should be far less than 1 MB in
# Release builds.
return os.path.getsize(os.environ["LLDBVSCODE_EXEC"]) < 1000000
except:
return False
@skipIfWindows
@skipIfRemote
@skipIf(archs=["arm"]) # Always times out on buildbot
def test_basic_functionality(self):
'''
Test basic restarting functionality when the process is running in
a terminal.
'''
if not self.isTestSupported():
return
line_A = line_number('main.c', '// breakpoint A')
line_B = line_number('main.c', '// breakpoint B')
program = self.getBuildArtifact("a.out")
self.build_and_launch(program, runInTerminal=True)
[bp_A, bp_B] = self.set_source_breakpoints('main.c', [line_A, line_B])
# Verify we hit A, then B.
self.vscode.request_configurationDone()
self.verify_breakpoint_hit([bp_A])
self.vscode.request_continue()
self.verify_breakpoint_hit([bp_B])
# Make sure i has been modified from its initial value of 0.
self.assertEquals(int(self.vscode.get_local_variable_value('i')),
1234, 'i != 1234 after hitting breakpoint B')
# Restart.
self.vscode.request_restart()
# Finally, check we stop back at A and program state has been reset.
self.verify_breakpoint_hit([bp_A])
self.assertEquals(int(self.vscode.get_local_variable_value('i')),
0, 'i != 0 after hitting breakpoint A on restart')
@skipIfWindows
@skipIfRemote
@skipIf(archs=["arm"]) # Always times out on buildbot
def test_stopOnEntry(self):
'''
Check that stopOnEntry works correctly when using runInTerminal.
'''
if not self.isTestSupported():
return
line_A = line_number('main.c', '// breakpoint A')
line_B = line_number('main.c', '// breakpoint B')
program = self.getBuildArtifact("a.out")
self.build_and_launch(program, runInTerminal=True, stopOnEntry=True)
[bp_main] = self.set_function_breakpoints(['main'])
self.vscode.request_configurationDone()
# When using stopOnEntry, configurationDone doesn't result in a running
# process, we should immediately get a stopped event instead.
stopped_events = self.vscode.wait_for_stopped()
# We should be stopped at the entry point.
for stopped_event in stopped_events:
if 'body' in stopped_event:
body = stopped_event['body']
if 'reason' in body:
reason = body['reason']
self.assertNotEqual(
reason, 'breakpoint',
'verify stop isn\'t a breakpoint')
# Then, if we continue, we should hit the breakpoint at main.
self.vscode.request_continue()
self.verify_breakpoint_hit([bp_main])
# Restart and check that we still get a stopped event before reaching
# main.
self.vscode.request_restart()
stopped_events = self.vscode.wait_for_stopped()
for stopped_event in stopped_events:
if 'body' in stopped_event:
body = stopped_event['body']
if 'reason' in body:
reason = body['reason']
self.assertNotEqual(
reason, 'breakpoint',
'verify stop after restart isn\'t "main" breakpoint')