aboutsummaryrefslogtreecommitdiffstats
path: root/test/mitmproxy/test_websocket.py
blob: 7c53a4b0b97fbe89a9ea16972db9690e1955a5ab (plain)
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
import io
import pytest

from mitmproxy.io import tnetstring
from mitmproxy import flowfilter
from mitmproxy.test import tflow


class TestWebSocketFlow:

    def test_copy(self):
        f = tflow.twebsocketflow()
        f.get_state()
        f2 = f.copy()
        a = f.get_state()
        b = f2.get_state()
        del a["id"]
        del b["id"]
        assert a == b
        assert not f == f2
        assert f is not f2

        assert f.client_key == f2.client_key
        assert f.client_protocol == f2.client_protocol
        assert f.client_extensions == f2.client_extensions
        assert f.server_accept == f2.server_accept
        assert f.server_protocol == f2.server_protocol
        assert f.server_extensions == f2.server_extensions
        assert f.messages is not f2.messages
        assert f.handshake_flow is not f2.handshake_flow

        for m in f.messages:
            m2 = m.copy()
            m2.set_state(m2.get_state())
            assert m is not m2
            assert m.get_state() == m2.get_state()

        f = tflow.twebsocketflow(err=True)
        f2 = f.copy()
        assert f is not f2
        assert f.handshake_flow is not f2.handshake_flow
        assert f.error.get_state() == f2.error.get_state()
        assert f.error is not f2.error

    def test_match(self):
        f = tflow.twebsocketflow()
        assert not flowfilter.match("~b nonexistent", f)
        assert flowfilter.match(None, f)
        assert not flowfilter.match("~b nonexistent", f)

        f = tflow.twebsocketflow(err=True)
        assert flowfilter.match("~e", f)

        with pytest.raises(ValueError):
            flowfilter.match("~", f)

    def test_repr(self):
        f = tflow.twebsocketflow()
        assert f.message_info(f.messages[0])
        assert 'WebSocketFlow' in repr(f)
        assert 'binary message: ' in repr(f.messages[0])
        assert 'text message: ' in repr(f.messages[1])

    def test_serialize(self):
        b = io.BytesIO()
        d = tflow.twebsocketflow().get_state()
        tnetstring.dump(d, b)
        assert b.getvalue()

        b = io.BytesIO()
        d = tflow.twebsocketflow().handshake_flow.get_state()
        tnetstring.dump(d, b)
        assert b.getvalue()