OSDN Git Service

[lldb/Reproducers] Update GDB remote client tests for passive replay
authorJonas Devlieghere <jonas@devlieghere.com>
Tue, 19 May 2020 20:07:05 +0000 (13:07 -0700)
committerJonas Devlieghere <jonas@devlieghere.com>
Tue, 19 May 2020 20:07:50 +0000 (13:07 -0700)
Tests that check the state of the server don't work when replayed
because the replay server replies to requests.

lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteClient.py
lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteLoad.py
lldb/test/API/functionalities/gdb_remote_client/TestJLink6Armv7RegisterDefinition.py

index 0fe3d62..053183b 100644 (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"""
 
index 59a11d4..f8cff39 100644 (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"""
 
index f0113fd..754ed44 100644 (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())
-
-        r1_valobj = process.GetThreadAtIndex(0).GetFrameAtIndex(0).FindRegister("r1")
-        self.assertEqual(r1_valobj.GetValueAsUnsigned(), 0x11223344)
+        # 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)