aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2016-10-20 11:27:05 +1300
committerAldo Cortesi <aldo@nullcube.com>2016-10-20 11:27:05 +1300
commit01a449b5cb1106a867a6b73cd4877e9b2ec68171 (patch)
tree5a213fb4b8199d525079a55b64d6d232380be341
parent301d52d9d05f2c5f074fe68c73acc1c32e518020 (diff)
downloadmitmproxy-01a449b5cb1106a867a6b73cd4877e9b2ec68171.tar.gz
mitmproxy-01a449b5cb1106a867a6b73cd4877e9b2ec68171.tar.bz2
mitmproxy-01a449b5cb1106a867a6b73cd4877e9b2ec68171.zip
netlib.exceptions.* -> mitmproxy.exceptions
-rw-r--r--mitmproxy/addons/streambodies.py2
-rw-r--r--mitmproxy/exceptions.py62
-rw-r--r--mitmproxy/proxy/modes/socks_proxy.py3
-rw-r--r--mitmproxy/proxy/protocol/base.py3
-rw-r--r--mitmproxy/proxy/protocol/http.py19
-rw-r--r--mitmproxy/proxy/protocol/http2.py1
-rw-r--r--mitmproxy/proxy/protocol/http_replay.py3
-rw-r--r--mitmproxy/proxy/protocol/rawtcp.py3
-rw-r--r--mitmproxy/proxy/protocol/tls.py7
-rw-r--r--mitmproxy/proxy/protocol/websockets.py3
-rw-r--r--mitmproxy/proxy/root_context.py3
-rw-r--r--mitmproxy/proxy/server.py3
-rw-r--r--netlib/exceptions.py59
-rw-r--r--netlib/http/http1/assemble.py2
-rw-r--r--netlib/http/http1/read.py2
-rw-r--r--netlib/http/http2/framereader.py4
-rw-r--r--netlib/tcp.py2
-rw-r--r--pathod/language/writer.py4
-rw-r--r--pathod/pathoc.py2
-rw-r--r--pathod/pathod.py2
-rw-r--r--pathod/protocols/http.py4
-rw-r--r--pathod/protocols/websockets.py6
-rw-r--r--test/mitmproxy/protocol/test_http2.py28
-rw-r--r--test/mitmproxy/protocol/test_websockets.py11
-rw-r--r--test/mitmproxy/test_proxy.py4
-rw-r--r--test/mitmproxy/test_server.py2
-rw-r--r--test/mitmproxy/tservers.py7
-rw-r--r--test/netlib/http/http1/test_assemble.py6
-rw-r--r--test/netlib/http/http1/test_read.py55
-rw-r--r--test/netlib/test_tcp.py2
-rw-r--r--test/pathod/test_log.py4
-rw-r--r--test/pathod/test_pathoc.py4
-rw-r--r--test/pathod/test_pathod.py10
-rw-r--r--test/pathod/test_protocols_http2.py4
34 files changed, 164 insertions, 172 deletions
diff --git a/mitmproxy/addons/streambodies.py b/mitmproxy/addons/streambodies.py
index b3e5d6b2..bd8958b0 100644
--- a/mitmproxy/addons/streambodies.py
+++ b/mitmproxy/addons/streambodies.py
@@ -1,5 +1,5 @@
from netlib.http import http1
-from netlib import exceptions
+from mitmproxy import exceptions
from mitmproxy import ctx
diff --git a/mitmproxy/exceptions.py b/mitmproxy/exceptions.py
index 64cc457a..82022d31 100644
--- a/mitmproxy/exceptions.py
+++ b/mitmproxy/exceptions.py
@@ -1,7 +1,10 @@
"""
We try to be very hygienic regarding the exceptions we throw:
-Every Exception mitmproxy raises shall be a subclass of ProxyException.
+- Every exception that might be externally visible to users shall be a subclass
+ of ProxyException.p
+- Every exception in the base net module shall be a subclass
+ of NetlibException, and will not be propagated directly to users.
See also: http://lucumr.pocoo.org/2014/10/16/on-error-handling/
"""
@@ -100,3 +103,60 @@ class AddonError(Exception):
class AddonHalt(Exception):
pass
+
+
+"""
+ Every net Exception raised shall be a subclass of NetlibException.
+"""
+
+
+class NetlibException(Exception):
+ """
+ Base class for all exceptions thrown by netlib.
+ """
+ def __init__(self, message=None):
+ super().__init__(message)
+
+
+class Disconnect:
+ """Immediate EOF"""
+
+
+class HttpException(NetlibException):
+ pass
+
+
+class HttpReadDisconnect(HttpException, Disconnect):
+ pass
+
+
+class HttpSyntaxException(HttpException):
+ pass
+
+
+class TcpException(NetlibException):
+ pass
+
+
+class TcpDisconnect(TcpException, Disconnect):
+ pass
+
+
+class TcpReadIncomplete(TcpException):
+ pass
+
+
+class TcpTimeout(TcpException):
+ pass
+
+
+class TlsException(NetlibException):
+ pass
+
+
+class InvalidCertificateException(TlsException):
+ pass
+
+
+class Timeout(TcpException):
+ pass
diff --git a/mitmproxy/proxy/modes/socks_proxy.py b/mitmproxy/proxy/modes/socks_proxy.py
index 4f8473bd..175453b0 100644
--- a/mitmproxy/proxy/modes/socks_proxy.py
+++ b/mitmproxy/proxy/modes/socks_proxy.py
@@ -1,4 +1,3 @@
-import netlib.exceptions
from mitmproxy import exceptions
from mitmproxy.proxy import protocol
from netlib import socks
@@ -48,7 +47,7 @@ class Socks5Proxy(protocol.Layer, protocol.ServerConnectionMixin):
connect_reply.to_file(self.client_conn.wfile)
self.client_conn.wfile.flush()
- except (socks.SocksError, netlib.exceptions.TcpException) as e:
+ except (socks.SocksError, exceptions.TcpException) as e:
raise exceptions.Socks5ProtocolException("SOCKS5 mode failure: %s" % repr(e))
self.server_conn.address = connect_request.addr
diff --git a/mitmproxy/proxy/protocol/base.py b/mitmproxy/proxy/protocol/base.py
index 00d50721..97e90051 100644
--- a/mitmproxy/proxy/protocol/base.py
+++ b/mitmproxy/proxy/protocol/base.py
@@ -1,4 +1,3 @@
-import netlib.exceptions
from mitmproxy import exceptions
from mitmproxy import connections
@@ -177,7 +176,7 @@ class ServerConnectionMixin:
self.channel.ask("serverconnect", self.server_conn)
try:
self.server_conn.connect()
- except netlib.exceptions.TcpException as e:
+ except exceptions.TcpException as e:
raise exceptions.ProtocolException(
"Server connection to {} failed: {}".format(
repr(self.server_conn.address), str(e)
diff --git a/mitmproxy/proxy/protocol/http.py b/mitmproxy/proxy/protocol/http.py
index ec018f89..6bc06502 100644
--- a/mitmproxy/proxy/protocol/http.py
+++ b/mitmproxy/proxy/protocol/http.py
@@ -1,5 +1,4 @@
import h2.exceptions
-import netlib.exceptions
import time
import traceback
from mitmproxy import exceptions
@@ -46,7 +45,7 @@ class _HttpTransmissionLayer(base.Layer):
def send_response(self, response):
if response.data.content is None:
- raise netlib.exceptions.HttpException("Cannot assemble flow with missing content")
+ raise exceptions.HttpException("Cannot assemble flow with missing content")
self.send_response_headers(response)
self.send_response_body(response, [response.data.content])
@@ -146,10 +145,10 @@ class HttpLayer(base.Layer):
request = self.get_request_from_client(f)
# Make sure that the incoming request matches our expectations
self.validate_request(request)
- except netlib.exceptions.HttpReadDisconnect:
+ except exceptions.HttpReadDisconnect:
# don't throw an error for disconnects that happen before/between requests.
return
- except netlib.exceptions.HttpException as e:
+ except exceptions.HttpException as e:
# We optimistically guess there might be an HTTP client on the
# other end
self.send_error_response(400, repr(e))
@@ -173,7 +172,7 @@ class HttpLayer(base.Layer):
if self.mode == "regular" and request.first_line_format == "authority":
self.handle_regular_mode_connect(request)
return
- except (exceptions.ProtocolException, netlib.exceptions.NetlibException) as e:
+ except (exceptions.ProtocolException, exceptions.NetlibException) as e:
# HTTPS tasting means that ordinary errors like resolution and
# connection errors can happen here.
self.send_error_response(502, repr(e))
@@ -224,7 +223,7 @@ class HttpLayer(base.Layer):
self.handle_upstream_mode_connect(f.request.copy())
return
- except (exceptions.ProtocolException, netlib.exceptions.NetlibException) as e:
+ except (exceptions.ProtocolException, exceptions.NetlibException) as e:
self.send_error_response(502, repr(e))
if not f.response:
f.error = flow.Error(str(e))
@@ -254,7 +253,7 @@ class HttpLayer(base.Layer):
try:
response = http.make_error_response(code, message, headers)
self.send_response(response)
- except (netlib.exceptions.NetlibException, h2.exceptions.H2Error, exceptions.Http2ProtocolException):
+ except (exceptions.NetlibException, h2.exceptions.H2Error, exceptions.Http2ProtocolException):
self.log(traceback.format_exc(), "debug")
def change_upstream_proxy_server(self, address):
@@ -300,7 +299,7 @@ class HttpLayer(base.Layer):
try:
get_response()
- except netlib.exceptions.NetlibException as e:
+ except exceptions.NetlibException as e:
self.log(
"server communication error: %s" % repr(e),
level="debug"
@@ -396,7 +395,7 @@ class HttpLayer(base.Layer):
def validate_request(self, request):
if request.first_line_format == "absolute" and request.scheme != "http":
- raise netlib.exceptions.HttpException("Invalid request scheme: %s" % request.scheme)
+ raise exceptions.HttpException("Invalid request scheme: %s" % request.scheme)
expected_request_forms = {
"regular": ("authority", "absolute",),
@@ -409,7 +408,7 @@ class HttpLayer(base.Layer):
err_message = "Invalid HTTP request form (expected: %s, got: %s)" % (
" or ".join(allowed_request_forms), request.first_line_format
)
- raise netlib.exceptions.HttpException(err_message)
+ raise exceptions.HttpException(err_message)
if self.mode == "regular" and request.first_line_format == "absolute":
request.first_line_format = "relative"
diff --git a/mitmproxy/proxy/protocol/http2.py b/mitmproxy/proxy/protocol/http2.py
index 93ac51bc..d0b0720d 100644
--- a/mitmproxy/proxy/protocol/http2.py
+++ b/mitmproxy/proxy/protocol/http2.py
@@ -8,7 +8,6 @@ from h2 import connection
from h2 import events
import queue
-import netlib.exceptions
from mitmproxy import exceptions
from mitmproxy import http
from mitmproxy.proxy.protocol import base
diff --git a/mitmproxy/proxy/protocol/http_replay.py b/mitmproxy/proxy/protocol/http_replay.py
index eef5a109..7efb0782 100644
--- a/mitmproxy/proxy/protocol/http_replay.py
+++ b/mitmproxy/proxy/protocol/http_replay.py
@@ -1,6 +1,5 @@
import traceback
-import netlib.exceptions
from mitmproxy import log
from mitmproxy import controller
from mitmproxy import exceptions
@@ -97,7 +96,7 @@ class RequestReplayThread(basethread.BaseThread):
response_reply = self.channel.ask("response", self.f)
if response_reply == exceptions.Kill:
raise exceptions.Kill()
- except (exceptions.ReplayException, netlib.exceptions.NetlibException) as e:
+ except (exceptions.ReplayException, exceptions.NetlibException) as e:
self.f.error = flow.Error(str(e))
if self.channel:
self.channel.ask("error", self.f)
diff --git a/mitmproxy/proxy/protocol/rawtcp.py b/mitmproxy/proxy/protocol/rawtcp.py
index 513b90b3..d117fb41 100644
--- a/mitmproxy/proxy/protocol/rawtcp.py
+++ b/mitmproxy/proxy/protocol/rawtcp.py
@@ -2,7 +2,6 @@ import socket
from OpenSSL import SSL
-import netlib.exceptions
import netlib.tcp
from mitmproxy import tcp
from mitmproxy import flow
@@ -56,7 +55,7 @@ class RawTCPLayer(base.Layer):
self.channel.ask("tcp_message", f)
dst.sendall(tcp_message.content)
- except (socket.error, netlib.exceptions.TcpException, SSL.Error) as e:
+ except (socket.error, exceptions.TcpException, SSL.Error) as e:
if not self.ignore:
f.error = flow.Error("TCP connection closed unexpectedly: {}".format(repr(e)))
self.channel.tell("tcp_error", f)
diff --git a/mitmproxy/proxy/protocol/tls.py b/mitmproxy/proxy/protocol/tls.py
index 7b6b506c..b106aa0c 100644
--- a/mitmproxy/proxy/protocol/tls.py
+++ b/mitmproxy/proxy/protocol/tls.py
@@ -3,7 +3,6 @@ from typing import Optional # noqa
from typing import Union
import construct
-import netlib.exceptions
from mitmproxy import exceptions
from mitmproxy.contrib.tls import _constructs
from mitmproxy.proxy.protocol import base
@@ -484,7 +483,7 @@ class TlsLayer(base.Layer):
# The reason for this might be difficult to find, so we try to peek here to see if it
# raises ann error.
self.client_conn.rfile.peek(1)
- except netlib.exceptions.TlsException as e:
+ except exceptions.TlsException as e:
raise exceptions.ClientHandshakeException(
"Cannot establish TLS with client (sni: {sni}): {e}".format(
sni=self._client_hello.sni, e=repr(e)
@@ -528,9 +527,9 @@ class TlsLayer(base.Layer):
if tls_cert_err is not None:
self.log(str(tls_cert_err), "warn")
self.log("Ignoring server verification error, continuing with connection", "warn")
- except netlib.exceptions.InvalidCertificateException as e:
+ except exceptions.InvalidCertificateException as e:
raise exceptions.InvalidServerCertificate(str(e))
- except netlib.exceptions.TlsException as e:
+ except exceptions.TlsException as e:
raise exceptions.TlsProtocolException(
"Cannot establish TLS with {address} (sni: {sni}): {e}".format(
address=repr(self.server_conn.address),
diff --git a/mitmproxy/proxy/protocol/websockets.py b/mitmproxy/proxy/protocol/websockets.py
index 636748a1..f84a1dc5 100644
--- a/mitmproxy/proxy/protocol/websockets.py
+++ b/mitmproxy/proxy/protocol/websockets.py
@@ -1,4 +1,3 @@
-import netlib.exceptions
import socket
import struct
from OpenSSL import SSL
@@ -105,7 +104,7 @@ class WebSocketsLayer(base.Layer):
if not self._handle_frame(frame, source_conn, other_conn, is_server):
return
- except (socket.error, netlib.exceptions.TcpException, SSL.Error) as e:
+ except (socket.error, exceptions.TcpException, SSL.Error) as e:
self.log("WebSockets connection closed unexpectedly by {}: {}".format(
"server" if is_server else "client", repr(e)), "info")
except Exception as e: # pragma: no cover
diff --git a/mitmproxy/proxy/root_context.py b/mitmproxy/proxy/root_context.py
index 6a99d9cf..eacf7e0b 100644
--- a/mitmproxy/proxy/root_context.py
+++ b/mitmproxy/proxy/root_context.py
@@ -1,4 +1,3 @@
-import netlib.exceptions
from mitmproxy import log
from mitmproxy import exceptions
from mitmproxy.proxy import protocol
@@ -43,7 +42,7 @@ class RootContext:
def _next_layer(self, top_layer):
try:
d = top_layer.client_conn.rfile.peek(3)
- except netlib.exceptions.TcpException as e:
+ except exceptions.TcpException as e:
raise exceptions.ProtocolException(str(e))
client_tls = protocol.is_tls_record_magic(d)
diff --git a/mitmproxy/proxy/server.py b/mitmproxy/proxy/server.py
index b876f9ce..8472660a 100644
--- a/mitmproxy/proxy/server.py
+++ b/mitmproxy/proxy/server.py
@@ -2,7 +2,6 @@ import socket
import sys
import traceback
-import netlib.exceptions
from mitmproxy import exceptions
from mitmproxy import connections
from mitmproxy import http
@@ -138,7 +137,7 @@ class ConnectionHandler:
try:
error_response = http.make_error_response(502, repr(e))
self.client_conn.send(http1.assemble_response(error_response))
- except netlib.exceptions.TcpException:
+ except exceptions.TcpException:
pass
except Exception:
self.log(traceback.format_exc(), "error")
diff --git a/netlib/exceptions.py b/netlib/exceptions.py
deleted file mode 100644
index d0b15d27..00000000
--- a/netlib/exceptions.py
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-We try to be very hygienic regarding the exceptions we throw:
-Every Exception netlib raises shall be a subclass of NetlibException.
-
-
-See also: http://lucumr.pocoo.org/2014/10/16/on-error-handling/
-"""
-
-
-class NetlibException(Exception):
- """
- Base class for all exceptions thrown by netlib.
- """
- def __init__(self, message=None):
- super().__init__(message)
-
-
-class Disconnect:
- """Immediate EOF"""
-
-
-class HttpException(NetlibException):
- pass
-
-
-class HttpReadDisconnect(HttpException, Disconnect):
- pass
-
-
-class HttpSyntaxException(HttpException):
- pass
-
-
-class TcpException(NetlibException):
- pass
-
-
-class TcpDisconnect(TcpException, Disconnect):
- pass
-
-
-class TcpReadIncomplete(TcpException):
- pass
-
-
-class TcpTimeout(TcpException):
- pass
-
-
-class TlsException(NetlibException):
- pass
-
-
-class InvalidCertificateException(TlsException):
- pass
-
-
-class Timeout(TcpException):
- pass
diff --git a/netlib/http/http1/assemble.py b/netlib/http/http1/assemble.py
index 3d65da34..e0a91ad8 100644
--- a/netlib/http/http1/assemble.py
+++ b/netlib/http/http1/assemble.py
@@ -1,5 +1,5 @@
import netlib.http.url
-from netlib import exceptions
+from mitmproxy import exceptions
def assemble_request(request):
diff --git a/netlib/http/http1/read.py b/netlib/http/http1/read.py
index 89b73c5a..e6b22863 100644
--- a/netlib/http/http1/read.py
+++ b/netlib/http/http1/read.py
@@ -7,7 +7,7 @@ from netlib.http import response
from netlib.http import headers
from netlib.http import url
from netlib import check
-from netlib import exceptions
+from mitmproxy import exceptions
def get_header_tokens(headers, key):
diff --git a/netlib/http/http2/framereader.py b/netlib/http/http2/framereader.py
index 8b7cfffb..6a164919 100644
--- a/netlib/http/http2/framereader.py
+++ b/netlib/http/http2/framereader.py
@@ -1,7 +1,7 @@
import codecs
import hyperframe
-from ...exceptions import HttpException
+from mitmproxy import exceptions
def read_raw_frame(rfile):
@@ -9,7 +9,7 @@ def read_raw_frame(rfile):
length = int(codecs.encode(header[:3], 'hex_codec'), 16)
if length == 4740180:
- raise HttpException("Length field looks more like HTTP/1.1:\n{}".format(rfile.read(-1)))
+ raise exceptions.HttpException("Length field looks more like HTTP/1.1:\n{}".format(rfile.read(-1)))
body = rfile.safe_read(length)
return [header, body]
diff --git a/netlib/tcp.py b/netlib/tcp.py
index 6e323957..ac368a9c 100644
--- a/netlib/tcp.py
+++ b/netlib/tcp.py
@@ -20,7 +20,7 @@ from OpenSSL import SSL
from mitmproxy import certs
from mitmproxy.utils import version_check
from mitmproxy.types import serializable
-from netlib import exceptions
+from mitmproxy import exceptions
from mitmproxy.types import basethread
# This is a rather hackish way to make sure that
diff --git a/pathod/language/writer.py b/pathod/language/writer.py
index b8081989..ac0f44da 100644
--- a/pathod/language/writer.py
+++ b/pathod/language/writer.py
@@ -1,5 +1,5 @@
import time
-from netlib.exceptions import TcpDisconnect
+from mitmproxy import exceptions
BLOCKSIZE = 1024
# It's not clear what the upper limit for time.sleep is. It's lower than the
@@ -62,5 +62,5 @@ def write_values(fp, vals, actions, sofar=0, blocksize=BLOCKSIZE):
return True
elif a[1] == "inject":
send_chunk(fp, a[2], blocksize, 0, len(a[2]))
- except TcpDisconnect: # pragma: no cover
+ except exceptions.TcpDisconnect: # pragma: no cover
return True
diff --git a/pathod/pathoc.py b/pathod/pathoc.py
index 39dedf05..b67f6ee2 100644
--- a/pathod/pathoc.py
+++ b/pathod/pathoc.py
@@ -17,7 +17,7 @@ from netlib import tcp
from mitmproxy import certs
from netlib import websockets
from netlib import socks
-from netlib import exceptions
+from mitmproxy import exceptions
from netlib.http import http1
from mitmproxy.types import basethread
diff --git a/pathod/pathod.py b/pathod/pathod.py
index 5d951350..746998c5 100644
--- a/pathod/pathod.py
+++ b/pathod/pathod.py
@@ -10,7 +10,7 @@ from netlib import websockets
from mitmproxy import version
import urllib
-from netlib import exceptions
+from mitmproxy import exceptions
from pathod import language
from pathod import utils
diff --git a/pathod/protocols/http.py b/pathod/protocols/http.py
index 0822e864..a20a58a1 100644
--- a/pathod/protocols/http.py
+++ b/pathod/protocols/http.py
@@ -1,5 +1,5 @@
from mitmproxy import version
-from netlib.exceptions import TlsException
+from mitmproxy import exceptions
from netlib.http import http1
from .. import language
@@ -37,7 +37,7 @@ class HTTPProtocol:
options=self.pathod_handler.server.ssloptions.ssl_options,
alpn_select=self.pathod_handler.server.ssloptions.alpn_select,
)
- except TlsException as v:
+ except exceptions.TlsException as v:
s = str(v)
lg(s)
return None, dict(type="error", msg=s)
diff --git a/pathod/protocols/websockets.py b/pathod/protocols/websockets.py
index df83461a..585a48e3 100644
--- a/pathod/protocols/websockets.py
+++ b/pathod/protocols/websockets.py
@@ -1,8 +1,8 @@
import time
from netlib import websockets
-from .. import language
-from netlib.exceptions import NetlibException
+from pathod import language
+from mitmproxy import exceptions
class WebsocketsProtocol:
@@ -16,7 +16,7 @@ class WebsocketsProtocol:
started = time.time()
try:
frm = websockets.Frame.from_file(self.pathod_handler.rfile)
- except NetlibException as e:
+ except exceptions.NetlibException as e:
lg("Error reading websocket frame: %s" % e)
return None, None
ended = time.time()
diff --git a/test/mitmproxy/protocol/test_http2.py b/test/mitmproxy/protocol/test_http2.py
index a2efdc47..b624489f 100644
--- a/test/mitmproxy/protocol/test_http2.py
+++ b/test/mitmproxy/protocol/test_http2.py
@@ -13,7 +13,7 @@ from mitmproxy.proxy.config import ProxyConfig
import netlib
from ...netlib import tservers as netlib_tservers
-from netlib.exceptions import HttpException
+from mitmproxy import exceptions
from netlib.http import http1, http2
from .. import tservers
@@ -61,10 +61,10 @@ class _Http2ServerBase(netlib_tservers.ServerTestBase):
try:
raw = b''.join(http2.read_raw_frame(self.rfile))
events = h2_conn.receive_data(raw)
- except HttpException:
+ except exceptions.HttpException:
print(traceback.format_exc())
assert False
- except netlib.exceptions.TcpDisconnect:
+ except exceptions.TcpDisconnect:
break
except:
print(traceback.format_exc())
@@ -77,7 +77,7 @@ class _Http2ServerBase(netlib_tservers.ServerTestBase):
if not self.server.handle_server_event(event, h2_conn, self.rfile, self.wfile):
done = True
break
- except netlib.exceptions.TcpDisconnect:
+ except exceptions.TcpDisconnect:
done = True
except:
done = True
@@ -252,7 +252,7 @@ class TestSimple(_Http2Test):
try:
raw = b''.join(http2.read_raw_frame(client.rfile))
events = h2_conn.receive_data(raw)
- except HttpException:
+ except exceptions.HttpException:
print(traceback.format_exc())
assert False
@@ -329,7 +329,7 @@ class TestRequestWithPriority(_Http2Test):
try:
raw = b''.join(http2.read_raw_frame(client.rfile))
events = h2_conn.receive_data(raw)
- except HttpException:
+ except exceptions.HttpException:
print(traceback.format_exc())
assert False
@@ -368,7 +368,7 @@ class TestRequestWithPriority(_Http2Test):
try:
raw = b''.join(http2.read_raw_frame(client.rfile))
events = h2_conn.receive_data(raw)
- except HttpException:
+ except exceptions.HttpException:
print(traceback.format_exc())
assert False
@@ -440,7 +440,7 @@ class TestPriority(_Http2Test):
try:
raw = b''.join(http2.read_raw_frame(client.rfile))
events = h2_conn.receive_data(raw)
- except HttpException:
+ except exceptions.HttpException:
print(traceback.format_exc())
assert False
@@ -517,7 +517,7 @@ class TestPriorityWithExistingStream(_Http2Test):
try:
raw = b''.join(http2.read_raw_frame(client.rfile))
events = h2_conn.receive_data(raw)
- except HttpException:
+ except exceptions.HttpException:
print(traceback.format_exc())
assert False
@@ -568,7 +568,7 @@ class TestStreamResetFromServer(_Http2Test):
try:
raw = b''.join(http2.read_raw_frame(client.rfile))
events = h2_conn.receive_data(raw)
- except HttpException:
+ except exceptions.HttpException:
print(traceback.format_exc())
assert False
@@ -618,7 +618,7 @@ class TestBodySizeLimit(_Http2Test):
try:
raw = b''.join(http2.read_raw_frame(client.rfile))
events = h2_conn.receive_data(raw)
- except HttpException:
+ except exceptions.HttpException:
print(traceback.format_exc())
assert False
@@ -703,7 +703,7 @@ class TestPushPromise(_Http2Test):
try:
raw = b''.join(http2.read_raw_frame(client.rfile))
events = h2_conn.receive_data(raw)
- except HttpException:
+ except exceptions.HttpException:
print(traceback.format_exc())
assert False
except:
@@ -756,7 +756,7 @@ class TestPushPromise(_Http2Test):
try:
raw = b''.join(http2.read_raw_frame(client.rfile))
events = h2_conn.receive_data(raw)
- except HttpException:
+ except exceptions.HttpException:
print(traceback.format_exc())
assert False
@@ -816,7 +816,7 @@ class TestConnectionLost(_Http2Test):
try:
raw = b''.join(http2.read_raw_frame(client.rfile))
h2_conn.receive_data(raw)
- except HttpException:
+ except exceptions.HttpException:
print(traceback.format_exc())
assert False
except:
diff --git a/test/mitmproxy/protocol/test_websockets.py b/test/mitmproxy/protocol/test_websockets.py
index ef520d87..f22e95d5 100644
--- a/test/mitmproxy/protocol/test_websockets.py
+++ b/test/mitmproxy/protocol/test_websockets.py
@@ -4,6 +4,7 @@ import tempfile
import traceback
from mitmproxy import options
+from mitmproxy import exceptions
from mitmproxy.proxy.config import ProxyConfig
import netlib
@@ -249,7 +250,7 @@ class TestClose(_WebSocketsTest):
wfile.write(bytes(frame))
wfile.flush()
- with pytest.raises(netlib.exceptions.TcpDisconnect):
+ with pytest.raises(exceptions.TcpDisconnect):
websockets.Frame.from_file(rfile)
def test_close(self):
@@ -258,7 +259,7 @@ class TestClose(_WebSocketsTest):
client.wfile.write(bytes(websockets.Frame(fin=1, opcode=websockets.OPCODE.CLOSE)))
client.wfile.flush()
- with pytest.raises(netlib.exceptions.TcpDisconnect):
+ with pytest.raises(exceptions.TcpDisconnect):
websockets.Frame.from_file(client.rfile)
def test_close_payload_1(self):
@@ -267,7 +268,7 @@ class TestClose(_WebSocketsTest):
client.wfile.write(bytes(websockets.Frame(fin=1, opcode=websockets.OPCODE.CLOSE, payload=b'\00\42')))
client.wfile.flush()
- with pytest.raises(netlib.exceptions.TcpDisconnect):
+ with pytest.raises(exceptions.TcpDisconnect):
websockets.Frame.from_file(client.rfile)
def test_close_payload_2(self):
@@ -276,7 +277,7 @@ class TestClose(_WebSocketsTest):
client.wfile.write(bytes(websockets.Frame(fin=1, opcode=websockets.OPCODE.CLOSE, payload=b'\00\42foobar')))
client.wfile.flush()
- with pytest.raises(netlib.exceptions.TcpDisconnect):
+ with pytest.raises(exceptions.TcpDisconnect):
websockets.Frame.from_file(client.rfile)
@@ -290,7 +291,7 @@ class TestInvalidFrame(_WebSocketsTest):
def test_invalid_frame(self):
client = self._setup_connection()
- # with pytest.raises(netlib.exceptions.TcpDisconnect):
+ # with pytest.raises(exceptions.TcpDisconnect):
frame = websockets.Frame.from_file(client.rfile)
assert frame.header.opcode == 15
assert frame.payload == b'foobar'
diff --git a/test/mitmproxy/test_proxy.py b/test/mitmproxy/test_proxy.py
index 7d401184..c0d978d2 100644
--- a/test/mitmproxy/test_proxy.py
+++ b/test/mitmproxy/test_proxy.py
@@ -8,7 +8,7 @@ from mitmproxy.proxy import ProxyConfig
from mitmproxy import connections
from mitmproxy.proxy.server import DummyServer, ProxyServer, ConnectionHandler
from mitmproxy.proxy import config
-from netlib.exceptions import TcpDisconnect
+from mitmproxy import exceptions
from pathod import test
from netlib.http import http1
from . import tutils
@@ -40,7 +40,7 @@ class TestServerConnection:
sc.connect()
sc.connection = mock.Mock()
sc.connection.recv = mock.Mock(return_value=False)
- sc.connection.flush = mock.Mock(side_effect=TcpDisconnect)
+ sc.connection.flush = mock.Mock(side_effect=exceptions.TcpDisconnect)
sc.finish()
self.d.shutdown()
diff --git a/test/mitmproxy/test_server.py b/test/mitmproxy/test_server.py
index cadc67a8..79fd6f86 100644
--- a/test/mitmproxy/test_server.py
+++ b/test/mitmproxy/test_server.py
@@ -12,7 +12,7 @@ import netlib.http
from netlib import tcp
from netlib import socks
from mitmproxy import certs
-from netlib import exceptions
+from mitmproxy import exceptions
from netlib.http import authentication
from netlib.http import http1
from netlib.tcp import Address
diff --git a/test/mitmproxy/tservers.py b/test/mitmproxy/tservers.py
index 1243bca0..e07102e1 100644
--- a/test/mitmproxy/tservers.py
+++ b/test/mitmproxy/tservers.py
@@ -10,8 +10,9 @@ from mitmproxy import master
from mitmproxy.addons import state
import pathod.test
import pathod.pathoc
-from mitmproxy import controller, options
-import netlib.exceptions
+from mitmproxy import controller
+from mitmproxy import options
+from mitmproxy import exceptions
class TestMaster(master.Master):
@@ -98,7 +99,7 @@ class ProxyTestBase:
def teardown(self):
try:
self.server.wait_for_silence()
- except netlib.exceptions.Timeout:
+ except exceptions.Timeout:
# FIXME: Track down the Windows sync issues
if sys.platform != "win32":
raise
diff --git a/test/netlib/http/http1/test_assemble.py b/test/netlib/http/http1/test_assemble.py
index 5d7e007e..d5a5e5fb 100644
--- a/test/netlib/http/http1/test_assemble.py
+++ b/test/netlib/http/http1/test_assemble.py
@@ -1,4 +1,4 @@
-from netlib.exceptions import HttpException
+from mitmproxy import exceptions
from netlib.http import Headers
from netlib.http.http1.assemble import (
assemble_request, assemble_request_head, assemble_response,
@@ -18,7 +18,7 @@ def test_assemble_request():
b"content"
)
- with raises(HttpException):
+ with raises(exceptions.HttpException):
assemble_request(treq(content=None))
@@ -39,7 +39,7 @@ def test_assemble_response():
b"message"
)
- with raises(HttpException):
+ with raises(exceptions.HttpException):
assemble_response(tresp(content=None))
diff --git a/test/netlib/http/http1/test_read.py b/test/netlib/http/http1/test_read.py
index f25cd3e2..9777e2e2 100644
--- a/test/netlib/http/http1/test_read.py
+++ b/test/netlib/http/http1/test_read.py
@@ -2,7 +2,7 @@ from io import BytesIO
from mock import Mock
import pytest
-from netlib.exceptions import HttpException, HttpSyntaxException, HttpReadDisconnect, TcpDisconnect
+from mitmproxy import exceptions
from netlib.http import Headers
from netlib.http.http1.read import (
read_request, read_response, read_request_head,
@@ -11,7 +11,6 @@ from netlib.http.http1.read import (
_read_headers, _read_chunked, get_header_tokens
)
from netlib.tutils import treq, tresp, raises
-from netlib import exceptions
def test_get_header_tokens():
@@ -117,12 +116,12 @@ class TestReadBody:
def test_known_size_limit(self):
rfile = BytesIO(b"foobar")
- with raises(HttpException):
+ with raises(exceptions.HttpException):
b"".join(read_body(rfile, 3, 2))
def test_known_size_too_short(self):
rfile = BytesIO(b"foo")
- with raises(HttpException):
+ with raises(exceptions.HttpException):
b"".join(read_body(rfile, 6))
def test_unknown_size(self):
@@ -132,7 +131,7 @@ class TestReadBody:
def test_unknown_size_limit(self):
rfile = BytesIO(b"foobar")
- with raises(HttpException):
+ with raises(exceptions.HttpException):
b"".join(read_body(rfile, -1, 3))
def test_max_chunk_size(self):
@@ -186,7 +185,7 @@ def test_expected_http_body_size():
# explicit length
for val in (b"foo", b"-7"):
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
expected_http_body_size(
treq(headers=Headers(content_length=val))
)
@@ -210,13 +209,13 @@ def test_get_first_line():
rfile = BytesIO(b"\r\nfoo\r\nbar")
assert _get_first_line(rfile) == b"foo"
- with raises(HttpReadDisconnect):
+ with raises(exceptions.HttpReadDisconnect):
rfile = BytesIO(b"")
_get_first_line(rfile)
- with raises(HttpReadDisconnect):
+ with raises(exceptions.HttpReadDisconnect):
rfile = Mock()
- rfile.readline.side_effect = TcpDisconnect
+ rfile.readline.side_effect = exceptions.TcpDisconnect
_get_first_line(rfile)
@@ -233,23 +232,23 @@ def test_read_request_line():
assert (t(b"GET http://foo:42/bar HTTP/1.1") ==
("absolute", b"GET", b"http", b"foo", 42, b"/bar", b"HTTP/1.1"))
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
t(b"GET / WTF/1.1")
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
t(b"this is not http")
- with raises(HttpReadDisconnect):
+ with raises(exceptions.HttpReadDisconnect):
t(b"")
def test_parse_authority_form():
assert _parse_authority_form(b"foo:42") == (b"foo", 42)
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
_parse_authority_form(b"foo")
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
_parse_authority_form(b"foo:bar")
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
_parse_authority_form(b"foo:99999999")
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
_parse_authority_form(b"f\x00oo:80")
@@ -263,14 +262,14 @@ def test_read_response_line():
# https://github.com/mitmproxy/mitmproxy/issues/784
assert t(b"HTTP/1.1 200 Non-Autoris\xc3\xa9") == (b"HTTP/1.1", 200, b"Non-Autoris\xc3\xa9")
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
assert t(b"HTTP/1.1")
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
t(b"HTTP/1.1 OK OK")
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
t(b"WTF/1.1 200 OK")
- with raises(HttpReadDisconnect):
+ with raises(exceptions.HttpReadDisconnect):
t(b"")
@@ -279,11 +278,11 @@ def test_check_http_version():
_check_http_version(b"HTTP/1.0")
_check_http_version(b"HTTP/1.1")
_check_http_version(b"HTTP/2.0")
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
_check_http_version(b"WTF/1.0")
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
_check_http_version(b"HTTP/1.10")
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
_check_http_version(b"HTTP/1.b")
@@ -322,17 +321,17 @@ class TestReadHeaders:
def test_read_continued_err(self):
data = b"\tfoo: bar\r\n"
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
self._read(data)
def test_read_err(self):
data = b"foo"
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
self._read(data)
def test_read_empty_name(self):
data = b":foo"
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
self._read(data)
def test_read_empty_value(self):
@@ -346,7 +345,7 @@ def test_read_chunked():
req.headers["Transfer-Encoding"] = "chunked"
data = b"1\r\na\r\n0\r\n"
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
b"".join(_read_chunked(BytesIO(data)))
data = b"1\r\na\r\n0\r\n\r\n"
@@ -364,7 +363,7 @@ def test_read_chunked():
b"".join(_read_chunked(BytesIO(data)))
data = b"foo\r\nfoo"
- with raises(HttpSyntaxException):
+ with raises(exceptions.HttpSyntaxException):
b"".join(_read_chunked(BytesIO(data)))
data = b"5\r\naaaaa\r\n0\r\n\r\n"
diff --git a/test/netlib/test_tcp.py b/test/netlib/test_tcp.py
index 2c1b92dc..d61e1d91 100644
--- a/test/netlib/test_tcp.py
+++ b/test/netlib/test_tcp.py
@@ -12,7 +12,7 @@ from OpenSSL import SSL
from mitmproxy import certs
from netlib import tcp
from netlib import tutils
-from netlib import exceptions
+from mitmproxy import exceptions
from . import tservers
diff --git a/test/pathod/test_log.py b/test/pathod/test_log.py
index deb0f613..8890e7d9 100644
--- a/test/pathod/test_log.py
+++ b/test/pathod/test_log.py
@@ -1,7 +1,7 @@
import io
from pathod import log
-from netlib.exceptions import TcpDisconnect
+from mitmproxy import exceptions
class DummyIO(io.StringIO):
@@ -20,6 +20,6 @@ def test_disconnect():
try:
with l.ctx() as lg:
lg("Test")
- except TcpDisconnect:
+ except exceptions.TcpDisconnect:
pass
assert "Test" in outf.getvalue()
diff --git a/test/pathod/test_pathoc.py b/test/pathod/test_pathoc.py
index f9670d73..d26eb15d 100644
--- a/test/pathod/test_pathoc.py
+++ b/test/pathod/test_pathoc.py
@@ -3,9 +3,9 @@ from mock import Mock
from netlib import http
from netlib import tcp
-from netlib.exceptions import NetlibException
from netlib.http import http1
from netlib.tutils import raises
+from mitmproxy import exceptions
from pathod import pathoc, language
from pathod.protocols.http2 import HTTP2StateProtocol
@@ -36,7 +36,7 @@ class PathocTestDaemon(tutils.DaemonTests):
r = r.freeze(language.Settings())
try:
c.request(r)
- except NetlibException:
+ except exceptions.NetlibException:
pass
self.d.wait_for_silence()
return s.getvalue()
diff --git a/test/pathod/test_pathod.py b/test/pathod/test_pathod.py
index 89d7c562..402cd638 100644
--- a/test/pathod/test_pathod.py
+++ b/test/pathod/test_pathod.py
@@ -2,7 +2,7 @@ import io
from pathod import pathod
from netlib import tcp
-from netlib.exceptions import HttpException, TlsException
+from mitmproxy import exceptions
from . import tutils
@@ -157,7 +157,7 @@ class CommonTests(tutils.DaemonTests):
def test_invalid_content_length(self):
tutils.raises(
- HttpException,
+ exceptions.HttpException,
self.pathoc,
["get:/:h'content-length'='foo'"]
)
@@ -166,7 +166,7 @@ class CommonTests(tutils.DaemonTests):
assert "Unparseable Content Length" in l["msg"]
def test_invalid_headers(self):
- tutils.raises(HttpException, self.pathoc, ["get:/:h'\t'='foo'"])
+ tutils.raises(exceptions.HttpException, self.pathoc, ["get:/:h'\t'='foo'"])
l = self.d.last_log()
assert l["type"] == "error"
assert "Invalid headers" in l["msg"]
@@ -225,7 +225,7 @@ class TestDaemon(CommonTests):
def test_connect_err(self):
tutils.raises(
- HttpException,
+ exceptions.HttpException,
self.pathoc,
[r"get:'http://foo.com/p/202':da"],
connect_to=("localhost", self.d.port)
@@ -241,7 +241,7 @@ class TestDaemonSSL(CommonTests):
c.wbufsize = 0
with c.connect():
c.wfile.write(b"\0\0\0\0")
- tutils.raises(TlsException, c.convert_to_ssl)
+ tutils.raises(exceptions.TlsException, c.convert_to_ssl)
l = self.d.last_log()
assert l["type"] == "error"
assert "SSL" in l["msg"]
diff --git a/test/pathod/test_protocols_http2.py b/test/pathod/test_protocols_http2.py
index 7300cc1d..bb69bd10 100644
--- a/test/pathod/test_protocols_http2.py
+++ b/test/pathod/test_protocols_http2.py
@@ -4,8 +4,8 @@ import codecs
import hyperframe
from netlib import tcp, http
from netlib.tutils import raises
-from netlib.exceptions import TcpDisconnect
from netlib.http import http2
+from mitmproxy import exceptions
from ..netlib import tservers as netlib_tservers
@@ -132,7 +132,7 @@ class TestPerformServerConnectionPreface(netlib_tservers.ServerTestBase):
protocol.perform_server_connection_preface()
assert protocol.connection_preface_performed
- with raises(TcpDisconnect):
+ with raises(exceptions.TcpDisconnect):
protocol.perform_server_connection_preface(force=True)