76 lines
1.8 KiB
Python
76 lines
1.8 KiB
Python
import asyncio
|
|
from pathlib import Path
|
|
|
|
from models.proxy import ProxyDocument
|
|
from models.service import ServiceEndpointDocument
|
|
from services.mitmproxy.manager import MitmdumpManager
|
|
|
|
|
|
def make_proxy(**updates):
|
|
data = {
|
|
"proxy_port": 8080,
|
|
"name": "svc",
|
|
"code": "",
|
|
"service": ServiceEndpointDocument(port=9000),
|
|
}
|
|
data.update(updates)
|
|
return ProxyDocument(**data)
|
|
|
|
|
|
def test_reverse_mode_is_built_from_service():
|
|
manager = MitmdumpManager()
|
|
proxy = make_proxy(protocol="tcp")
|
|
|
|
command = manager.build_command(
|
|
"mitmdump",
|
|
proxy,
|
|
9100,
|
|
Path("/tmp/addon.py"),
|
|
Path("/tmp/conf/config.yaml"),
|
|
)
|
|
|
|
assert "reverse:tcp://127.0.0.1:9100@8080" in command
|
|
assert "--listen-port" not in command
|
|
|
|
|
|
def test_raw_mode_spec_overrides_generated_mode():
|
|
manager = MitmdumpManager()
|
|
proxy = make_proxy(mode="regular", mode_spec="wireguard:/tmp/wg.conf@51820")
|
|
|
|
command = manager.build_command(
|
|
"mitmdump",
|
|
proxy,
|
|
None,
|
|
Path("/tmp/addon.py"),
|
|
Path("/tmp/conf/config.yaml"),
|
|
)
|
|
|
|
assert "wireguard:/tmp/wg.conf@51820" in command
|
|
assert "--listen-port" not in command
|
|
|
|
|
|
def test_regular_mode_uses_proxy_port_as_listen_port():
|
|
manager = MitmdumpManager()
|
|
proxy = make_proxy(mode="regular")
|
|
|
|
command = manager.build_command(
|
|
"mitmdump",
|
|
proxy,
|
|
None,
|
|
Path("/tmp/addon.py"),
|
|
Path("/tmp/conf/config.yaml"),
|
|
)
|
|
|
|
assert "regular" in command
|
|
assert command[-2:] == ["--listen-port", "8080"]
|
|
|
|
|
|
def test_running_document_without_pid_is_treated_as_stopped():
|
|
manager = MitmdumpManager()
|
|
proxy = make_proxy(status="running", pid=None)
|
|
|
|
async def run():
|
|
return await manager.status(proxy)
|
|
|
|
assert asyncio.run(run()) == "stopped"
|