mirror of
https://github.com/zhigang1992/mitmproxy.git
synced 2026-04-29 04:35:02 +08:00
- Action bar now correctly gets the palette background - Viewing connection details for a killed flow no longer crashes - Editing options with selections no longer crashes
166 lines
4.7 KiB
Python
166 lines
4.7 KiB
Python
from mitmproxy.addons import core
|
|
from mitmproxy.test import taddons
|
|
from mitmproxy.test import tflow
|
|
from mitmproxy import exceptions
|
|
import pytest
|
|
|
|
|
|
def test_set():
|
|
sa = core.Core()
|
|
with taddons.context() as tctx:
|
|
tctx.master.addons.add(sa)
|
|
|
|
assert not tctx.master.options.anticomp
|
|
tctx.command(sa.set, "anticomp")
|
|
assert tctx.master.options.anticomp
|
|
|
|
with pytest.raises(exceptions.CommandError):
|
|
tctx.command(sa.set, "nonexistent")
|
|
|
|
|
|
def test_resume():
|
|
sa = core.Core()
|
|
with taddons.context():
|
|
f = tflow.tflow()
|
|
assert not sa.resume([f])
|
|
f.intercept()
|
|
sa.resume([f])
|
|
assert not f.reply.state == "taken"
|
|
|
|
|
|
def test_mark():
|
|
sa = core.Core()
|
|
with taddons.context():
|
|
f = tflow.tflow()
|
|
assert not f.marked
|
|
sa.mark([f], True)
|
|
assert f.marked
|
|
|
|
sa.mark_toggle([f])
|
|
assert not f.marked
|
|
sa.mark_toggle([f])
|
|
assert f.marked
|
|
|
|
|
|
def test_kill():
|
|
sa = core.Core()
|
|
with taddons.context():
|
|
f = tflow.tflow()
|
|
f.intercept()
|
|
assert f.killable
|
|
sa.kill([f])
|
|
assert not f.killable
|
|
|
|
|
|
def test_revert():
|
|
sa = core.Core()
|
|
with taddons.context():
|
|
f = tflow.tflow()
|
|
f.backup()
|
|
f.request.content = b"bar"
|
|
assert f.modified()
|
|
sa.revert([f])
|
|
assert not f.modified()
|
|
|
|
|
|
def test_flow_set():
|
|
sa = core.Core()
|
|
with taddons.context():
|
|
f = tflow.tflow(resp=True)
|
|
assert sa.flow_set_options()
|
|
|
|
with pytest.raises(exceptions.CommandError):
|
|
sa.flow_set([f], "flibble", "post")
|
|
|
|
assert f.request.method != "post"
|
|
sa.flow_set([f], "method", "post")
|
|
assert f.request.method == "POST"
|
|
|
|
assert f.request.host != "testhost"
|
|
sa.flow_set([f], "host", "testhost")
|
|
assert f.request.host == "testhost"
|
|
|
|
assert f.request.path != "/test/path"
|
|
sa.flow_set([f], "path", "/test/path")
|
|
assert f.request.path == "/test/path"
|
|
|
|
assert f.request.url != "http://foo.com/bar"
|
|
sa.flow_set([f], "url", "http://foo.com/bar")
|
|
assert f.request.url == "http://foo.com/bar"
|
|
with pytest.raises(exceptions.CommandError):
|
|
sa.flow_set([f], "url", "oink")
|
|
|
|
assert f.response.status_code != 404
|
|
sa.flow_set([f], "status_code", "404")
|
|
assert f.response.status_code == 404
|
|
assert f.response.reason == "Not Found"
|
|
with pytest.raises(exceptions.CommandError):
|
|
sa.flow_set([f], "status_code", "oink")
|
|
|
|
assert f.response.reason != "foo"
|
|
sa.flow_set([f], "reason", "foo")
|
|
assert f.response.reason == "foo"
|
|
|
|
|
|
def test_encoding():
|
|
sa = core.Core()
|
|
with taddons.context():
|
|
f = tflow.tflow()
|
|
assert sa.encode_options()
|
|
sa.encode([f], "request", "deflate")
|
|
assert f.request.headers["content-encoding"] == "deflate"
|
|
|
|
sa.encode([f], "request", "br")
|
|
assert f.request.headers["content-encoding"] == "deflate"
|
|
|
|
sa.decode([f], "request")
|
|
assert "content-encoding" not in f.request.headers
|
|
|
|
sa.encode([f], "request", "br")
|
|
assert f.request.headers["content-encoding"] == "br"
|
|
|
|
sa.encode_toggle([f], "request")
|
|
assert "content-encoding" not in f.request.headers
|
|
sa.encode_toggle([f], "request")
|
|
assert f.request.headers["content-encoding"] == "deflate"
|
|
sa.encode_toggle([f], "request")
|
|
assert "content-encoding" not in f.request.headers
|
|
|
|
with pytest.raises(exceptions.CommandError):
|
|
sa.encode([f], "request", "invalid")
|
|
|
|
|
|
def test_options(tmpdir):
|
|
p = str(tmpdir.join("path"))
|
|
sa = core.Core()
|
|
with taddons.context() as tctx:
|
|
tctx.options.stickycookie = "foo"
|
|
assert tctx.options.stickycookie == "foo"
|
|
sa.options_reset()
|
|
assert tctx.options.stickycookie is None
|
|
|
|
tctx.options.stickycookie = "foo"
|
|
tctx.options.stickyauth = "bar"
|
|
sa.options_reset_one("stickycookie")
|
|
assert tctx.options.stickycookie is None
|
|
assert tctx.options.stickyauth == "bar"
|
|
|
|
with pytest.raises(exceptions.CommandError):
|
|
sa.options_reset_one("unknown")
|
|
|
|
sa.options_save(p)
|
|
with pytest.raises(exceptions.CommandError):
|
|
sa.options_save("/")
|
|
|
|
sa.options_reset()
|
|
assert tctx.options.stickyauth is None
|
|
sa.options_load(p)
|
|
assert tctx.options.stickyauth == "bar"
|
|
|
|
sa.options_load("/nonexistent")
|
|
|
|
with open(p, 'a') as f:
|
|
f.write("'''")
|
|
with pytest.raises(exceptions.CommandError):
|
|
sa.options_load(p)
|