[lldb/Reproducers] Update GDB remote client tests for passive replay

Tests that check the state of the server don't work when replayed
because the replay server replies to requests.
This commit is contained in:
Jonas Devlieghere 2020-05-19 13:07:05 -07:00
parent e42e5e4d0f
commit c7dddaa89f
3 changed files with 20 additions and 11 deletions

View File

@ -11,6 +11,7 @@ class TestGDBRemoteClient(GDBRemoteTestBase):
def readRegisters(self):
return '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
@skipIfReproducer # Packet log is not populated during replay.
def test_connect(self):
"""Test connecting to a remote gdb server"""
target = self.createTarget("a.yaml")
@ -68,11 +69,12 @@ class TestGDBRemoteClient(GDBRemoteTestBase):
None, 0, True, error)
self.assertEquals("'A' packet returned an error: 71", error.GetCString())
@skipIfReproducer # Packet log is not populated during replay.
def test_read_registers_using_g_packets(self):
"""Test reading registers using 'g' packets (default behavior)"""
self.dbg.HandleCommand(
"settings set plugin.process.gdb-remote.use-g-packet-for-reading true")
self.addTearDownHook(lambda:
self.addTearDownHook(lambda:
self.runCmd("settings set plugin.process.gdb-remote.use-g-packet-for-reading false"))
self.server.responder = self.gPacketResponder()
target = self.createTarget("a.yaml")
@ -85,6 +87,7 @@ class TestGDBRemoteClient(GDBRemoteTestBase):
self.assertEquals(
0, len([p for p in self.server.responder.packetLog if p.startswith("p")]))
@skipIfReproducer # Packet log is not populated during replay.
def test_read_registers_using_p_packets(self):
"""Test reading registers using 'p' packets"""
self.dbg.HandleCommand(
@ -97,6 +100,7 @@ class TestGDBRemoteClient(GDBRemoteTestBase):
self.assertGreater(
len([p for p in self.server.responder.packetLog if p.startswith("p")]), 0)
@skipIfReproducer # Packet log is not populated during replay.
def test_write_registers_using_P_packets(self):
"""Test writing registers using 'P' packets (default behavior)"""
self.server.responder = self.gPacketResponder()
@ -109,6 +113,7 @@ class TestGDBRemoteClient(GDBRemoteTestBase):
self.assertGreater(
len([p for p in self.server.responder.packetLog if p.startswith("P")]), 0)
@skipIfReproducer # Packet log is not populated during replay.
def test_write_registers_using_G_packets(self):
"""Test writing registers using 'G' packets"""

View File

@ -17,6 +17,7 @@ class TestGDBRemoteLoad(GDBRemoteTestBase):
self.assertTrue(address.IsValid())
self.assertEqual(".data", address.GetSection().GetName())
@skipIfReproducer # Packet log is not populated during replay.
def test_ram_load(self):
"""Test loading an object file to a target's ram"""
target = self.createTarget("a.yaml")
@ -28,6 +29,7 @@ class TestGDBRemoteLoad(GDBRemoteTestBase):
])
@skipIfXmlSupportMissing
@skipIfReproducer # Packet log is not populated during replay.
def test_flash_load(self):
"""Test loading an object file to a target's flash memory"""

View File

@ -126,7 +126,7 @@ class TestJLink6Armv7RegisterDefinition(GDBRemoteTestBase):
## the J-Link accepts a register write packet with just the GPRs
## defined.
def writeRegisters(self, registers_hex):
# Check that lldb returns the full 704 hex-byte register context,
# Check that lldb returns the full 704 hex-byte register context,
# or the 136 hex-byte general purpose register reg ctx.
if len(registers_hex) != 704 and len(register_hex) != 136:
return "E06"
@ -141,7 +141,7 @@ class TestJLink6Armv7RegisterDefinition(GDBRemoteTestBase):
def qfThreadInfo(self):
return "mdead"
def qC(self):
return ""
@ -184,13 +184,15 @@ class TestJLink6Armv7RegisterDefinition(GDBRemoteTestBase):
err = msp_valobj.GetError()
self.assertTrue(err.Fail(), "lldb should not be able to fetch the msp register")
val = b'\x11\x22\x33\x44'
error = lldb.SBError()
data = lldb.SBData()
data.SetData(error, val, lldb.eByteOrderBig, 4)
self.assertEqual(r1_valobj.SetData(data, error), True)
self.assertTrue(error.Success())
# Reproducers don't support SetData (yet) because it takes a void*.
if not configuration.is_reproducer():
val = b'\x11\x22\x33\x44'
error = lldb.SBError()
data = lldb.SBData()
data.SetData(error, val, lldb.eByteOrderBig, 4)
self.assertEqual(r1_valobj.SetData(data, error), True)
self.assertTrue(error.Success())
r1_valobj = process.GetThreadAtIndex(0).GetFrameAtIndex(0).FindRegister("r1")
self.assertEqual(r1_valobj.GetValueAsUnsigned(), 0x11223344)
r1_valobj = process.GetThreadAtIndex(0).GetFrameAtIndex(0).FindRegister("r1")
self.assertEqual(r1_valobj.GetValueAsUnsigned(), 0x11223344)