aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_server.py
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2013-02-24 14:04:56 +1300
committerAldo Cortesi <aldo@nullcube.com>2013-02-24 14:04:56 +1300
commitd0639e8925541bd6f6f386386c982d23b3828d3d (patch)
treeb2afa13c9f17bb92d23351a31f8cadcf90eb55be /test/test_server.py
parent64285140f959eaa939c4cf35585cfe21cbf1a449 (diff)
downloadmitmproxy-d0639e8925541bd6f6f386386c982d23b3828d3d.tar.gz
mitmproxy-d0639e8925541bd6f6f386386c982d23b3828d3d.tar.bz2
mitmproxy-d0639e8925541bd6f6f386386c982d23b3828d3d.zip
Handle server disconnects better.
Server connections can be closed for legitimate reasons, like timeouts. If we've already pumped data over a server connection, we reconnect on error. If not, we treat it as a legitimate error and pass it on to the client. Fixes #85
Diffstat (limited to 'test/test_server.py')
-rw-r--r--test/test_server.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/test/test_server.py b/test/test_server.py
index 9df88400..924b63b7 100644
--- a/test/test_server.py
+++ b/test/test_server.py
@@ -98,6 +98,19 @@ class TestHTTP(tservers.HTTPProxTest, SanityMixin):
assert p.request("get:'%s':h'Connection'='close'"%response)
tutils.raises("disconnect", p.request, "get:'%s'"%response)
+ def test_reconnect(self):
+ req = "get:'%s/p/200:b@1:da'"%self.urlbase
+ p = self.pathoc()
+ assert p.request(req)
+ # Server has disconnected. Mitmproxy should detect this, and reconnect.
+ assert p.request(req)
+ assert p.request(req)
+
+ # However, if the server disconnects on our first try, it's an error.
+ req = "get:'%s/p/200:b@1:d0'"%self.urlbase
+ p = self.pathoc()
+ tutils.raises("server disconnect", p.request, req)
+
def test_proxy_ioerror(self):
# Tests a difficult-to-trigger condition, where an IOError is raised
# within our read loop.
@@ -106,7 +119,6 @@ class TestHTTP(tservers.HTTPProxTest, SanityMixin):
tutils.raises("empty reply", self.pathod, "304")
-
class TestHTTPS(tservers.HTTPProxTest, SanityMixin):
ssl = True
clientcerts = True