[Lldb-commits] [lldb] [lldb] Fix the test TestGdbRemotePlatformFile (PR #91918)
Dmitry Vasilyev via lldb-commits
lldb-commits at lists.llvm.org
Sun May 12 23:35:27 PDT 2024
https://github.com/slydiman created https://github.com/llvm/llvm-project/pull/91918
It is necessary to transfer the test file to/from the really remote target (for example Windows host and Linux target). Also ignore chmod check in case of the Windows host.
>From 24d0eb93672570aec4e53dfcf10b53eac8c6acb9 Mon Sep 17 00:00:00 2001
From: Dmitry Vasilyev <dvassiliev at accesssoftek.com>
Date: Mon, 13 May 2024 10:34:04 +0400
Subject: [PATCH] [lldb] Fix the test TestGdbRemotePlatformFile
It is necessary to transfer the test file to/from the really remote target (for example Windows host and Linux target).
Also ignore chmod check in case of Windows host.
---
.../lldb-server/TestGdbRemotePlatformFile.py | 47 +++++++++++++++++--
1 file changed, 44 insertions(+), 3 deletions(-)
diff --git a/lldb/test/API/tools/lldb-server/TestGdbRemotePlatformFile.py b/lldb/test/API/tools/lldb-server/TestGdbRemotePlatformFile.py
index 4c8ce01e8ba31..13274696a9a5c 100644
--- a/lldb/test/API/tools/lldb-server/TestGdbRemotePlatformFile.py
+++ b/lldb/test/API/tools/lldb-server/TestGdbRemotePlatformFile.py
@@ -1,6 +1,7 @@
# lldb test suite imports
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import TestBase
+from lldbsuite.test import lldbutil
# gdb-remote-specific imports
import lldbgdbserverutils
@@ -108,6 +109,20 @@ def test_platform_file_wronly_fail(self):
)
self.expect_gdbremote_sequence()
+ def remote_install(self, path, filename="test"):
+ if lldb.remote_platform:
+ remote_path = lldbutil.append_to_process_working_directory(self, filename)
+ err = lldb.remote_platform.Install(
+ lldb.SBFileSpec(path, True), lldb.SBFileSpec(remote_path, False)
+ )
+ if err.Fail():
+ raise Exception(
+ "remote_platform.Install('%s', '%s') failed: %s"
+ % (path, remote_path, err)
+ )
+ path = remote_path
+ return path
+
@skipIfWindows
@add_test_categories(["llgs"])
def test_platform_file_wronly_creat_excl_fail(self):
@@ -117,6 +132,7 @@ def test_platform_file_wronly_creat_excl_fail(self):
temp_file = self.getBuildArtifact("test")
with open(temp_file, "wb"):
pass
+ temp_file = self.remote_install(temp_file)
# attempt to open the file with O_CREAT|O_EXCL
self.do_handshake()
@@ -140,6 +156,7 @@ def test_platform_file_size(self):
test_data = b"test data of some length"
with open(temp_path, "wb") as temp_file:
temp_file.write(test_data)
+ temp_path = self.remote_install(temp_path)
self.do_handshake()
self.test_sequence.add_log_lines(
@@ -167,7 +184,11 @@ def test_platform_file_mode(self):
test_mode = 0o751
with open(temp_path, "wb") as temp_file:
- os.chmod(temp_file.fileno(), test_mode)
+ if lldbplatformutil.getHostPlatform() == "windows":
+ test_mode = 0o700
+ else:
+ os.chmod(temp_file.fileno(), test_mode)
+ temp_path = self.remote_install(temp_path)
self.do_handshake()
self.test_sequence.add_log_lines(
@@ -213,6 +234,7 @@ def test_platform_file_exists(self):
temp_path = self.getBuildArtifact("test")
with open(temp_path, "wb"):
pass
+ temp_path = self.remote_install(temp_path)
self.do_handshake()
self.test_sequence.add_log_lines(
@@ -244,6 +266,10 @@ def test_platform_file_exists_not(self):
self.expect_gdbremote_sequence()
@skipIfWindows
+ # FIXME: lldb.remote_platform.Install() cannot copy opened temp file on Windows.
+ # It is possible to use tempfile.NamedTemporaryFile(..., delete=False) and
+ # delete the temp file manually at the end.
+ @skipIf(hostoslist=["windows"])
@add_test_categories(["llgs"])
def test_platform_file_fstat(self):
server = self.connect_to_debug_monitor()
@@ -252,12 +278,13 @@ def test_platform_file_fstat(self):
with tempfile.NamedTemporaryFile() as temp_file:
temp_file.write(b"some test data for stat")
temp_file.flush()
+ temp_path = self.remote_install(temp_file.name, "temp")
self.do_handshake()
self.test_sequence.add_log_lines(
[
"read packet: $vFile:open:%s,0,0#00"
- % (binascii.b2a_hex(temp_file.name.encode()).decode(),),
+ % (binascii.b2a_hex(temp_path.encode()).decode(),),
{
"direction": "send",
"regex": r"^\$F([0-9a-fA-F]+)#[0-9a-fA-F]{2}$",
@@ -359,9 +386,12 @@ def vFile_test(
if creat:
self.assertFalse(os.path.exists(temp_path))
+ if lldb.remote_platform:
+ temp_path = lldbutil.append_to_process_working_directory(self, "test")
else:
with open(temp_path, "wb") as temp_file:
temp_file.write(test_data.encode())
+ temp_path = self.remote_install(temp_path)
# open the file for reading
self.do_handshake()
@@ -448,8 +478,19 @@ def vFile_test(
if write:
# check if the data was actually written
+ if lldb.remote_platform:
+ local_path = self.getBuildArtifact("file_from_target")
+ error = lldb.remote_platform.Get(
+ lldb.SBFileSpec(temp_path, False), lldb.SBFileSpec(local_path, True)
+ )
+ self.assertTrue(
+ error.Success(),
+ "Reading file {0} failed: {1}".format(temp_path, error),
+ )
+ temp_path = local_path
+
with open(temp_path, "rb") as temp_file:
- if creat:
+ if creat and lldbplatformutil.getHostPlatform() != "windows":
self.assertEqual(
os.fstat(temp_file.fileno()).st_mode & 0o7777, 0o640
)
More information about the lldb-commits
mailing list