xref: /llvm-project/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py (revision 9929cfbcd5bf5402fbb180e5bb3f917f50bbdf94)
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