| """ | |
| Test that killing the target while quitting doesn't stall | |
| """ | |
| import lldb | |
| from lldbsuite.test.decorators import * | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test import lldbutil | |
| from lldbsuite.test.lldbpexpect import PExpectTest | |
| class DriverQuitSpeedTest(PExpectTest): | |
| source = "main.c" | |
| @skipIfAsan | |
| def test_run_quit(self): | |
| """Test that the lldb driver's batch mode works correctly.""" | |
| import pexpect | |
| self.build() | |
| exe = self.getBuildArtifact("a.out") | |
| # Turn on auto-confirm removes the wait for the prompt. | |
| self.launch(executable=exe, extra_args=["-O", "settings set auto-confirm 1"]) | |
| child = self.child | |
| # Launch the process without a TTY so we don't have to interrupt: | |
| child.sendline("process launch -n") | |
| print("launched process") | |
| child.expect(r"Process ([\d]*) launched:") | |
| print("Got launch message") | |
| child.sendline("quit") | |
| print("sent quit") | |
| child.expect(pexpect.EOF, timeout=30) | |
| @skipIfAsan | |
| @skipIfWasm # quitting detaches from the runtime, so there is nothing to confirm | |
| def test_run_quit_with_prompt(self): | |
| """Test that the lldb driver's batch mode works correctly with trailing space in confimation.""" | |
| import pexpect | |
| self.build() | |
| exe = self.getBuildArtifact("a.out") | |
| self.launch(executable=exe) | |
| child = self.child | |
| # Launch the process without a TTY so we don't have to interrupt: | |
| child.sendline("process launch -n") | |
| print("launched process") | |
| child.expect(r"Process ([\d]*) launched:") | |
| print("Got launch message") | |
| child.sendline("quit") | |
| print("sent quit") | |
| child.expect(r".*LLDB will kill one or more processes.*") | |
| # add trailing space to the confirmation. | |
| child.sendline("yEs ") | |
| child.expect(pexpect.EOF, timeout=30) |