diff options
author | Zachary Turner <zturner@google.com> | 2016-01-13 21:21:49 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2016-01-13 21:21:49 +0000 |
commit | 19e2ea8fb621111684db21bb5e8f92474ca7d7f4 (patch) | |
tree | afda45d3d2addf6264df46387b0fe56de1f2fc55 /lldb/packages/Python/lldbsuite/test | |
parent | a4976b33d262cbbf2e813c22820fcaa4f90bd154 (diff) | |
download | bcm5719-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.py | 49 | ||||
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp | 3 |
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. } |