mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-23 00:01:36 +00:00
Unit tests and minor code refactoring for ServerConnection.
This commit is contained in:
parent
060e3198bc
commit
d0ee4d60d0
@ -48,9 +48,9 @@ class ProxyConfig:
|
||||
self.reverse_proxy = reverse_proxy
|
||||
self.transparent_proxy = transparent_proxy
|
||||
self.authenticator = authenticator
|
||||
|
||||
self.certstore = certutils.CertStore(certdir)
|
||||
|
||||
|
||||
class RequestReplayThread(threading.Thread):
|
||||
def __init__(self, config, flow, masterq):
|
||||
self.config, self.flow, self.masterq = config, flow, masterq
|
||||
@ -86,7 +86,7 @@ class ServerConnection(tcp.TCPClient):
|
||||
clientcert = None
|
||||
if self.config.clientcerts:
|
||||
path = os.path.join(self.config.clientcerts, self.host) + ".pem"
|
||||
if os.path.exists(clientcert):
|
||||
if os.path.exists(path):
|
||||
clientcert = path
|
||||
try:
|
||||
self.convert_to_ssl(clientcert=clientcert, sni=self.host)
|
||||
@ -95,10 +95,10 @@ class ServerConnection(tcp.TCPClient):
|
||||
|
||||
def send(self, request):
|
||||
self.requestcount += 1
|
||||
d = request._assemble()
|
||||
if not d:
|
||||
raise ProxyError(502, "Cannot transmit an incomplete request.")
|
||||
try:
|
||||
d = request._assemble()
|
||||
if not d:
|
||||
raise ProxyError(502, "Incomplete request could not not be readied for transmission.")
|
||||
self.wfile.write(d)
|
||||
self.wfile.flush()
|
||||
except socket.error, err:
|
||||
@ -373,7 +373,7 @@ class ProxyHandler(tcp.BaseHandler):
|
||||
def send_response(self, response):
|
||||
d = response._assemble()
|
||||
if not d:
|
||||
raise ProxyError(502, "Incomplete response could not not be readied for transmission.")
|
||||
raise ProxyError(502, "Cannot transmit an incomplete response.")
|
||||
self.wfile.write(d)
|
||||
self.wfile.flush()
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
from libmproxy import proxy
|
||||
from libmproxy import proxy, flow
|
||||
import tutils
|
||||
from libpathod import test
|
||||
from netlib import http
|
||||
|
||||
|
||||
def test_proxy_error():
|
||||
@ -26,3 +28,31 @@ def test_app_registry():
|
||||
assert not ar.get(r)
|
||||
r.headers["host"] = ["domain"]
|
||||
assert ar.get(r)
|
||||
|
||||
|
||||
|
||||
class TestServerConnection:
|
||||
def setUp(self):
|
||||
self.d = test.Daemon()
|
||||
|
||||
def tearDown(self):
|
||||
self.d.shutdown()
|
||||
|
||||
def test_simple(self):
|
||||
sc = proxy.ServerConnection(proxy.ProxyConfig(), self.d.IFACE, self.d.port)
|
||||
sc.connect("http")
|
||||
r = tutils.treq()
|
||||
r.path = "/p/200:da"
|
||||
sc.send(r)
|
||||
assert http.read_response(sc.rfile, r.method, 1000)
|
||||
assert self.d.last_log()
|
||||
|
||||
r.content = flow.CONTENT_MISSING
|
||||
tutils.raises("incomplete request", sc.send, r)
|
||||
|
||||
def test_send_error(self):
|
||||
sc = proxy.ServerConnection(proxy.ProxyConfig(), self.d.IFACE, self.d.port)
|
||||
sc.connect("http")
|
||||
r = tutils.treq()
|
||||
sc.send(r)
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
from netlib import tcp
|
||||
from libpathod import pathoc
|
||||
import tutils
|
||||
|
||||
"""
|
||||
@ -52,6 +53,20 @@ class TestHTTP(tutils.HTTPProxTest, SanityMixin):
|
||||
t.wfile.flush()
|
||||
assert "Bad Request" in t.rfile.readline()
|
||||
|
||||
def test_upstream_ssl_error(self):
|
||||
p = self.pathoc()
|
||||
ret = p.request("get:'https://localhost:%s/'"%self.server.port)
|
||||
assert ret[1] == 400
|
||||
|
||||
def test_http(self):
|
||||
f = self.pathod("304")
|
||||
assert f.status_code == 304
|
||||
|
||||
l = self.master.state.view[0]
|
||||
assert l.request.client_conn.address
|
||||
assert "host" in l.request.headers
|
||||
assert l.response.code == 304
|
||||
|
||||
|
||||
class TestHTTPS(tutils.HTTPProxTest, SanityMixin):
|
||||
ssl = True
|
||||
@ -65,12 +80,3 @@ class TestTransparent(tutils.TransparentProxTest, SanityMixin):
|
||||
transparent = True
|
||||
|
||||
|
||||
class TestProxy(tutils.HTTPProxTest):
|
||||
def test_http(self):
|
||||
f = self.pathod("304")
|
||||
assert f.status_code == 304
|
||||
|
||||
l = self.master.state.view[0]
|
||||
assert l.request.client_conn.address
|
||||
assert "host" in l.request.headers
|
||||
assert l.response.code == 304
|
||||
|
@ -127,6 +127,11 @@ class HTTPProxTest(ProxTestBase):
|
||||
def get_proxy_config(cls):
|
||||
return dict()
|
||||
|
||||
def pathoc(self, connect_to = None):
|
||||
p = libpathod.pathoc.Pathoc("localhost", self.proxy.port)
|
||||
p.connect(connect_to)
|
||||
return p
|
||||
|
||||
def pathod(self, spec):
|
||||
"""
|
||||
Constructs a pathod request, with the appropriate base and proxy.
|
||||
|
Loading…
Reference in New Issue
Block a user