diff options
author | dim <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 |
commit | 78b9749c0a4ea980a8b934645da6ae98fcc665e8 (patch) | |
tree | dd2a1ddf0476664c2b823409c36cbccd52662ca7 /packages/Python/lldbsuite/test/driver/batch_mode | |
parent | 60cb593f9d55fa5ca7a5372b731f2330345b4b9a (diff) | |
download | FreeBSD-src-78b9749c0a4ea980a8b934645da6ae98fcc665e8.zip FreeBSD-src-78b9749c0a4ea980a8b934645da6ae98fcc665e8.tar.gz |
Vendor import of lldb trunk r256945:
https://llvm.org/svn/llvm-project/lldb/trunk@256945
Diffstat (limited to 'packages/Python/lldbsuite/test/driver/batch_mode')
3 files changed, 109 insertions, 0 deletions
diff --git a/packages/Python/lldbsuite/test/driver/batch_mode/Makefile b/packages/Python/lldbsuite/test/driver/batch_mode/Makefile new file mode 100644 index 0000000..0d70f25 --- /dev/null +++ b/packages/Python/lldbsuite/test/driver/batch_mode/Makefile @@ -0,0 +1,5 @@ +LEVEL = ../../make + +C_SOURCES := main.c + +include $(LEVEL)/Makefile.rules diff --git a/packages/Python/lldbsuite/test/driver/batch_mode/TestBatchMode.py b/packages/Python/lldbsuite/test/driver/batch_mode/TestBatchMode.py new file mode 100644 index 0000000..b5ff88c --- /dev/null +++ b/packages/Python/lldbsuite/test/driver/batch_mode/TestBatchMode.py @@ -0,0 +1,89 @@ +""" +Test that the lldb driver's batch mode works correctly. +""" + +from __future__ import print_function + + + +import os, time +import lldb +from lldbsuite.test.lldbtest import * + +class DriverBatchModeTest (TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @skipIfRemote # test not remote-ready llvm.org/pr24813 + @expectedFlakeyFreeBSD("llvm.org/pr25172 fails rarely on the buildbot") + @expectedFlakeyLinux("llvm.org/pr25172") + @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") + def test_driver_batch_mode(self): + """Test that the lldb driver's batch mode works correctly.""" + self.build() + self.setTearDownCleanup() + self.batch_mode() + + def setUp(self): + # Call super's setUp(). + TestBase.setUp(self) + # Our simple source filename. + self.source = 'main.c' + + def expect_string (self, string): + import pexpect + """This expects for "string", with timeout & EOF being test fails.""" + try: + self.child.expect_exact(string) + except pexpect.EOF: + self.fail ("Got EOF waiting for '%s'"%(string)) + except pexpect.TIMEOUT: + self.fail ("Timed out waiting for '%s'"%(string)) + + def batch_mode (self): + import pexpect + exe = os.path.join(os.getcwd(), "a.out") + prompt = "(lldb) " + + # First time through, pass CRASH so the process will crash and stop in batch mode. + run_commands = ' -b -o "break set -n main" -o "run" -o "continue" -k "frame var touch_me_not"' + self.child = pexpect.spawn('%s %s %s %s -- CRASH' % (lldbtest_config.lldbExec, self.lldbOption, run_commands, exe)) + child = self.child + # Turn on logging for what the child sends back. + if self.TraceOn(): + child.logfile_read = sys.stdout + + # We should see the "run": + self.expect_string ("run") + # We should have hit the breakpoint & continued: + self.expect_string ("continue") + # The App should have crashed: + self.expect_string("About to crash") + # The -k option should have printed the frame variable once: + self.expect_string ('(char *) touch_me_not') + # Then we should have a live prompt: + self.expect_string (prompt) + self.child.sendline("frame variable touch_me_not") + self.expect_string ('(char *) touch_me_not') + + self.deletePexpectChild() + + # Now do it again, and see make sure if we don't crash, we quit: + run_commands = ' -b -o "break set -n main" -o "run" -o "continue" ' + self.child = pexpect.spawn('%s %s %s %s -- NOCRASH' % (lldbtest_config.lldbExec, self.lldbOption, run_commands, exe)) + child = self.child + # Turn on logging for what the child sends back. + if self.TraceOn(): + child.logfile_read = sys.stdout + + # We should see the "run": + self.expect_string ("run") + # We should have hit the breakpoint & continued: + self.expect_string ("continue") + # The App should have not have crashed: + self.expect_string("Got there on time and it did not crash.") + # Then we should have a live prompt: + self.expect_string ("exited") + index = self.child.expect([pexpect.EOF, pexpect.TIMEOUT]) + self.assertTrue(index == 0, "lldb didn't close on successful batch completion.") + diff --git a/packages/Python/lldbsuite/test/driver/batch_mode/main.c b/packages/Python/lldbsuite/test/driver/batch_mode/main.c new file mode 100644 index 0000000..418160e --- /dev/null +++ b/packages/Python/lldbsuite/test/driver/batch_mode/main.c @@ -0,0 +1,15 @@ +#include <stdio.h> +#include <string.h> + +int +main (int argc, char **argv) +{ + if (argc >= 2 && strcmp (argv[1], "CRASH") == 0) + { + char *touch_me_not = (char *) 0; + printf ("About to crash.\n"); + touch_me_not[0] = 'a'; + } + printf ("Got there on time and it did not crash.\n"); + return 0; +} |