blob: 642cf19a3815ea644206aff6eebe3020ab207089 [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
8import re
9import select
10import socket
11import time
12from lldbtest import *
13
14class TestStubReverseConnect(gdbremote_testcase.GdbRemoteTestCaseBase):
15 _DEFAULT_TIMEOUT = 20
16
17 def setUp(self):
18 # Set up the test.
19 gdbremote_testcase.GdbRemoteTestCaseBase.setUp(self)
20
21 # Create a listener on a local port.
22 self.listener_socket = self.create_listener_socket()
23 self.assertIsNotNone(self.listener_socket)
24 self.listener_port = self.listener_socket.getsockname()[1]
25
26 def create_listener_socket(self, timeout_seconds=_DEFAULT_TIMEOUT):
27 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
28 self.assertIsNotNone(sock)
29
30 sock.settimeout(timeout_seconds)
31 sock.bind(("127.0.0.1",0))
32 sock.listen(1)
33
34 def tear_down_listener():
35 try:
36 sock.shutdown(socket.SHUT_RDWR)
37 except:
38 # ignore
39 None
40
41 self.addTearDownHook(tear_down_listener)
42 return sock
43
44 def reverse_connect_works(self):
45 # Indicate stub startup should do a reverse connect.
46 appended_stub_args = " --reverse-connect"
47 if self.debug_monitor_extra_args:
48 self.debug_monitor_extra_args += appended_stub_args
49 else:
50 self.debug_monitor_extra_args = appended_stub_args
51
52 self.stub_hostname = "127.0.0.1"
53 self.port = self.listener_port
54
55 # Start the stub.
56 server = self.launch_debug_monitor(logfile=sys.stdout)
57 self.assertIsNotNone(server)
58 self.assertTrue(server.isalive())
59
60 # Listen for the stub's connection to us.
61 (stub_socket, address) = self.listener_socket.accept()
62 self.assertIsNotNone(stub_socket)
63 self.assertIsNotNone(address)
64 print "connected to stub {} on {}".format(address, stub_socket.getsockname())
65
66 # Verify we can do the handshake. If that works, we'll call it good.
67 self.do_handshake(stub_socket, timeout_seconds=self._DEFAULT_TIMEOUT)
68
69 # Clean up.
70 stub_socket.shutdown(socket.SHUT_RDWR)
71
72 @debugserver_test
73 def test_reverse_connect_works_debugserver(self):
74 self.init_debugserver_test(use_named_pipe=False)
75 self.set_inferior_startup_launch()
76 self.reverse_connect_works()
77
78 @llgs_test
79 def test_reverse_connect_works_llgs(self):
80 self.init_llgs_test(use_named_pipe=False)
81 self.set_inferior_startup_launch()
82 self.reverse_connect_works()
83
84
85if __name__ == '__main__':
86 unittest2.main()