blob: 7e60dd22f1084d6cc6d96ebeefa42e74b2f055b8 [file] [log] [blame]
"""
Test lldb-dap start-debugging reverse requests.
"""
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
import lldbdap_testcase
class TestDAP_startDebugging(lldbdap_testcase.DAPTestCaseBase):
def test_startDebugging(self):
"""
Tests the "startDebugging" reverse request. It makes sure that the IDE can
start a child debug session.
"""
program = self.getBuildArtifact("a.out")
source = "main.c"
self.build_and_launch(program)
breakpoint_line = line_number(source, "// breakpoint")
self.set_source_breakpoints(source, [breakpoint_line])
self.continue_to_next_stop()
self.dap_server.request_evaluate(
"`lldb-dap start-debugging attach '{\"pid\":321}'", context="repl"
)
self.continue_to_exit()
self.assertEqual(
len(self.dap_server.reverse_requests),
1,
"make sure we got a reverse request",
)
request = self.dap_server.reverse_requests[0]
self.assertEqual(request["arguments"]["configuration"]["pid"], 321)
self.assertEqual(request["arguments"]["request"], "attach")
def test_startDebugging_debugger_reuse(self):
"""
Tests that debugger and target IDs can be passed through startDebugging
for debugger reuse. This verifies the infrastructure for child DAP
sessions to reuse the parent's debugger and attach to an existing target.
"""
program = self.getBuildArtifact("a.out")
source = "main.c"
self.build_and_launch(program)
breakpoint_line = line_number(source, "// breakpoint")
self.set_source_breakpoints(source, [breakpoint_line])
self.continue_to_next_stop()
# Use mock IDs to test the infrastructure
# In a real scenario, these would come from the parent session
test_debugger_id = 1
test_target_id = 100
# Send a startDebugging request with debuggerId and targetId
# This simulates creating a child DAP session that reuses the debugger
self.dap_server.request_evaluate(
f'`lldb-dap start-debugging attach \'{{"debuggerId":{test_debugger_id},"targetId":{test_target_id}}}\'',
context="repl",
)
self.continue_to_exit()
# Verify the reverse request was sent with the correct IDs
self.assertEqual(
len(self.dap_server.reverse_requests),
1,
"Should have received one startDebugging reverse request",
)
request = self.dap_server.reverse_requests[0]
self.assertEqual(request["command"], "startDebugging")
self.assertEqual(request["arguments"]["request"], "attach")
config = request["arguments"]["configuration"]
self.assertEqual(
config["debuggerId"],
test_debugger_id,
"Reverse request should include debugger ID",
)
self.assertEqual(
config["targetId"],
test_target_id,
"Reverse request should include target ID",
)