aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_tcp.py
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2013-12-14 00:19:24 +0100
committerMaximilian Hils <git@maximilianhils.com>2013-12-14 00:19:24 +0100
commit0187d92ec0fb3924a66b6b607f3fc50a5b311259 (patch)
treeee0350da66c56ef7ff61124c603880dbe04a149b /test/test_tcp.py
parent9ea4646262d855b1564cbf78e7bf9ab0be332dfd (diff)
downloadmitmproxy-0187d92ec0fb3924a66b6b607f3fc50a5b311259.tar.gz
mitmproxy-0187d92ec0fb3924a66b6b607f3fc50a5b311259.tar.bz2
mitmproxy-0187d92ec0fb3924a66b6b607f3fc50a5b311259.zip
test tcpclient.source_address, increase coverage
Diffstat (limited to 'test/test_tcp.py')
-rw-r--r--test/test_tcp.py24
1 files changed, 23 insertions, 1 deletions
diff --git a/test/test_tcp.py b/test/test_tcp.py
index 75dcad13..a4e66516 100644
--- a/test/test_tcp.py
+++ b/test/test_tcp.py
@@ -1,4 +1,4 @@
-import cStringIO, Queue, time, socket
+import cStringIO, Queue, time, socket, random
from netlib import tcp, certutils, test
import mock
import tutils
@@ -24,6 +24,12 @@ class EchoHandler(tcp.BaseHandler):
self.wfile.flush()
+class ClientPeernameHandler(tcp.BaseHandler):
+ def handle(self):
+ self.wfile.write(str(self.connection.getpeername()))
+ self.wfile.flush()
+
+
class CertHandler(tcp.BaseHandler):
sni = None
def handle_sni(self, connection):
@@ -74,6 +80,22 @@ class TestServer(test.ServerTestBase):
assert c.rfile.readline() == testval
+class TestServerBind(test.ServerTestBase):
+ handler = ClientPeernameHandler
+
+ def test_bind(self):
+ """ Test to bind to a given random port. Try again if the random port turned out to be blocked. """
+ for i in range(20):
+ random_port = random.randrange(1024, 65535)
+ try:
+ c = tcp.TCPClient("127.0.0.1", self.port, source_address=("127.0.0.1", random_port))
+ c.connect()
+ assert c.rfile.readline() == str(("127.0.0.1", random_port))
+ return
+ except tcp.NetLibError: # port probably already in use
+ pass
+
+
class TestServerIPv6(test.ServerTestBase):
handler = EchoHandler
use_ipv6 = True