mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2025-01-30 23:09:44 +00:00
Add addons.intercept
- Add an addon to handle intercept based on a filter pattern - Start sketching out a nicer testing truss for addons in mitmproxy.test.taddon
This commit is contained in:
parent
71d2636594
commit
2dc3284fbb
@ -1,4 +1,4 @@
|
||||
import ctx
|
||||
from mitmproxy import ctx
|
||||
from mitmproxy import flowfilter
|
||||
from mitmproxy import exceptions
|
||||
|
||||
@ -11,8 +11,8 @@ class Intercept:
|
||||
if "intercept" in updated:
|
||||
if not opts.intercept:
|
||||
self.filt = None
|
||||
filt = flowfilter.parse(opts.intercept)
|
||||
if not filt:
|
||||
self.filt = flowfilter.parse(opts.intercept)
|
||||
if not self.filt:
|
||||
raise exceptions.OptionsError(
|
||||
"Invalid interception filter: %s" % opts.intercept
|
||||
)
|
||||
|
37
mitmproxy/test/taddons.py
Normal file
37
mitmproxy/test/taddons.py
Normal file
@ -0,0 +1,37 @@
|
||||
import mitmproxy.master
|
||||
import mitmproxy.options
|
||||
from mitmproxy import proxy
|
||||
|
||||
|
||||
class context:
|
||||
"""
|
||||
A helper context for testing addons. Its most important function is to
|
||||
set up the ctx module so handlers can be called just like they would be
|
||||
when running from within mitmproxy.
|
||||
"""
|
||||
def __init__(self, master = None, options = None):
|
||||
self.options = options or mitmproxy.options.Options()
|
||||
self.master = master or mitmproxy.master.Master(
|
||||
options, proxy.DummyServer(options)
|
||||
)
|
||||
self.wrapped = None
|
||||
|
||||
def __enter__(self):
|
||||
self.wrapped = self.master.handlecontext()
|
||||
self.wrapped.__enter__()
|
||||
return self
|
||||
|
||||
def __exit__(self, exc_type, exc_value, traceback):
|
||||
self.wrapped.__exit__(exc_type, exc_value, traceback)
|
||||
self.wrapped = None
|
||||
return False
|
||||
|
||||
def configure(self, addon, **kwargs):
|
||||
"""
|
||||
A helper for testing configure methods. Modifies the registered
|
||||
Options object with the given keyword arguments, then calls the
|
||||
configure method on the addon with the updated value.
|
||||
"""
|
||||
for k, v in kwargs.items():
|
||||
setattr(self.options, k, v)
|
||||
addon.configure(self.options, kwargs.keys())
|
@ -0,0 +1,25 @@
|
||||
from mitmproxy.addons import intercept
|
||||
from mitmproxy import options
|
||||
from mitmproxy import exceptions
|
||||
from mitmproxy.test import taddons
|
||||
from mitmproxy.test import tutils
|
||||
|
||||
|
||||
class Options(options.Options):
|
||||
def __init__(self, *, intercept=None, **kwargs):
|
||||
self.intercept = intercept
|
||||
super().__init__(**kwargs)
|
||||
|
||||
|
||||
def test_simple():
|
||||
r = intercept.Intercept()
|
||||
with taddons.context(options=Options()) as tctx:
|
||||
assert not r.filt
|
||||
tctx.configure(r, intercept="~q")
|
||||
assert r.filt
|
||||
tutils.raises(
|
||||
exceptions.OptionsError,
|
||||
tctx.configure,
|
||||
r,
|
||||
intercept="~~"
|
||||
)
|
@ -10,10 +10,6 @@ from mitmproxy import http
|
||||
from mitmproxy import options
|
||||
|
||||
|
||||
class TestMaster:
|
||||
pass
|
||||
|
||||
|
||||
class MasterTest:
|
||||
|
||||
def cycle(self, master, content):
|
||||
|
Loading…
Reference in New Issue
Block a user