Exemplo n.º 1
0
def test_error():
    connection = Connection()
    data = b'\x00\x00\x13\x00\x00\x26\x6a\x2c\x00\x00\x00\x02\x04\x77\x65\x69'
    data += b'\x72\x64\x6e\x65\x73\x73'
    frame, = connection.receive_data(data)
    assert isinstance(frame, ErrorFrame)
    assert frame.serialize() == data
Exemplo n.º 2
0
def test_multiple_frames():
    connection = Connection()
    data = b'\x00\x00\x06\x00\x00\x00\x7b\x24\x00'
    data += b'\x00\x00\x13\x00\x00\x26\x6a\x2c\x00\x00\x00\x02\x04\x77\x65\x69'
    data += b'\x72\x64\x6e\x65\x73\x73'
    data += b'\x00\x00\x06\x00\x00\x00\x7b\x24\x00'
    data += b'\x00\x00\x06\x00\x00\x00\x7b\x24\x00'
    data += b'\x00\x00\x06\x00\x00\x00\x7b\x24\x00'
    frames = connection.receive_data(data)
    assert len(frames) == 5
Exemplo n.º 3
0
 async def _receiver(self):
     try:
         connection = Connection()
         while True:
             data = await self._reader.read(1024)
             if not data:
                 self._writer.close()
                 break
             frames = connection.receive_data(data)
             for frame in frames:
                 stream = frame.stream_id
                 if stream and stream in self._streams:
                     self._streams[stream].frame_received(frame)
                     continue
                 if isinstance(frame, CancelFrame):
                     pass
                 elif isinstance(frame, ErrorFrame):
                     pass
                 elif isinstance(frame, KeepAliveFrame):
                     frame.flags_respond = False
                     self.send_frame(frame)
                 elif isinstance(frame, LeaseFrame):
                     pass
                 elif isinstance(frame, MetadataPushFrame):
                     pass
                 elif isinstance(frame, RequestChannelFrame):
                     pass
                 elif isinstance(frame, RequestFireAndForgetFrame):
                     pass
                 elif isinstance(frame, RequestResponseFrame):
                     stream = frame.stream_id
                     self._streams[stream] = RequestResponseResponder(
                         stream, self,
                         self._handler.request_response(
                             Payload(frame.data, frame.metadata)))
                 elif isinstance(frame, RequestStreamFrame):
                     stream = frame.stream_id
                     self._streams[stream] = RequestStreamResponder(
                         stream, self,
                         self._handler.request_stream(
                             Payload(frame.data, frame.metadata)))
                 elif isinstance(frame, RequestSubscriptionFrame):
                     pass
                 elif isinstance(frame, RequestNFrame):
                     pass
                 elif isinstance(frame, ResponseFrame):
                     pass
                 elif isinstance(frame, SetupFrame):
                     if frame.flags_lease:
                         lease = LeaseFrame()
                         lease.time_to_live = 10000
                         lease.number_of_requests = 100
                         self.send_frame(lease)
     except asyncio.CancelledError:
         pass
Exemplo n.º 4
0
def test_setup():
    connection = Connection()
    data = b'\x00\x00\x40\x00\x00\x00\x00\x05\x00\x00\x01\x00\x00\x00\x00\x00'
    data += b'\x7b\x00\x00\x01\xc8\x18\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f'
    data += b'\x6e\x2f\x6f\x63\x74\x65\x74\x2d\x73\x74\x72\x65\x61\x6d\x09\x74'
    data += b'\x65\x78\x74\x2f\x68\x74\x6d\x6c\x00\x00\x05\x04\x05\x06\x07\x08'
    data += b'\x01\x02\x03'

    frame, = connection.receive_data(data)
    assert isinstance(frame, SetupFrame)
    assert frame.serialize() == data

    assert frame.metadata_encoding == b'application/octet-stream'
    assert frame.data_encoding == b'text/html'
    assert frame.keep_alive_milliseconds == 123
    assert frame.max_lifetime_milliseconds == 456
    assert frame.data == b'\x01\x02\x03'
    assert frame.metadata == b'\x04\x05\x06\x07\x08'
Exemplo n.º 5
0
 async def _receiver(self):
     try:
         connection = Connection()
         while True:
             data = await self._reader.read(1024)
             if not data:
                 self._writer.close()
                 break
             frames = connection.receive_data(data)
             for frame in frames:
                 stream = frame.stream_id
                 if stream and stream in self._streams:
                     self._streams[stream].frame_received(frame)
                     continue
                 if isinstance(frame, CancelFrame):
                     pass
                 elif isinstance(frame, ErrorFrame):
                     pass
                 elif isinstance(frame, KeepAliveFrame):
                     if frame.flags_respond:
                         frame.flags_respond = False
                         self.send_frame_directly(frame)
                 elif isinstance(frame, LeaseFrame):
                     pass
                 elif isinstance(frame, MetadataPushFrame):
                     pass
                 elif isinstance(frame, RequestChannelFrame):
                     pass
                 elif isinstance(frame, RequestFireAndForgetFrame):
                     asyncio.get_event_loop().run_in_executor(
                         None, self._handler.request_fire_and_forget,
                         Payload(frame.data, frame.metadata))
                 elif isinstance(frame, RequestResponseFrame):
                     stream = frame.stream_id
                     response_handler = self._handler.request_response
                     if asyncio.iscoroutinefunction(response_handler):
                         future_result = await response_handler(
                             Payload(frame.data, frame.metadata))
                     else:
                         future_result = response_handler(
                             Payload(frame.data, frame.metadata))
                     self._streams[stream] = RequestResponseResponder(
                         stream, self, future_result)
                 elif isinstance(frame, RequestStreamFrame):
                     stream = frame.stream_id
                     self._streams[stream] = RequestStreamResponder(
                         stream, self,
                         self._handler.request_stream(
                             Payload(frame.data, frame.metadata)))
                 elif isinstance(frame, RequestNFrame):
                     pass
                 elif isinstance(frame, PayloadFrame):
                     pass
                 elif isinstance(frame, SetupFrame):
                     if frame.flags_lease:
                         lease = LeaseFrame()
                         lease.time_to_live = 10000
                         lease.number_of_requests = 100
                         self.send_frame(lease)
     except asyncio.CancelledError:
         pass
Exemplo n.º 6
0
def decoder():
    return Connection()
Exemplo n.º 7
0
def test_cancel():
    connection = Connection()
    data = b'\x00\x00\x06\x00\x00\x00\x7b\x24\x00'
    frame, = connection.receive_data(data)
    assert isinstance(frame, CancelFrame)
    assert frame.serialize() == data