summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2016-01-13 21:21:49 +0000
committerZachary Turner <zturner@google.com>2016-01-13 21:21:49 +0000
commit19e2ea8fb621111684db21bb5e8f92474ca7d7f4 (patch)
treeafda45d3d2addf6264df46387b0fe56de1f2fc55 /lldb/packages/Python/lldbsuite/test
parenta4976b33d262cbbf2e813c22820fcaa4f90bd154 (diff)
downloadbcm5719-llvm-19e2ea8fb621111684db21bb5e8f92474ca7d7f4.tar.gz
bcm5719-llvm-19e2ea8fb621111684db21bb5e8f92474ca7d7f4.zip
Fix TestProcessLaunch for Python 3.
There were a number of problems preventing this from working: 1. The SWIG typemaps for converting Python lists to and from C++ arrays were not updated for Python 3. So they were doing things like PyString_Check instead of using the PythonString from PythonDataObjects. 2. ProcessLauncherWindows was ignoring the environment completely. So any test that involved launching an inferior with any kind of environment variable would have failed. 3. The test itself was using process.GetSTDOUT(), which isn't implemented on Windows. So this was changed to save the value of the environment variable in a local variable and have the debugger look at the value of the variable. llvm-svn: 257669
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test')
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py49
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp3
2 files changed, 32 insertions, 20 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py b/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py
index 3131000be42..0eeb6ff9379 100644
--- a/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py
@@ -4,12 +4,15 @@ Test lldb process launch flags.
from __future__ import print_function
+import copy
+import os
+import time
-
-import os, time
import lldb
from lldbsuite.test.lldbtest import *
+import six
+
class ProcessLaunchTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
@@ -17,9 +20,18 @@ class ProcessLaunchTestCase(TestBase):
def setUp(self):
# Call super's setUp().
TestBase.setUp(self)
+ self.stdout_redirect_file = 'lldb-stdout-redirect.txt'
# disable "There is a running process, kill it and restart?" prompt
self.runCmd("settings set auto-confirm true")
- self.addTearDownHook(lambda: self.runCmd("settings clear auto-confirm"))
+ def tearDown(self):
+ self.runCmd("settings clear auto-confirm")
+
+ try:
+ os.unlink(self.stdout_redirect_file)
+ except:
+ pass
+
+ super().tearDown()
@not_remote_testsuite_ready
def test_io (self):
@@ -180,8 +192,9 @@ class ProcessLaunchTestCase(TestBase):
self.fail(err_msg)
def test_environment_with_special_char (self):
- """Test that environment variables containing '*' and '}' are communicated correctly to the lldb-server."""
- d = {'CXX_SOURCES' : 'print_env.cpp'}
+ """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 = os.path.join (os.getcwd(), "a.out")
@@ -189,19 +202,19 @@ class ProcessLaunchTestCase(TestBase):
evil_var = 'INIT*MIDDLE}TAIL'
target = self.dbg.CreateTarget(exe)
- process = target.LaunchSimple(None, ['EVIL=' + evil_var], self.get_process_working_directory())
- self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED)
-
- out = process.GetSTDOUT(len(evil_var))
- self.assertIsNotNone(out, "Encountered an error reading the process's output")
+ main_source_spec = lldb.SBFileSpec(source)
+ breakpoint = target.BreakpointCreateBySourceRegex('// Set breakpoint here.', main_source_spec)
- out = out[:len(evil_var)]
- if out != evil_var:
- self.fail('The environment variable was mis-coded: %s\n' % repr(out))
+ process = target.LaunchSimple(None, ['EVIL=' + evil_var], self.get_process_working_directory())
+ self.assertEqual(process.GetState(), lldb.eStateStopped, PROCESS_STOPPED)
- newline = process.GetSTDOUT(1)
- self.assertIsNotNone(newline, "Encountered an error reading the process's output")
+ 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('"')
- newline = newline[0]
- if newline != '\r' and newline != '\n':
- self.fail('Garbage at end of environment variable')
+ self.assertEqual(value, evil_var)
+ process.Continue()
+ self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED)
+ pass \ No newline at end of file
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp b/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp
index cbb9b217591..8c6df8ea01a 100644
--- a/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp
@@ -5,7 +5,6 @@
int main (int argc, char **argv)
{
char *evil = getenv("EVIL");
- puts(evil);
- return 0;
+ return 0; // Set breakpoint here.
}
OpenPOWER on IntegriCloud