[Lldb-commits] [lldb] 8872c9d - [lldb] [gdb-server] Add tests for more vFile packets

Michał Górny via lldb-commits lldb-commits at lists.llvm.org
Wed Sep 8 02:01:46 PDT 2021


Author: Michał Górny
Date: 2021-09-08T10:58:12+02:00
New Revision: 8872c9d1ca2189c55fda0246890b42f67a460598

URL: https://github.com/llvm/llvm-project/commit/8872c9d1ca2189c55fda0246890b42f67a460598
DIFF: https://github.com/llvm/llvm-project/commit/8872c9d1ca2189c55fda0246890b42f67a460598.diff

LOG: [lldb] [gdb-server] Add tests for more vFile packets

Differential Revision: https://reviews.llvm.org/D107821

Added: 
    

Modified: 
    lldb/test/API/tools/lldb-server/TestGdbRemotePlatformFile.py

Removed: 
    


################################################################################
diff  --git a/lldb/test/API/tools/lldb-server/TestGdbRemotePlatformFile.py b/lldb/test/API/tools/lldb-server/TestGdbRemotePlatformFile.py
index 4fc688deae7f..9a7d197f123d 100644
--- a/lldb/test/API/tools/lldb-server/TestGdbRemotePlatformFile.py
+++ b/lldb/test/API/tools/lldb-server/TestGdbRemotePlatformFile.py
@@ -10,7 +10,6 @@
 
 import binascii
 import stat
-import tempfile
 
 
 class TestGdbRemotePlatformFile(GdbRemoteTestCaseBase):
@@ -68,20 +67,18 @@ def test_platform_file_wronly_fail(self):
         server = self.connect_to_debug_monitor()
         self.assertIsNotNone(server)
 
-        # create a temporary directory
-        with tempfile.TemporaryDirectory() as temp_dir:
-            temp_path = os.path.join(temp_dir, "test")
-            self.assertFalse(os.path.exists(temp_path))
+        temp_path = self.getBuildArtifact("test")
+        self.assertFalse(os.path.exists(temp_path))
 
-            # attempt to open the file without O_CREAT
-            self.do_handshake()
-            self.test_sequence.add_log_lines(
-                ["read packet: $vFile:open:%s,1,0#00" % (
-                    binascii.b2a_hex(temp_path.encode()).decode(),),
-                 {"direction": "send",
-                 "regex": r"^\$F-1,[0-9a-fA-F]+#[0-9a-fA-F]{2}$"}],
-                True)
-            self.expect_gdbremote_sequence()
+        # attempt to open the file without O_CREAT
+        self.do_handshake()
+        self.test_sequence.add_log_lines(
+            ["read packet: $vFile:open:%s,1,0#00" % (
+                binascii.b2a_hex(temp_path.encode()).decode(),),
+             {"direction": "send",
+             "regex": r"^\$F-1,[0-9a-fA-F]+#[0-9a-fA-F]{2}$"}],
+            True)
+        self.expect_gdbremote_sequence()
 
     @skipIfWindows
     @add_test_categories(["llgs"])
@@ -89,16 +86,97 @@ def test_platform_file_wronly_creat_excl_fail(self):
         server = self.connect_to_debug_monitor()
         self.assertIsNotNone(server)
 
-        with tempfile.NamedTemporaryFile() as temp_file:
-            # attempt to open the file with O_CREAT|O_EXCL
-            self.do_handshake()
-            self.test_sequence.add_log_lines(
-                ["read packet: $vFile:open:%s,a01,0#00" % (
-                    binascii.b2a_hex(temp_file.name.encode()).decode(),),
-                 {"direction": "send",
-                 "regex": r"^\$F-1,[0-9a-fA-F]+#[0-9a-fA-F]{2}$"}],
-                True)
-            self.expect_gdbremote_sequence()
+        temp_file = self.getBuildArtifact("test")
+        with open(temp_file, "wb"):
+            pass
+
+        # attempt to open the file with O_CREAT|O_EXCL
+        self.do_handshake()
+        self.test_sequence.add_log_lines(
+            ["read packet: $vFile:open:%s,a01,0#00" % (
+                binascii.b2a_hex(temp_file.encode()).decode(),),
+             {"direction": "send",
+             "regex": r"^\$F-1,[0-9a-fA-F]+#[0-9a-fA-F]{2}$"}],
+            True)
+        self.expect_gdbremote_sequence()
+
+    @skipIfWindows
+    @add_test_categories(["llgs"])
+    def test_platform_file_size(self):
+        server = self.connect_to_debug_monitor()
+        self.assertIsNotNone(server)
+
+        temp_path = self.getBuildArtifact("test")
+        test_data = b"test data of some length"
+        with open(temp_path, "wb") as temp_file:
+            temp_file.write(test_data)
+
+        self.do_handshake()
+        self.test_sequence.add_log_lines(
+            ["read packet: $vFile:size:%s#00" % (
+                binascii.b2a_hex(temp_path.encode()).decode(),),
+             {"direction": "send",
+             "regex": r"^\$F([0-9a-fA-F]+)+#[0-9a-fA-F]{2}$",
+             "capture": {1: "size"}}],
+            True)
+        context = self.expect_gdbremote_sequence()
+        self.assertEqual(int(context["size"], 16), len(test_data))
+
+    @skipIfWindows
+    @add_test_categories(["llgs"])
+    def test_platform_file_mode(self):
+        server = self.connect_to_debug_monitor()
+        self.assertIsNotNone(server)
+
+        temp_path = self.getBuildArtifact("test")
+        test_mode = 0o751
+
+        with open(temp_path, "wb") as temp_file:
+            os.chmod(temp_file.fileno(), test_mode)
+
+        self.do_handshake()
+        self.test_sequence.add_log_lines(
+            ["read packet: $vFile:mode:%s#00" % (
+                binascii.b2a_hex(temp_path.encode()).decode(),),
+             {"direction": "send",
+             "regex": r"^\$F([0-9a-fA-F]+)+#[0-9a-fA-F]{2}$",
+             "capture": {1: "mode"}}],
+            True)
+        context = self.expect_gdbremote_sequence()
+        self.assertEqual(int(context["mode"], 16), test_mode)
+
+    @skipIfWindows
+    @add_test_categories(["llgs"])
+    def test_platform_file_exists(self):
+        server = self.connect_to_debug_monitor()
+        self.assertIsNotNone(server)
+
+        temp_path = self.getBuildArtifact("test")
+        with open(temp_path, "wb"):
+            pass
+
+        self.do_handshake()
+        self.test_sequence.add_log_lines(
+            ["read packet: $vFile:exists:%s#00" % (
+                binascii.b2a_hex(temp_path.encode()).decode(),),
+             "send packet: $F,1#00"],
+            True)
+        self.expect_gdbremote_sequence()
+
+    @skipIfWindows
+    @add_test_categories(["llgs"])
+    def test_platform_file_exists_not(self):
+        server = self.connect_to_debug_monitor()
+        self.assertIsNotNone(server)
+
+        test_path = self.getBuildArtifact("nonexist")
+        self.do_handshake()
+        self.test_sequence.add_log_lines(
+            ["read packet: $vFile:exists:%s#00" % (
+                binascii.b2a_hex(test_path.encode()).decode(),),
+             "send packet: $F,0#00"],
+            True)
+        self.expect_gdbremote_sequence()
 
     def expect_error(self):
         self.test_sequence.add_log_lines(
@@ -132,100 +210,93 @@ def vFile_test(self, read=False, write=False, append=False, trunc=False,
         self.assertIsNotNone(server)
 
         # create a temporary file with some data
+        temp_path = self.getBuildArtifact("test")
         test_data = 'some test data longer than 16 bytes\n'
+
         if creat:
-            temp_dir = tempfile.TemporaryDirectory()
+            self.assertFalse(os.path.exists(temp_path))
         else:
-            temp_file = tempfile.NamedTemporaryFile()
-
-        try:
-            if creat:
-                temp_path = os.path.join(temp_dir.name, "test")
-                self.assertFalse(os.path.exists(temp_path))
-            else:
+            with open(temp_path, "wb") as temp_file:
                 temp_file.write(test_data.encode())
-                temp_file.flush()
-                temp_path = temp_file.name
 
-            # open the file for reading
-            self.do_handshake()
-            self.test_sequence.add_log_lines(
-                ["read packet: $vFile:open:%s,%x,1a0#00" % (
-                    binascii.b2a_hex(temp_path.encode()).decode(),
-                    mode),
-                 {"direction": "send",
-                 "regex": r"^\$F([0-9a-fA-F]+)#[0-9a-fA-F]{2}$",
-                 "capture": {1: "fd"}}],
-                True)
+        # open the file for reading
+        self.do_handshake()
+        self.test_sequence.add_log_lines(
+            ["read packet: $vFile:open:%s,%x,1a0#00" % (
+                binascii.b2a_hex(temp_path.encode()).decode(),
+                mode),
+             {"direction": "send",
+             "regex": r"^\$F([0-9a-fA-F]+)#[0-9a-fA-F]{2}$",
+             "capture": {1: "fd"}}],
+            True)
 
-            context = self.expect_gdbremote_sequence()
-            self.assertIsNotNone(context)
-            fd = int(context["fd"], 16)
+        context = self.expect_gdbremote_sequence()
+        self.assertIsNotNone(context)
+        fd = int(context["fd"], 16)
 
-            # read data from the file
-            self.reset_test_sequence()
+        # read data from the file
+        self.reset_test_sequence()
+        self.test_sequence.add_log_lines(
+            ["read packet: $vFile:pread:%x,11,10#00" % (fd,)],
+            True)
+        if read:
             self.test_sequence.add_log_lines(
-                ["read packet: $vFile:pread:%x,11,10#00" % (fd,)],
+                [{"direction": "send",
+                 "regex": r"^\$F([0-9a-fA-F]+);(.*)#[0-9a-fA-F]{2}$",
+                 "capture": {1: "size", 2: "data"}}],
                 True)
-            if read:
-                self.test_sequence.add_log_lines(
-                    [{"direction": "send",
-                     "regex": r"^\$F([0-9a-fA-F]+);(.*)#[0-9a-fA-F]{2}$",
-                     "capture": {1: "size", 2: "data"}}],
-                    True)
-                context = self.expect_gdbremote_sequence()
-                self.assertIsNotNone(context)
-                if trunc:
-                    self.assertEqual(context["size"], "0")
-                    self.assertEqual(context["data"], "")
-                else:
-                    self.assertEqual(context["size"], "11")  # hex
-                    self.assertEqual(context["data"], test_data[0x10:0x10 + 0x11])
+            context = self.expect_gdbremote_sequence()
+            self.assertIsNotNone(context)
+            if trunc:
+                self.assertEqual(context["size"], "0")
+                self.assertEqual(context["data"], "")
             else:
-                self.expect_error()
-
-            # another offset
-            if read and not trunc:
-                self.reset_test_sequence()
-                self.test_sequence.add_log_lines(
-                    ["read packet: $vFile:pread:%x,6,3#00" % (fd,),
-                     {"direction": "send",
-                     "regex": r"^\$F([0-9a-fA-F]+);(.+)#[0-9a-fA-F]{2}$",
-                     "capture": {1: "size", 2: "data"}}],
-                    True)
-                context = self.expect_gdbremote_sequence()
-                self.assertIsNotNone(context)
-                self.assertEqual(context["size"], "6")  # hex
-                self.assertEqual(context["data"], test_data[3:3 + 6])
-
-            # write data to the file
+                self.assertEqual(context["size"], "11")  # hex
+                self.assertEqual(context["data"], test_data[0x10:0x10 + 0x11])
+        else:
+            self.expect_error()
+
+        # another offset
+        if read and not trunc:
             self.reset_test_sequence()
             self.test_sequence.add_log_lines(
-                ["read packet: $vFile:pwrite:%x,6,somedata#00" % (fd,)],
+                ["read packet: $vFile:pread:%x,6,3#00" % (fd,),
+                 {"direction": "send",
+                 "regex": r"^\$F([0-9a-fA-F]+);(.+)#[0-9a-fA-F]{2}$",
+                 "capture": {1: "size", 2: "data"}}],
                 True)
-            if write:
-                self.test_sequence.add_log_lines(
-                    ["send packet: $F8#00"],
-                    True)
-                self.expect_gdbremote_sequence()
-            else:
-                self.expect_error()
+            context = self.expect_gdbremote_sequence()
+            self.assertIsNotNone(context)
+            self.assertEqual(context["size"], "6")  # hex
+            self.assertEqual(context["data"], test_data[3:3 + 6])
 
-            # close the file
-            self.reset_test_sequence()
+        # write data to the file
+        self.reset_test_sequence()
+        self.test_sequence.add_log_lines(
+            ["read packet: $vFile:pwrite:%x,6,somedata#00" % (fd,)],
+            True)
+        if write:
             self.test_sequence.add_log_lines(
-                ["read packet: $vFile:close:%x#00" % (fd,),
-                 "send packet: $F0#00"],
+                ["send packet: $F8#00"],
                 True)
             self.expect_gdbremote_sequence()
+        else:
+            self.expect_error()
 
-            if write:
-                # check if the data was actually written
+        # close the file
+        self.reset_test_sequence()
+        self.test_sequence.add_log_lines(
+            ["read packet: $vFile:close:%x#00" % (fd,),
+             "send packet: $F0#00"],
+            True)
+        self.expect_gdbremote_sequence()
+
+        if write:
+            # check if the data was actually written
+            with open(temp_path, "rb") as temp_file:
                 if creat:
-                    temp_file = open(temp_path, "rb")
                     self.assertEqual(os.fstat(temp_file.fileno()).st_mode & 0o7777,
                                      0o640)
-                temp_file.seek(0)
                 data = test_data.encode()
                 if trunc or creat:
                     data = b"\0" * 6 + b"somedata"
@@ -234,8 +305,3 @@ def vFile_test(self, read=False, write=False, append=False, trunc=False,
                 else:
                     data = data[:6] + b"somedata" + data[6 + 8:]
                 self.assertEqual(temp_file.read(), data)
-        finally:
-            if creat:
-                temp_dir.cleanup()
-            else:
-                temp_file.close()


        


More information about the lldb-commits mailing list