blob: e51f97c45b08046dec0039d0beda958b98960851 [file] [log] [blame]
Todd Fiala31bde322014-07-26 20:39:17 +00001# Add the directory above ours to the python library path since we
2# will import from there.
3import os.path
4import sys
5sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
6
7import gdbremote_testcase
Tamas Berghammer04f51d12015-03-11 13:51:07 +00008import lldbgdbserverutils
Todd Fiala31bde322014-07-26 20:39:17 +00009import re
10import select
11import socket
12import time
13from lldbtest import *
14
15class TestStubReverseConnect(gdbremote_testcase.GdbRemoteTestCaseBase):
16 _DEFAULT_TIMEOUT = 20
17
18 def setUp(self):
19 # Set up the test.
20 gdbremote_testcase.GdbRemoteTestCaseBase.setUp(self)
21
22 # Create a listener on a local port.
23 self.listener_socket = self.create_listener_socket()
24 self.assertIsNotNone(self.listener_socket)
25 self.listener_port = self.listener_socket.getsockname()[1]
26
27 def create_listener_socket(self, timeout_seconds=_DEFAULT_TIMEOUT):
28 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
29 self.assertIsNotNone(sock)
30
31 sock.settimeout(timeout_seconds)
32 sock.bind(("127.0.0.1",0))
33 sock.listen(1)
34
35 def tear_down_listener():
36 try:
37 sock.shutdown(socket.SHUT_RDWR)
38 except:
39 # ignore
40 None
41
42 self.addTearDownHook(tear_down_listener)
43 return sock
44
45 def reverse_connect_works(self):
46 # Indicate stub startup should do a reverse connect.
Tamas Berghammer04f51d12015-03-11 13:51:07 +000047 appended_stub_args = ["--reverse-connect"]
Todd Fiala31bde322014-07-26 20:39:17 +000048 if self.debug_monitor_extra_args:
49 self.debug_monitor_extra_args += appended_stub_args
50 else:
51 self.debug_monitor_extra_args = appended_stub_args
52
53 self.stub_hostname = "127.0.0.1"
54 self.port = self.listener_port
55
56 # Start the stub.
57 server = self.launch_debug_monitor(logfile=sys.stdout)
58 self.assertIsNotNone(server)
Tamas Berghammer04f51d12015-03-11 13:51:07 +000059 self.assertTrue(lldbgdbserverutils.process_is_running(server.pid, True))
Todd Fiala31bde322014-07-26 20:39:17 +000060
61 # Listen for the stub's connection to us.
62 (stub_socket, address) = self.listener_socket.accept()
63 self.assertIsNotNone(stub_socket)
64 self.assertIsNotNone(address)
65 print "connected to stub {} on {}".format(address, stub_socket.getsockname())
66
67 # Verify we can do the handshake. If that works, we'll call it good.
68 self.do_handshake(stub_socket, timeout_seconds=self._DEFAULT_TIMEOUT)
69
70 # Clean up.
71 stub_socket.shutdown(socket.SHUT_RDWR)
72
73 @debugserver_test
74 def test_reverse_connect_works_debugserver(self):
75 self.init_debugserver_test(use_named_pipe=False)
76 self.set_inferior_startup_launch()
77 self.reverse_connect_works()
78
79 @llgs_test
80 def test_reverse_connect_works_llgs(self):
81 self.init_llgs_test(use_named_pipe=False)
82 self.set_inferior_startup_launch()
83 self.reverse_connect_works()
84
85
86if __name__ == '__main__':
87 unittest2.main()