test/tools/lldb-server/commandline/Test* were actually executing in their parent directory. This looks fine at first because they aren't compiling an inferior executable. Unfortunately, they still call "make clean" during their cleanup, which is likely causing all kinds of havok in tests running in the parent directory Differential Revision: http://reviews.llvm.org/D9869 llvm-svn: 237932
90 lines
2.9 KiB
Python
90 lines
2.9 KiB
Python
import gdbremote_testcase
|
|
import lldbgdbserverutils
|
|
import re
|
|
import select
|
|
import socket
|
|
import time
|
|
from lldbtest import *
|
|
|
|
class TestStubReverseConnect(gdbremote_testcase.GdbRemoteTestCaseBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
_DEFAULT_TIMEOUT = 20
|
|
|
|
def setUp(self):
|
|
# Set up the test.
|
|
gdbremote_testcase.GdbRemoteTestCaseBase.setUp(self)
|
|
|
|
# Create a listener on a local port.
|
|
self.listener_socket = self.create_listener_socket()
|
|
self.assertIsNotNone(self.listener_socket)
|
|
self.listener_port = self.listener_socket.getsockname()[1]
|
|
|
|
def create_listener_socket(self, timeout_seconds=_DEFAULT_TIMEOUT):
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
self.assertIsNotNone(sock)
|
|
|
|
sock.settimeout(timeout_seconds)
|
|
sock.bind(("127.0.0.1",0))
|
|
sock.listen(1)
|
|
|
|
def tear_down_listener():
|
|
try:
|
|
sock.shutdown(socket.SHUT_RDWR)
|
|
except:
|
|
# ignore
|
|
None
|
|
|
|
self.addTearDownHook(tear_down_listener)
|
|
return sock
|
|
|
|
def reverse_connect_works(self):
|
|
# Indicate stub startup should do a reverse connect.
|
|
appended_stub_args = ["--reverse-connect"]
|
|
if self.debug_monitor_extra_args:
|
|
self.debug_monitor_extra_args += appended_stub_args
|
|
else:
|
|
self.debug_monitor_extra_args = appended_stub_args
|
|
|
|
self.stub_hostname = "127.0.0.1"
|
|
self.port = self.listener_port
|
|
|
|
triple = self.dbg.GetSelectedPlatform().GetTriple()
|
|
if re.match(".*-.*-.*-android", triple):
|
|
self.forward_adb_port(self.port, self.port, "reverse", self.stub_device)
|
|
|
|
# Start the stub.
|
|
server = self.launch_debug_monitor(logfile=sys.stdout)
|
|
self.assertIsNotNone(server)
|
|
self.assertTrue(lldbgdbserverutils.process_is_running(server.pid, True))
|
|
|
|
# Listen for the stub's connection to us.
|
|
(stub_socket, address) = self.listener_socket.accept()
|
|
self.assertIsNotNone(stub_socket)
|
|
self.assertIsNotNone(address)
|
|
print "connected to stub {} on {}".format(address, stub_socket.getsockname())
|
|
|
|
# Verify we can do the handshake. If that works, we'll call it good.
|
|
self.do_handshake(stub_socket, timeout_seconds=self._DEFAULT_TIMEOUT)
|
|
|
|
# Clean up.
|
|
stub_socket.shutdown(socket.SHUT_RDWR)
|
|
|
|
@debugserver_test
|
|
def test_reverse_connect_works_debugserver(self):
|
|
self.init_debugserver_test(use_named_pipe=False)
|
|
self.set_inferior_startup_launch()
|
|
self.reverse_connect_works()
|
|
|
|
@llgs_test
|
|
@skipIfRemote # reverse connect is not a supported use case for now
|
|
def test_reverse_connect_works_llgs(self):
|
|
self.init_llgs_test(use_named_pipe=False)
|
|
self.set_inferior_startup_launch()
|
|
self.reverse_connect_works()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest2.main()
|