From f9ad21d22afa9a36c200138593993aa531422dd6 Mon Sep 17 00:00:00 2001 From: Todd Fiala Date: Wed, 16 Jul 2014 16:15:42 +0000 Subject: [PATCH] gdb-remote test noise suppression on MacOSX. This change adds a member to the base test case for gdb-remote that indicates whether a stub makes two X stop notification reports on kill commands. This is set to true for debugserver tests. The test for killing an attached process after it's first stop notification has been modified to look at that flag and add an extra X packet matcher so the "unmatched packet warning" doesn't get emitted for the second X on MacOSX with debugserver. I also broke those tests out of the monolithic TestLldbGdbServer mega test case and put it in its own, new TestGdbRemoteKill.py file and test case. Tested: Ubuntu 14.04 x86_64, clang-3.5 built lldb, no test failures. MacOSX 10.9.4, Xcode 6.0 Beta 3 built lldb, no test failures. llvm-svn: 213166 --- .../test/tools/lldb-gdbserver/TestGdbRemoteKill.py | 49 ++++++++++++++++++++++ .../test/tools/lldb-gdbserver/TestLldbGdbServer.py | 34 --------------- .../tools/lldb-gdbserver/gdbremote_testcase.py | 4 ++ 3 files changed, 53 insertions(+), 34 deletions(-) create mode 100644 lldb/test/tools/lldb-gdbserver/TestGdbRemoteKill.py diff --git a/lldb/test/tools/lldb-gdbserver/TestGdbRemoteKill.py b/lldb/test/tools/lldb-gdbserver/TestGdbRemoteKill.py new file mode 100644 index 0000000..121093a --- /dev/null +++ b/lldb/test/tools/lldb-gdbserver/TestGdbRemoteKill.py @@ -0,0 +1,49 @@ +import unittest2 + +import gdbremote_testcase +import lldbgdbserverutils + +from lldbtest import * + +class TestGdbRemoteKill(gdbremote_testcase.GdbRemoteTestCaseBase): + def attach_commandline_kill_after_initial_stop(self): + procs = self.prep_debug_monitor_and_inferior() + self.test_sequence.add_log_lines([ + "read packet: $k#6b", + {"direction":"send", "regex":r"^\$X[0-9a-fA-F]+([^#]*)#[0-9A-Fa-f]{2}" }, + ], True) + + if self.stub_sends_two_stop_notifications_on_kill: + # Add an expectation for a second X result for stubs that send two of these. + self.test_sequence.add_log_lines([ + {"direction":"send", "regex":r"^\$X[0-9a-fA-F]+([^#]*)#[0-9A-Fa-f]{2}" }, + ], True) + + self.expect_gdbremote_sequence() + + # Wait a moment for completed and now-detached inferior process to clear. + time.sleep(1) + + # Process should be dead now. Reap results. + poll_result = procs["inferior"].poll() + self.assertIsNotNone(poll_result) + + # Where possible, verify at the system level that the process is not running. + self.assertFalse(lldbgdbserverutils.process_is_running(procs["inferior"].pid, False)) + + @debugserver_test + @dsym_test + def test_attach_commandline_kill_after_initial_stop_debugserver_dsym(self): + self.init_debugserver_test() + self.buildDsym() + self.set_inferior_startup_attach() + self.attach_commandline_kill_after_initial_stop() + + @llgs_test + @dwarf_test + def test_attach_commandline_kill_after_initial_stop_llgs_dwarf(self): + self.init_llgs_test() + self.buildDwarf() + self.set_inferior_startup_attach() + self.attach_commandline_kill_after_initial_stop() + diff --git a/lldb/test/tools/lldb-gdbserver/TestLldbGdbServer.py b/lldb/test/tools/lldb-gdbserver/TestLldbGdbServer.py index d45589c..56f542d 100644 --- a/lldb/test/tools/lldb-gdbserver/TestLldbGdbServer.py +++ b/lldb/test/tools/lldb-gdbserver/TestLldbGdbServer.py @@ -406,40 +406,6 @@ class LldbGdbServerTestCase(gdbremote_testcase.GdbRemoteTestCaseBase): self.set_inferior_startup_attach() self.attach_commandline_continue_app_exits() - def attach_commandline_kill_after_initial_stop(self): - procs = self.prep_debug_monitor_and_inferior() - self.test_sequence.add_log_lines( - ["read packet: $k#6b", - "send packet: $X09#00"], - True) - self.expect_gdbremote_sequence() - - # Wait a moment for completed and now-detached inferior process to clear. - time.sleep(1) - - # Process should be dead now. Reap results. - poll_result = procs["inferior"].poll() - self.assertIsNotNone(poll_result) - - # Where possible, verify at the system level that the process is not running. - self.assertFalse(lldbgdbserverutils.process_is_running(procs["inferior"].pid, False)) - - @debugserver_test - @dsym_test - def test_attach_commandline_kill_after_initial_stop_debugserver_dsym(self): - self.init_debugserver_test() - self.buildDsym() - self.set_inferior_startup_attach() - self.attach_commandline_kill_after_initial_stop() - - @llgs_test - @dwarf_test - def test_attach_commandline_kill_after_initial_stop_llgs_dwarf(self): - self.init_llgs_test() - self.buildDwarf() - self.set_inferior_startup_attach() - self.attach_commandline_kill_after_initial_stop() - def qRegisterInfo_returns_one_valid_result(self): server = self.connect_to_debug_monitor() self.assertIsNotNone(server) diff --git a/lldb/test/tools/lldb-gdbserver/gdbremote_testcase.py b/lldb/test/tools/lldb-gdbserver/gdbremote_testcase.py index fe23b5a..b0e9512 100644 --- a/lldb/test/tools/lldb-gdbserver/gdbremote_testcase.py +++ b/lldb/test/tools/lldb-gdbserver/gdbremote_testcase.py @@ -55,6 +55,7 @@ class GdbRemoteTestCaseBase(TestBase): self.named_pipe_path = None self.named_pipe = None self.named_pipe_fd = None + self.stub_sends_two_stop_notifications_on_kill = False def get_next_port(self): return 12000 + random.randint(0,3999) @@ -142,6 +143,9 @@ class GdbRemoteTestCaseBase(TestBase): self.debug_monitor_extra_args = " --log-file=/tmp/packets-{}.log --log-flags=0x800000".format(self._testMethodName) if use_named_pipe: (self.named_pipe_path, self.named_pipe, self.named_pipe_fd) = self.create_named_pipe() + # The debugserver stub has a race on handling the 'k' command, so it sends an X09 right away, then sends the real X notification + # when the process truly dies. + self.stub_sends_two_stop_notifications_on_kill = True def create_socket(self): sock = socket.socket() -- 2.7.4