Example #1
0
    def test_handle_max_stream_data_frame_receive_only(self):
        client = QuicConnection(is_client=True)
        server = QuicConnection(
            is_client=False,
            certificate=SERVER_CERTIFICATE,
            private_key=SERVER_PRIVATE_KEY,
        )

        # perform handshake
        client_transport, server_transport = create_transport(client, server)

        # server creates unidirectional stream 3
        server.create_stream(is_unidirectional=True)

        # client receives MAX_STREAM_DATA: 3, 1
        with self.assertRaises(QuicConnectionError) as cm:
            client._handle_max_stream_data_frame(
                tls.Epoch.ONE_RTT,
                QuicFrameType.MAX_STREAM_DATA,
                Buffer(data=b"\x03\x01"),
            )
        self.assertEqual(cm.exception.error_code,
                         QuicErrorCode.STREAM_STATE_ERROR)
        self.assertEqual(cm.exception.frame_type,
                         QuicFrameType.MAX_STREAM_DATA)
        self.assertEqual(cm.exception.reason_phrase, "Stream is receive-only")
Example #2
0
    def test_handle_max_stream_data_frame(self):
        client = QuicConnection(is_client=True)
        server = QuicConnection(
            is_client=False,
            certificate=SERVER_CERTIFICATE,
            private_key=SERVER_PRIVATE_KEY,
        )

        # perform handshake
        client_transport, server_transport = create_transport(client, server)

        # client creates bidirectional stream 0
        stream = client.create_stream()[1].transport
        self.assertEqual(stream.max_stream_data_remote, 1048576)

        # client receives MAX_STREAM_DATA raising limit
        client._handle_max_stream_data_frame(
            tls.Epoch.ONE_RTT,
            QuicFrameType.MAX_STREAM_DATA,
            Buffer(data=b"\x00" + encode_uint_var(1048577)),
        )
        self.assertEqual(stream.max_stream_data_remote, 1048577)

        # client receives MAX_STREAM_DATA lowering limit
        client._handle_max_stream_data_frame(
            tls.Epoch.ONE_RTT,
            QuicFrameType.MAX_STREAM_DATA,
            Buffer(data=b"\x00" + encode_uint_var(1048575)),
        )
        self.assertEqual(stream.max_stream_data_remote, 1048577)