aboutsummaryrefslogtreecommitdiff
path: root/lldb/test/API/python_api
diff options
context:
space:
mode:
authorWanyi <kusmour@gmail.com>2024-10-29 14:22:51 -0400
committerGitHub <noreply@github.com>2024-10-29 14:22:51 -0400
commitefc6d33be9f4b4d0f0e8d3d5f198f2616b75792b (patch)
treedcfab539e0adfbdec7c9eaa0471c22f8ea5e4243 /lldb/test/API/python_api
parent8e14c6c172b122203f46a9ad114d51c74535cbb7 (diff)
downloadllvm-efc6d33be9f4b4d0f0e8d3d5f198f2616b75792b.zip
llvm-efc6d33be9f4b4d0f0e8d3d5f198f2616b75792b.tar.gz
llvm-efc6d33be9f4b4d0f0e8d3d5f198f2616b75792b.tar.bz2
[lldb] Fix write only file action to truncate the file (#112657)
When `FileAction` opens file with write access, it doesn't clear the file nor append to the end of the file if it already exists. Instead, it writes from cursor index 0. For example, by using the settings `target.output-path` and `target.error-path`, lldb will redirect process stdout/stderr to files. It then calls this function to write to the files which the above symptoms appear. ## Test - Added unit test checking the file flags - Added 2 api tests checking - File content overwritten if the file path already exists - Stdout and stderr redirection to the same file doesn't change its behavior
Diffstat (limited to 'lldb/test/API/python_api')
-rw-r--r--lldb/test/API/python_api/process/io/TestProcessIO.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/lldb/test/API/python_api/process/io/TestProcessIO.py b/lldb/test/API/python_api/process/io/TestProcessIO.py
index 5bb91d2..3b5c7c4 100644
--- a/lldb/test/API/python_api/process/io/TestProcessIO.py
+++ b/lldb/test/API/python_api/process/io/TestProcessIO.py
@@ -95,6 +95,36 @@ class ProcessIOTestCase(TestBase):
error = self.read_error_file_and_delete()
self.check_process_output(output, error)
+ @skipIfWindows # stdio manipulation unsupported on Windows
+ @expectedFlakeyLinux(bugnumber="llvm.org/pr26437")
+ @skipIfDarwinEmbedded # debugserver can't create/write files on the device
+ def test_stdout_stderr_redirection_to_existing_files(self):
+ """Exercise SBLaunchInfo::AddOpenFileAction() for STDOUT and STDERR without redirecting STDIN to output files already exist."""
+ self.setup_test()
+ self.build()
+ self.create_target()
+ self.write_file_with_placeholder(self.output_file)
+ self.write_file_with_placeholder(self.error_file)
+ self.redirect_stdout()
+ self.redirect_stderr()
+ self.run_process(True)
+ output = self.read_output_file_and_delete()
+ error = self.read_error_file_and_delete()
+ self.check_process_output(output, error)
+
+ def write_file_with_placeholder(self, target_file):
+ placeholder = "This content should be overwritten."
+ if lldb.remote_platform:
+ self.runCmd(
+ 'platform file write "{target}" -d "{data}"'.format(
+ target=target_file, data=placeholder
+ )
+ )
+ else:
+ f = open(target_file, "w")
+ f.write(placeholder)
+ f.close()
+
# target_file - path on local file system or remote file system if running remote
# local_file - path on local system
def read_file_and_delete(self, target_file, local_file):