diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
| commit | 9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc (patch) | |
| tree | dd2a1ddf0476664c2b823409c36cbccd52662ca7 /packages/Python/lldbsuite/test/driver/batch_mode | |
| parent | 3bd2e91faeb9eeec1aae82c64a3253afff551cfd (diff) | |
Notes
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 0000000000000..0d70f25950192 --- /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 0000000000000..b5ff88c3bba14 --- /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 0000000000000..418160eaa36d7 --- /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; +} | 
