summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch')
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/Makefile5
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/TestProcessLaunch.py205
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/input-file.txt2
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/main.cpp17
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/print_cwd.cpp21
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/print_env.cpp10
6 files changed, 260 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/Makefile b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/Makefile
new file mode 100644
index 00000000000..eff77274c7b
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/Makefile
@@ -0,0 +1,5 @@
+CXX_SOURCES := main.cpp
+#CXX_SOURCES := print-cwd.cpp
+
+include Makefile.rules
+
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/TestProcessLaunch.py b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/TestProcessLaunch.py
new file mode 100644
index 00000000000..a2b27c2e590
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/TestProcessLaunch.py
@@ -0,0 +1,205 @@
+"""
+Test lldb process launch flags.
+"""
+
+from __future__ import print_function
+
+import os
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+import six
+
+
+class ProcessLaunchTestCase(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+ NO_DEBUG_INFO_TESTCASE = True
+
+ def setUp(self):
+ # Call super's setUp().
+ TestBase.setUp(self)
+ self.runCmd("settings set auto-confirm true")
+
+ def tearDown(self):
+ self.runCmd("settings clear auto-confirm")
+ TestBase.tearDown(self)
+
+ @not_remote_testsuite_ready
+ def test_io(self):
+ """Test that process launch I/O redirection flags work properly."""
+ self.build()
+ exe = self.getBuildArtifact("a.out")
+ self.expect("file " + exe,
+ patterns=["Current executable set to .*a.out"])
+
+ in_file = os.path.join(self.getSourceDir(), "input-file.txt")
+ out_file = lldbutil.append_to_process_working_directory(self, "output-test.out")
+ err_file = lldbutil.append_to_process_working_directory(self, "output-test.err")
+
+ # Make sure the output files do not exist before launching the process
+ try:
+ os.remove(out_file)
+ except OSError:
+ pass
+
+ try:
+ os.remove(err_file)
+ except OSError:
+ pass
+
+ launch_command = "process launch -i '{0}' -o '{1}' -e '{2}' -w '{3}'".format(
+ in_file, out_file, err_file, self.get_process_working_directory())
+
+ if lldb.remote_platform:
+ self.runCmd('platform put-file "{local}" "{remote}"'.format(
+ local=in_file, remote=in_file))
+
+ self.expect(launch_command,
+ patterns=["Process .* launched: .*a.out"])
+
+ success = True
+ err_msg = ""
+
+ out = lldbutil.read_file_on_target(self, out_file)
+ if out != "This should go to stdout.\n":
+ success = False
+ err_msg = err_msg + " ERROR: stdout file does not contain correct output.\n"
+
+
+ err = lldbutil.read_file_on_target(self, err_file)
+ if err != "This should go to stderr.\n":
+ success = False
+ err_msg = err_msg + " ERROR: stderr file does not contain correct output.\n"
+
+ if not success:
+ self.fail(err_msg)
+
+ # rdar://problem/9056462
+ # The process launch flag '-w' for setting the current working directory
+ # not working?
+ @not_remote_testsuite_ready
+ @expectedFailureAll(oslist=["linux"], bugnumber="llvm.org/pr20265")
+ @expectedFailureNetBSD
+ def test_set_working_dir_nonexisting(self):
+ """Test that '-w dir' fails to set the working dir when running the inferior with a dir which doesn't exist."""
+ d = {'CXX_SOURCES': 'print_cwd.cpp'}
+ self.build(dictionary=d)
+ self.setTearDownCleanup(d)
+ exe = self.getBuildArtifact("a.out")
+ self.runCmd("file " + exe)
+
+ mywd = 'my_working_dir'
+ out_file_name = "my_working_dir_test.out"
+ err_file_name = "my_working_dir_test.err"
+
+ my_working_dir_path = self.getBuildArtifact(mywd)
+ out_file_path = os.path.join(my_working_dir_path, out_file_name)
+ err_file_path = os.path.join(my_working_dir_path, err_file_name)
+
+ # Check that we get an error when we have a nonexisting path
+ invalid_dir_path = mywd + 'z'
+ launch_command = "process launch -w %s -o %s -e %s" % (
+ invalid_dir_path, out_file_path, err_file_path)
+
+ self.expect(
+ launch_command, error=True, patterns=[
+ "error:.* No such file or directory: %s" %
+ invalid_dir_path])
+
+ @not_remote_testsuite_ready
+ def test_set_working_dir_existing(self):
+ """Test that '-w dir' sets the working dir when running the inferior."""
+ d = {'CXX_SOURCES': 'print_cwd.cpp'}
+ self.build(dictionary=d)
+ self.setTearDownCleanup(d)
+ exe = self.getBuildArtifact("a.out")
+ self.runCmd("file " + exe)
+
+ mywd = 'my_working_dir'
+ out_file_name = "my_working_dir_test.out"
+ err_file_name = "my_working_dir_test.err"
+
+ my_working_dir_path = self.getBuildArtifact(mywd)
+ lldbutil.mkdir_p(my_working_dir_path)
+ out_file_path = os.path.join(my_working_dir_path, out_file_name)
+ err_file_path = os.path.join(my_working_dir_path, err_file_name)
+
+ # Make sure the output files do not exist before launching the process
+ try:
+ os.remove(out_file_path)
+ os.remove(err_file_path)
+ except OSError:
+ pass
+
+ launch_command = "process launch -w %s -o %s -e %s" % (
+ my_working_dir_path, out_file_path, err_file_path)
+
+ self.expect(launch_command,
+ patterns=["Process .* launched: .*a.out"])
+
+ success = True
+ err_msg = ""
+
+ # Check to see if the 'stdout' file was created
+ try:
+ out_f = open(out_file_path)
+ except IOError:
+ success = False
+ err_msg = err_msg + "ERROR: stdout file was not created.\n"
+ else:
+ # Check to see if the 'stdout' file contains the right output
+ line = out_f.readline()
+ if self.TraceOn():
+ print("line:", line)
+ if not re.search(mywd, line):
+ success = False
+ err_msg = err_msg + "The current working directory was not set correctly.\n"
+ out_f.close()
+
+ # Try to delete the 'stdout' and 'stderr' files
+ try:
+ os.remove(out_file_path)
+ os.remove(err_file_path)
+ except OSError:
+ pass
+
+ if not success:
+ self.fail(err_msg)
+
+ def test_environment_with_special_char(self):
+ """Test that environment variables containing '*' and '}' are handled correctly by the inferior."""
+ source = 'print_env.cpp'
+ d = {'CXX_SOURCES': source}
+ self.build(dictionary=d)
+ self.setTearDownCleanup(d)
+ exe = self.getBuildArtifact("a.out")
+
+ evil_var = 'INIT*MIDDLE}TAIL'
+
+ target = self.dbg.CreateTarget(exe)
+ main_source_spec = lldb.SBFileSpec(source)
+ breakpoint = target.BreakpointCreateBySourceRegex(
+ '// Set breakpoint here.', main_source_spec)
+
+ process = target.LaunchSimple(None,
+ ['EVIL=' + evil_var],
+ self.get_process_working_directory())
+ self.assertEqual(
+ process.GetState(),
+ lldb.eStateStopped,
+ PROCESS_STOPPED)
+
+ threads = lldbutil.get_threads_stopped_at_breakpoint(
+ process, breakpoint)
+ self.assertEqual(len(threads), 1)
+ frame = threads[0].GetFrameAtIndex(0)
+ sbvalue = frame.EvaluateExpression("evil")
+ value = sbvalue.GetSummary().strip('"')
+
+ self.assertEqual(value, evil_var)
+ process.Continue()
+ self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED)
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/input-file.txt b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/input-file.txt
new file mode 100644
index 00000000000..cc269ba0ff8
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/input-file.txt
@@ -0,0 +1,2 @@
+This should go to stdout.
+This should go to stderr.
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/main.cpp b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/main.cpp
new file mode 100644
index 00000000000..f2035d55167
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/main.cpp
@@ -0,0 +1,17 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main (int argc, char **argv)
+{
+ char buffer[1024];
+
+ fgets (buffer, sizeof (buffer), stdin);
+ fprintf (stdout, "%s", buffer);
+
+
+ fgets (buffer, sizeof (buffer), stdin);
+ fprintf (stderr, "%s", buffer);
+
+ return 0;
+}
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/print_cwd.cpp b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/print_cwd.cpp
new file mode 100644
index 00000000000..b4b073fbcb8
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/print_cwd.cpp
@@ -0,0 +1,21 @@
+#include <stdio.h>
+
+#ifdef _MSC_VER
+#define _CRT_NONSTDC_NO_WARNINGS
+#include <direct.h>
+#undef getcwd
+#define getcwd(buffer, length) _getcwd(buffer, length)
+#else
+#include <unistd.h>
+#endif
+
+int
+main (int argc, char **argv)
+{
+ char buffer[1024];
+
+ fprintf(stdout, "stdout: %s\n", getcwd(buffer, 1024));
+ fprintf(stderr, "stderr: %s\n", getcwd(buffer, 1024));
+
+ return 0;
+}
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/print_env.cpp b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/print_env.cpp
new file mode 100644
index 00000000000..8c6df8ea01a
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/process/launch/print_env.cpp
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+int main (int argc, char **argv)
+{
+ char *evil = getenv("EVIL");
+
+ return 0; // Set breakpoint here.
+}