mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-26 10:16:27 +00:00
maplocal addon: improve tests
This commit is contained in:
parent
55bba92653
commit
41c99810ef
@ -1,77 +1,44 @@
|
|||||||
from pathlib import Path
|
import pytest
|
||||||
|
|
||||||
from mitmproxy.addons.maplocal import MapLocal
|
from mitmproxy.addons.maplocal import MapLocal, file_candidates
|
||||||
from mitmproxy.test import taddons
|
from mitmproxy.test import taddons
|
||||||
from mitmproxy.test import tflow
|
from mitmproxy.test import tflow
|
||||||
|
|
||||||
from mitmproxy.addons.modifyheaders import parse_modify_spec
|
from mitmproxy.addons.modifyheaders import parse_modify_spec
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"url,spec,expected_candidates", [
|
||||||
|
(
|
||||||
|
"https://example.org/img/topic/subtopic/test.jpg",
|
||||||
|
":example.com/foo:/tmp",
|
||||||
|
["/tmp/img/topic/subtopic/test.jpg", "/tmp/img/topic/test.jpg", "/tmp/img/test.jpg", "/tmp/test.jpg"]
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"https://example.org/img/topic/subtopic/",
|
||||||
|
":/img:/tmp",
|
||||||
|
["/tmp/img/topic/subtopic/index.html", "/tmp/img/topic/index.html", "/tmp/img/index.html", "/tmp/index.html"]
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"https://example.org",
|
||||||
|
":org:/tmp",
|
||||||
|
["/tmp/index.html"]
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_file_candidates(url, spec, expected_candidates):
|
||||||
|
spec = parse_modify_spec(spec, True, True)
|
||||||
|
candidates = file_candidates(url, spec.replacement)
|
||||||
|
assert [str(x) for x in candidates] == expected_candidates
|
||||||
|
|
||||||
|
|
||||||
class TestMapLocal:
|
class TestMapLocal:
|
||||||
def test_file_candidates(self, tmpdir):
|
def test_map_local(self, tmpdir):
|
||||||
ml = MapLocal()
|
|
||||||
|
|
||||||
url = "https://example.org/img/topic/subtopic/test.jpg"
|
|
||||||
spec = parse_modify_spec(":/img/jpg:" + str(tmpdir), True, True)
|
|
||||||
file_candidates = ml.file_candidates(url, spec)
|
|
||||||
assert file_candidates[0] == str(tmpdir) + "/img/topic/subtopic/test.jpg"
|
|
||||||
assert file_candidates[1] == str(tmpdir) + "/img/topic/test.jpg"
|
|
||||||
assert file_candidates[2] == str(tmpdir) + "/img/test.jpg"
|
|
||||||
assert file_candidates[3] == str(tmpdir) + "/test.jpg"
|
|
||||||
|
|
||||||
url = "https://example.org/img/topic/subtopic/"
|
|
||||||
spec = parse_modify_spec(":/img:" + str(tmpdir), True, True)
|
|
||||||
file_candidates = ml.file_candidates(url, spec)
|
|
||||||
assert file_candidates[0] == str(tmpdir) + "/img/topic/subtopic/index.html"
|
|
||||||
assert file_candidates[1] == str(tmpdir) + "/img/topic/index.html"
|
|
||||||
assert file_candidates[2] == str(tmpdir) + "/img/index.html"
|
|
||||||
assert file_candidates[3] == str(tmpdir) + "/index.html"
|
|
||||||
|
|
||||||
url = "https://example.org"
|
|
||||||
spec = parse_modify_spec(":org:" + str(tmpdir), True, True)
|
|
||||||
file_candidates = ml.file_candidates(url, spec)
|
|
||||||
assert file_candidates[0] == str(tmpdir) + "/index.html"
|
|
||||||
|
|
||||||
def test_sanitize_candidate_path(self, tmpdir):
|
|
||||||
base_dir = Path(str(tmpdir))
|
|
||||||
|
|
||||||
tmpdir.join("testdir1", "testdir2", "testdir3", "testdir4", "testfile").write("bar", ensure=True)
|
|
||||||
|
|
||||||
ml = MapLocal()
|
|
||||||
assert ml.sanitize_candidate_path(
|
|
||||||
base_dir.joinpath("..", "bar"), base_dir
|
|
||||||
) is None
|
|
||||||
assert ml.sanitize_candidate_path(
|
|
||||||
base_dir.joinpath(".."), base_dir
|
|
||||||
) is None
|
|
||||||
assert ml.sanitize_candidate_path(
|
|
||||||
base_dir.joinpath("..", ".."), base_dir
|
|
||||||
) is None
|
|
||||||
assert ml.sanitize_candidate_path(
|
|
||||||
base_dir.joinpath("..", "..", "..", "..", "..", "..", "etc", "passwd"), base_dir
|
|
||||||
) is None
|
|
||||||
|
|
||||||
assert ml.sanitize_candidate_path(
|
|
||||||
base_dir.joinpath("testdir1"), base_dir
|
|
||||||
) is not None
|
|
||||||
assert ml.sanitize_candidate_path(
|
|
||||||
base_dir.joinpath("testdir1", "testdir2"), base_dir
|
|
||||||
) is not None
|
|
||||||
assert ml.sanitize_candidate_path(
|
|
||||||
base_dir.joinpath("testdir1", "testdir2", "testdir3", "testdir4", "testfile"), base_dir
|
|
||||||
) is not None
|
|
||||||
assert ml.sanitize_candidate_path(
|
|
||||||
base_dir.joinpath("testdir1", "testdir2", "testdir3", "testdir4", "testfile"),
|
|
||||||
base_dir.joinpath("testdir1", "testdir2", "testdir3", "testdir4", "testfile")
|
|
||||||
) is not None
|
|
||||||
|
|
||||||
def test_modify_headers(self, tmpdir):
|
|
||||||
ml = MapLocal()
|
ml = MapLocal()
|
||||||
|
|
||||||
with taddons.context(ml) as tctx:
|
with taddons.context(ml) as tctx:
|
||||||
tmpfile = tmpdir.join("test1.jpg")
|
tmpfile = tmpdir.join("test1.jpg")
|
||||||
tmpfile.write("local content 1")
|
tmpfile.write("foo")
|
||||||
|
|
||||||
tctx.configure(
|
tctx.configure(
|
||||||
ml,
|
ml,
|
||||||
map_local=[
|
map_local=[
|
||||||
@ -81,11 +48,10 @@ class TestMapLocal:
|
|||||||
f = tflow.tflow()
|
f = tflow.tflow()
|
||||||
f.request.url = b"https://example.org/images/test1.jpg"
|
f.request.url = b"https://example.org/images/test1.jpg"
|
||||||
ml.request(f)
|
ml.request(f)
|
||||||
assert f.response.content == b"local content 1"
|
assert f.response.content == b"foo"
|
||||||
|
|
||||||
tmpfile = tmpdir.join("images", "test2.jpg")
|
tmpfile = tmpdir.join("images", "test2.jpg")
|
||||||
tmpfile.write("local content 2", ensure=True)
|
tmpfile.write("bar", ensure=True)
|
||||||
|
|
||||||
tctx.configure(
|
tctx.configure(
|
||||||
ml,
|
ml,
|
||||||
map_local=[
|
map_local=[
|
||||||
@ -95,11 +61,10 @@ class TestMapLocal:
|
|||||||
f = tflow.tflow()
|
f = tflow.tflow()
|
||||||
f.request.url = b"https://example.org/images/test2.jpg"
|
f.request.url = b"https://example.org/images/test2.jpg"
|
||||||
ml.request(f)
|
ml.request(f)
|
||||||
assert f.response.content == b"local content 2"
|
assert f.response.content == b"bar"
|
||||||
|
|
||||||
tmpfile = tmpdir.join("images", "test3.jpg")
|
tmpfile = tmpdir.join("images", "test3.jpg")
|
||||||
tmpfile.write("local content 3", ensure=True)
|
tmpfile.write("foobar", ensure=True)
|
||||||
|
|
||||||
tctx.configure(
|
tctx.configure(
|
||||||
ml,
|
ml,
|
||||||
map_local=[
|
map_local=[
|
||||||
@ -107,6 +72,6 @@ class TestMapLocal:
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
f = tflow.tflow()
|
f = tflow.tflow()
|
||||||
f.request.url = b"https://example.org/images/test3.jpg"
|
f.request.url = b"https://example.org/foo.jpg"
|
||||||
ml.request(f)
|
ml.request(f)
|
||||||
assert f.response.content == b"local content 3"
|
assert f.response.content == b"foobar"
|
||||||
|
Loading…
Reference in New Issue
Block a user