1from gdbclientutils import * 2 3class TestGDBRemotePlatformFile(GDBRemoteTestBase): 4 5 def test_file(self): 6 """Test mock operations on a remote file""" 7 8 class Responder(MockGDBServerResponder): 9 def vFile(self, packet): 10 if packet.startswith("vFile:open:"): 11 return "F10" 12 elif packet.startswith("vFile:pread:"): 13 return "Fd;frobnicator" 14 elif packet.startswith("vFile:pwrite:"): 15 return "Fa" 16 elif packet.startswith("vFile:close:"): 17 return "F0" 18 return "F-1,16" 19 20 self.server.responder = Responder() 21 22 try: 23 self.runCmd("platform select remote-gdb-server") 24 self.runCmd("platform connect connect://" + 25 self.server.get_connect_address()) 26 self.assertTrue(self.dbg.GetSelectedPlatform().IsConnected()) 27 28 self.match("platform file open /some/file.txt -v 0755", 29 [r"File Descriptor = 16"]) 30 self.match("platform file read 16 -o 11 -c 13", 31 [r"Return = 11\nData = \"frobnicator\""]) 32 self.match("platform file write 16 -o 11 -d teststring", 33 [r"Return = 10"]) 34 self.match("platform file close 16", 35 [r"file 16 closed."]) 36 self.assertPacketLogContains([ 37 "vFile:open:2f736f6d652f66696c652e747874,0000020a,000001ed", 38 "vFile:pread:10,d,b", 39 "vFile:pwrite:10,b,teststring", 40 "vFile:close:10", 41 ]) 42 finally: 43 self.dbg.GetSelectedPlatform().DisconnectRemote() 44 45 def test_file_fail(self): 46 """Test mocked failures of remote operations""" 47 48 class Responder(MockGDBServerResponder): 49 def vFile(self, packet): 50 return "F-1,16" 51 52 self.server.responder = Responder() 53 54 try: 55 self.runCmd("platform select remote-gdb-server") 56 self.runCmd("platform connect connect://" + 57 self.server.get_connect_address()) 58 self.assertTrue(self.dbg.GetSelectedPlatform().IsConnected()) 59 60 self.match("platform file open /some/file.txt -v 0755", 61 [r"error: Invalid argument"], 62 error=True) 63 # TODO: fix the commands to fail on unsuccessful result 64 self.match("platform file read 16 -o 11 -c 13", 65 [r"Return = -1\nData = \"\""]) 66 self.match("platform file write 16 -o 11 -d teststring", 67 [r"Return = -1"]) 68 self.match("platform file close 16", 69 [r"error: Invalid argument"], 70 error=True) 71 self.assertPacketLogContains([ 72 "vFile:open:2f736f6d652f66696c652e747874,0000020a,000001ed", 73 "vFile:pread:10,d,b", 74 "vFile:pwrite:10,b,teststring", 75 "vFile:close:10", 76 ]) 77 finally: 78 self.dbg.GetSelectedPlatform().DisconnectRemote() 79