aboutsummaryrefslogtreecommitdiff
path: root/packages/Python/lldbsuite/test/driver
diff options
context:
space:
mode:
Diffstat (limited to 'packages/Python/lldbsuite/test/driver')
-rw-r--r--packages/Python/lldbsuite/test/driver/batch_mode/Makefile5
-rw-r--r--packages/Python/lldbsuite/test/driver/batch_mode/TestBatchMode.py89
-rw-r--r--packages/Python/lldbsuite/test/driver/batch_mode/main.c15
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 000000000000..0d70f2595019
--- /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 000000000000..b5ff88c3bba1
--- /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 000000000000..418160eaa36d
--- /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;
+}