File: test_examples.py

package info (click to toggle)
mitmproxy 8.1.1-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 38,952 kB
  • sloc: python: 53,389; javascript: 1,603; xml: 186; sh: 105; ansic: 68; makefile: 13
file content (124 lines) | stat: -rw-r--r-- 4,839 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
from mitmproxy import contentviews
from mitmproxy.test import tflow
from mitmproxy.test import tutils
from mitmproxy.test import taddons
from mitmproxy.http import Headers


class TestScripts:
    def test_add_header(self, tdata):
        with taddons.context() as tctx:
            a = tctx.script(tdata.path("../examples/addons/anatomy2.py"))
            f = tflow.tflow()
            a.request(f)
            assert f.request.headers["myheader"] == "value"

    def test_custom_contentviews(self, tdata):
        with taddons.context() as tctx:
            tctx.script(tdata.path("../examples/addons/contentview.py"))
            swapcase = contentviews.get("swapcase")
            _, fmt = swapcase(b"<html>Test!</html>")
            assert any(b"tEST!" in val[0][1] for val in fmt)

    def test_custom_grpc_contentview(self, tdata):
        with taddons.context() as tctx:
            tctx.script(tdata.path("../examples/addons/contentview-custom-grpc.py"))
            v = contentviews.get("customized gRPC/protobuf")

            p = tdata.path("mitmproxy/contentviews/test_grpc_data/msg1.bin")
            with open(p, "rb") as f:
                raw = f.read()

            sim_msg_req = tutils.treq(
                port=443, host="example.com", path="/ReverseGeocode"
            )

            sim_msg_resp = tutils.tresp()

            sim_flow = tflow.tflow(req=sim_msg_req, resp=sim_msg_resp)

            view_text, output = v(
                raw, flow=sim_flow, http_message=sim_flow.request
            )  # simulate request message
            assert view_text == "Protobuf (flattened) (addon with custom rules)"
            output = list(output)  # assure list conversion if generator
            assert output == [
                [
                    ("text", "[message]  "),
                    ("text", "position   "),
                    ("text", "1    "),
                    ("text", "                               "),
                ],
                [
                    ("text", "[double]   "),
                    ("text", "latitude   "),
                    ("text", "1.1  "),
                    ("text", "38.89816675798073              "),
                ],
                [
                    ("text", "[double]   "),
                    ("text", "longitude  "),
                    ("text", "1.2  "),
                    ("text", "-77.03829828366696             "),
                ],
                [
                    ("text", "[string]   "),
                    ("text", "country    "),
                    ("text", "3    "),
                    ("text", "de_DE                          "),
                ],
                [
                    ("text", "[uint32]   "),
                    ("text", "           "),
                    ("text", "6    "),
                    ("text", "1                              "),
                ],
                [
                    ("text", "[string]   "),
                    ("text", "app        "),
                    ("text", "7    "),
                    ("text", "de.mcdonalds.mcdonaldsinfoapp  "),
                ],
            ]

    def test_modify_form(self, tdata):
        with taddons.context() as tctx:
            sc = tctx.script(tdata.path("../examples/addons/http-modify-form.py"))

            form_header = Headers(content_type="application/x-www-form-urlencoded")
            f = tflow.tflow(req=tutils.treq(headers=form_header))
            sc.request(f)

            assert f.request.urlencoded_form["mitmproxy"] == "rocks"

            f.request.headers["content-type"] = ""
            sc.request(f)
            assert list(f.request.urlencoded_form.items()) == [("foo", "bar")]

    def test_modify_querystring(self, tdata):
        with taddons.context() as tctx:
            sc = tctx.script(
                tdata.path("../examples/addons/http-modify-query-string.py")
            )
            f = tflow.tflow(req=tutils.treq(path="/search?q=term"))

            sc.request(f)
            assert f.request.query["mitmproxy"] == "rocks"

            f.request.path = "/"
            sc.request(f)
            assert f.request.query["mitmproxy"] == "rocks"

    def test_redirect_requests(self, tdata):
        with taddons.context() as tctx:
            sc = tctx.script(tdata.path("../examples/addons/http-redirect-requests.py"))
            f = tflow.tflow(req=tutils.treq(host="example.org"))
            sc.request(f)
            assert f.request.host == "mitmproxy.org"

    def test_send_reply_from_proxy(self, tdata):
        with taddons.context() as tctx:
            sc = tctx.script(tdata.path("../examples/addons/http-reply-from-proxy.py"))
            f = tflow.tflow(req=tutils.treq(host="example.com", port=80))
            sc.request(f)
            assert f.response.content == b"Hello World"