aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2014-09-04 16:37:50 +0200
committerMaximilian Hils <git@maximilianhils.com>2014-09-04 16:37:50 +0200
commit795e19f6b7803f18a3bf5e8111493ed54a3d2e00 (patch)
treeb30b6d7d8eff27f5826530774bb6870303c3a89e
parentf4d4332472c7fa68014996a1d55b37911d1515f9 (diff)
downloadmitmproxy-795e19f6b7803f18a3bf5e8111493ed54a3d2e00.tar.gz
mitmproxy-795e19f6b7803f18a3bf5e8111493ed54a3d2e00.tar.bz2
mitmproxy-795e19f6b7803f18a3bf5e8111493ed54a3d2e00.zip
coverage++
-rw-r--r--libmproxy/protocol/primitives.py2
-rw-r--r--libmproxy/proxy/connection.py13
-rw-r--r--test/test_protocol_tcp.py23
-rw-r--r--test/test_proxy.py2
-rw-r--r--test/test_server.py6
-rw-r--r--test/tservers.py23
6 files changed, 54 insertions, 15 deletions
diff --git a/libmproxy/protocol/primitives.py b/libmproxy/protocol/primitives.py
index 416e6880..ee1199fc 100644
--- a/libmproxy/protocol/primitives.py
+++ b/libmproxy/protocol/primitives.py
@@ -168,7 +168,7 @@ class LiveConnection(object):
persistent_change
), "debug")
- if self._backup_server_conn:
+ if not self._backup_server_conn:
self._backup_server_conn = self.c.server_conn
self.c.server_conn = None
else: # This is at least the second temporary change. We can kill the current connection.
diff --git a/libmproxy/proxy/connection.py b/libmproxy/proxy/connection.py
index 5c421557..de8e20d8 100644
--- a/libmproxy/proxy/connection.py
+++ b/libmproxy/proxy/connection.py
@@ -76,8 +76,6 @@ class ServerConnection(tcp.TCPClient, stateobject.SimpleStateObject):
tcp.TCPClient.__init__(self, address)
self.state = [] # a list containing (conntype, state) tuples
- self.peername = None
- self.sockname = None
self.timestamp_start = None
self.timestamp_end = None
self.timestamp_tcp_setup = None
@@ -98,8 +96,6 @@ class ServerConnection(tcp.TCPClient, stateobject.SimpleStateObject):
_stateobject_attributes = dict(
state=list,
- peername=tuple,
- sockname=tuple,
timestamp_start=float,
timestamp_end=float,
timestamp_tcp_setup=float,
@@ -114,9 +110,10 @@ class ServerConnection(tcp.TCPClient, stateobject.SimpleStateObject):
def _get_state(self):
d = super(ServerConnection, self)._get_state()
d.update(
- address={"address": self.address(), "use_ipv6": self.address.use_ipv6},
- source_address= {"address": self.source_address(),
- "use_ipv6": self.source_address.use_ipv6} if self.source_address else None,
+ address={"address": self.address(),
+ "use_ipv6": self.address.use_ipv6},
+ source_address= ({"address": self.source_address(),
+ "use_ipv6": self.source_address.use_ipv6} if self.source_address else None),
cert=self.cert.to_pem() if self.cert else None
)
return d
@@ -140,8 +137,6 @@ class ServerConnection(tcp.TCPClient, stateobject.SimpleStateObject):
def connect(self):
self.timestamp_start = utils.timestamp()
tcp.TCPClient.connect(self)
- self.peername = self.connection.getpeername()
- self.sockname = self.connection.getsockname()
self.timestamp_tcp_setup = utils.timestamp()
def send(self, message):
diff --git a/test/test_protocol_tcp.py b/test/test_protocol_tcp.py
index 7236ee67..8b6bb68d 100644
--- a/test/test_protocol_tcp.py
+++ b/test/test_protocol_tcp.py
@@ -1,2 +1,21 @@
-class TestTcp:
- pass \ No newline at end of file
+import tservers
+from netlib.certutils import SSLCert
+
+class TestTcp(tservers.IgnoreProxTest):
+ ignore = []
+
+ def test_simple(self):
+ # i = ignore (tcp passthrough), n = normal
+ pi, pn = self.pathocs()
+ i = pi.request("get:'/p/304'")
+ i2 = pi.request("get:'/p/304'")
+ n = pn.request("get:'/p/304'")
+
+ assert i.status_code == i2.status_code == n.status_code == 304
+
+ i_cert = SSLCert(i.sslinfo.certchain[0])
+ i2_cert = SSLCert(i2.sslinfo.certchain[0])
+ n_cert = SSLCert(n.sslinfo.certchain[0])
+
+ assert i_cert == i2_cert
+ assert not i_cert == n_cert \ No newline at end of file
diff --git a/test/test_proxy.py b/test/test_proxy.py
index ad2bb2d7..f762e610 100644
--- a/test/test_proxy.py
+++ b/test/test_proxy.py
@@ -100,7 +100,7 @@ class TestProcessProxyOptions:
class TestProxyServer:
- @tutils.SkipWindows # binding to 0.0.0.0:1 works without special permissions on Windows
+ @tutils.SkipWindows # binding to 0.0.0.0:1 works without special permissions on Windows
def test_err(self):
parser = argparse.ArgumentParser()
cmdline.common_options(parser)
diff --git a/test/test_server.py b/test/test_server.py
index 21d01f5a..ed5133cb 100644
--- a/test/test_server.py
+++ b/test/test_server.py
@@ -312,7 +312,7 @@ class TestProxy(tservers.HTTPProxTest):
f = self.pathod("200:b@100")
assert f.status_code == 200
f = self.master.state.view[0]
- assert f.server_conn.peername == ("127.0.0.1", self.server.port)
+ assert f.server_conn.address == ("127.0.0.1", self.server.port)
class TestProxySSL(tservers.HTTPProxTest):
ssl=True
@@ -342,6 +342,7 @@ class MasterRedirectRequest(tservers.TestMaster):
def handle_response(self, f):
f.response.content = str(f.client_conn.address.port)
+ f.response.headers["server-conn-id"] = [str(f.server_conn.source_address.port)]
tservers.TestMaster.handle_response(self, f)
@@ -374,7 +375,8 @@ class TestRedirectRequest(tservers.HTTPProxTest):
assert self.server.last_log()
assert not self.server2.last_log()
- assert r3.content == r2.content == r1.content
+ assert r1.content == r2.content == r3.content
+ assert r1.headers.get_first("server-conn-id") == r3.headers.get_first("server-conn-id")
# Make sure that we actually use the same connection in this test case
class MasterStreamRequest(tservers.TestMaster):
diff --git a/test/tservers.py b/test/tservers.py
index 9f2abbe1..91743903 100644
--- a/test/tservers.py
+++ b/test/tservers.py
@@ -263,6 +263,29 @@ class ReverseProxTest(ProxTestBase):
return p.request(q)
+class IgnoreProxTest(ProxTestBase):
+ ssl = True
+
+ @classmethod
+ def get_proxy_config(cls):
+ d = super(IgnoreProxTest, cls).get_proxy_config()
+ d["ignore"] = [".+:%s" % cls.server.port] # ignore by port
+ return d
+
+ def pathoc_raw(self):
+ return libpathod.pathoc.Pathoc(("127.0.0.1", self.proxy.port), ssl=self.ssl)
+
+ def pathocs(self):
+ """
+ Returns a (pathod_ignore, pathoc_normal) tuple.
+ """
+ p_ignore = self.pathoc_raw()
+ p_ignore.connect(("127.0.0.1", self.server.port))
+ p_normal = self.pathoc_raw()
+ p_normal.connect(("127.0.0.1", self.server2.port))
+ return p_ignore, p_normal
+
+
class ChainProxTest(ProxTestBase):
"""
Chain n instances of mitmproxy in a row - because we can.