コード例 #1
0
    def handle_websockets(cls, rfile, wfile):
        wfile.write(bytes(websockets_frame.Frame(fin=1, opcode=Opcode.TEXT, payload=b'server-foobar')))
        wfile.flush()

        header, frame, _ = websocket_utils.read_raw_frame(rfile)
        wfile.write(bytes(websockets_frame.Frame(fin=1, opcode=header.opcode, payload=frame.payload)))
        wfile.flush()
コード例 #2
0
    def test_change_payload(self):
        class Addon:
            def websocket_message(self, f):
                f.messages[-1].content = "foo"

        self.proxy.set_addons(Addon())
        self.setup_connection()

        _, frame, _ = websocket.read_frame(self.client.rfile)
        assert frame.payload == b'foo'

        self.client.wfile.write(
            bytes(
                websockets_frame.Frame(fin=1,
                                       mask=1,
                                       opcode=Opcode.TEXT,
                                       payload=b'self.client-foobar')))
        self.client.wfile.flush()

        _, frame, _ = websocket.read_frame(self.client.rfile)
        assert frame.payload == b'foo'

        self.client.wfile.write(
            bytes(
                websockets_frame.Frame(fin=1,
                                       mask=1,
                                       opcode=Opcode.BINARY,
                                       payload=b'\xde\xad\xbe\xef')))
        self.client.wfile.flush()

        _, frame, _ = websocket.read_frame(self.client.rfile)
        assert frame.payload == b'foo'
コード例 #3
0
    def handle_websockets(cls, rfile, wfile):
        header, frame, _ = websocket_utils.read_raw_frame(rfile)
        wfile.write(bytes(websockets_frame.Frame(fin=1, opcode=header.opcode, payload=frame.payload)))
        wfile.write(bytes(websockets_frame.Frame(fin=1, opcode=Opcode.CLOSE)))
        wfile.flush()

        with pytest.raises(exceptions.TcpDisconnect):
            _, _, _ = websocket_utils.read_raw_frame(rfile)
コード例 #4
0
    def test_simple(self, streaming):
        class Stream:
            def websocket_start(self, f):
                f.stream = streaming

        self.proxy.set_addons(Stream())
        self.setup_connection()

        _, frame, _ = websocket.read_frame(self.client.rfile)
        assert frame.payload == b'server-foobar'

        self.client.wfile.write(
            bytes(
                websockets_frame.Frame(fin=1,
                                       mask=1,
                                       opcode=Opcode.TEXT,
                                       payload=b'self.client-foobar')))
        self.client.wfile.flush()

        _, frame, _ = websocket.read_frame(self.client.rfile)
        assert frame.payload == b'self.client-foobar'

        self.client.wfile.write(
            bytes(
                websockets_frame.Frame(fin=1,
                                       mask=1,
                                       opcode=Opcode.BINARY,
                                       payload=b'\xde\xad\xbe\xef')))
        self.client.wfile.flush()

        _, frame, _ = websocket.read_frame(self.client.rfile)
        assert frame.payload == b'\xde\xad\xbe\xef'

        self.client.wfile.write(
            bytes(websockets_frame.Frame(fin=1, mask=1, opcode=Opcode.CLOSE)))
        self.client.wfile.flush()

        assert len(self.master.state.flows) == 2
        assert isinstance(self.master.state.flows[0], HTTPFlow)
        assert isinstance(self.master.state.flows[1], WebSocketFlow)
        assert len(self.master.state.flows[1].messages) == 5
        assert self.master.state.flows[1].messages[
            0].content == 'server-foobar'
        assert self.master.state.flows[1].messages[0].type == Opcode.TEXT
        assert self.master.state.flows[1].messages[
            1].content == 'self.client-foobar'
        assert self.master.state.flows[1].messages[1].type == Opcode.TEXT
        assert self.master.state.flows[1].messages[
            2].content == 'self.client-foobar'
        assert self.master.state.flows[1].messages[2].type == Opcode.TEXT
        assert self.master.state.flows[1].messages[
            3].content == b'\xde\xad\xbe\xef'
        assert self.master.state.flows[1].messages[3].type == Opcode.BINARY
        assert self.master.state.flows[1].messages[
            4].content == b'\xde\xad\xbe\xef'
        assert self.master.state.flows[1].messages[4].type == Opcode.BINARY
コード例 #5
0
    def handle_websockets(cls, rfile, wfile):
        header, frame, _ = websocket_utils.read_raw_frame(rfile)
        assert header.opcode == Opcode.PING
        assert frame.payload == b''

        wfile.write(bytes(websockets_frame.Frame(fin=1, opcode=Opcode.PONG, payload=frame.payload)))
        wfile.flush()

        wfile.write(bytes(websockets_frame.Frame(fin=1, opcode=Opcode.CLOSE)))
        wfile.flush()
        _ = websocket_utils.read_raw_frame(rfile)
コード例 #6
0
    def test_simple_tls(self):
        self.setup_connection()

        _, frame, _ = websocket_utils.read_raw_frame(self.client.rfile)
        assert frame.payload == b'server-foobar'

        self.client.wfile.write(bytes(websockets_frame.Frame(fin=1, mask=1, opcode=Opcode.TEXT, payload=b'self.client-foobar')))
        self.client.wfile.flush()

        _, frame, _ = websocket_utils.read_raw_frame(self.client.rfile)
        assert frame.payload == b'self.client-foobar'

        self.client.wfile.write(bytes(websockets_frame.Frame(fin=1, mask=1, opcode=Opcode.CLOSE)))
        self.client.wfile.flush()
コード例 #7
0
    async def test_pong(self):
        self.setup_connection()

        self.client.wfile.write(bytes(websockets_frame.Frame(fin=1, mask=1, opcode=Opcode.PING, payload=b'foobar')))
        self.client.wfile.flush()

        header, frame, _ = websocket_utils.read_raw_frame(self.client.rfile)
        _ = websocket_utils.read_raw_frame(self.client.rfile)
        self.client.wfile.write(bytes(websockets_frame.Frame(fin=1, mask=1, opcode=Opcode.CLOSE)))
        self.client.wfile.flush()

        assert header.opcode == Opcode.PONG
        assert frame.payload == b'foobar'
        assert await self.master.await_log("pong received")
コード例 #8
0
 def handle_websockets(cls, rfile, wfile):
     wfile.write(
         bytes(
             websockets_frame.Frame(fin=1,
                                    opcode=Opcode.TEXT,
                                    payload=b'server-foobar')))
     wfile.flush()
コード例 #9
0
    def handle_websockets(cls, rfile, wfile):
        header, frame, _ = websocket_utils.read_raw_frame(rfile)
        assert header.opcode == Opcode.TEXT
        success = frame.payload == b'This is an injected message!'

        wfile.write(bytes(websockets_frame.Frame(fin=1, opcode=Opcode.TEXT, payload=str(success).encode())))
        wfile.flush()
コード例 #10
0
 def test_serialization_bijection(self, masked, length):
     frame = websockets_frame.Frame(
         os.urandom(length),
         fin=True,
         opcode=Opcode.TEXT,
         mask=int(masked),
         masking_key=(os.urandom(4) if masked else None))
     serialized = bytes(frame)
     assert frame == websockets_frame.Frame.from_bytes(serialized)
コード例 #11
0
    def test_close_payload_2(self):
        self.setup_connection()

        self.client.wfile.write(bytes(websockets_frame.Frame(fin=1, mask=1, opcode=Opcode.CLOSE, payload=b'\00\42foobar')))
        self.client.wfile.flush()

        _ = websocket_utils.read_raw_frame(self.client.rfile)
        with pytest.raises(exceptions.TcpDisconnect):
            _ = websocket_utils.read_raw_frame(self.client.rfile)
コード例 #12
0
    def test_close(self):
        self.setup_connection()

        self.client.wfile.write(
            bytes(websockets_frame.Frame(fin=1, mask=1, opcode=Opcode.CLOSE)))
        self.client.wfile.flush()

        _ = websocket.read_frame(self.client.rfile)
        with pytest.raises(exceptions.TcpDisconnect):
            _ = websocket.read_frame(self.client.rfile)
コード例 #13
0
    async def test_ping(self):
        self.setup_connection()

        header, frame, _ = websocket_utils.read_raw_frame(self.client.rfile)
        _ = websocket_utils.read_raw_frame(self.client.rfile)
        self.client.wfile.write(bytes(websockets_frame.Frame(fin=1, mask=1, opcode=Opcode.CLOSE)))
        self.client.wfile.flush()
        assert header.opcode == Opcode.PING
        assert frame.payload == b''  # We don't send payload to other end

        assert await self.master.await_log("Pong Received from server", "info")
コード例 #14
0
    def handle_websockets(cls, rfile, wfile):
        wfile.write(
            bytes(
                websockets_frame.Frame(fin=1,
                                       opcode=Opcode.PING,
                                       payload=b'foobar')))
        wfile.flush()

        header, frame, _ = websocket.read_frame(rfile)
        assert header.opcode == Opcode.PONG
        assert frame.payload == b'foobar'

        wfile.write(
            bytes(
                websockets_frame.Frame(fin=1,
                                       opcode=Opcode.PONG,
                                       payload=b'done')))
        wfile.flush()

        wfile.write(bytes(websockets_frame.Frame(fin=1, opcode=Opcode.CLOSE)))
        wfile.flush()
        _ = websocket.read_frame(rfile, False)
コード例 #15
0
    def test_equality(self):
        f = websockets_frame.Frame(payload=b'1234')
        f2 = websockets_frame.Frame(payload=b'1234')
        assert f == f2

        assert f != b'1234'
コード例 #16
0
    def test_human_readable(self):
        f = websockets_frame.Frame()
        assert repr(f)

        f = websockets_frame.Frame(b"foobar")
        assert "foobar" in repr(f)
コード例 #17
0
 def round(*args, **kwargs):
     f = websockets_frame.Frame(*args, **kwargs)
     raw = bytes(f)
     f2 = websockets_frame.Frame.from_file(tutils.treader(raw))
     assert f == f2